关于OMAPL138在SYSBIOS下DSP侧动态申请内存问题 - OMAP-L138 - 嵌入式开发者社区 - 51ele.net
设为首页收藏本站
点击跳转“创龙科技服务通”

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 7811|回复: 5
打印 上一主题 下一主题

关于OMAPL138在SYSBIOS下DSP侧动态申请内存问题

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2015-9-4 08:33:31 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
创龙工程师你好,我在OMAPL138单独调试DSP程序(使用SYSBIOS)时,在任务中使用calloc函数动态申请内存,用完后free,类似如下结构
5 U: T8 O$ t8 Y3 U9 `; g$ D( ]4 p8 {# `# e) |9 o1 b. s) S- q
    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //256
: n6 s& S) q; c! c% C0 N# K& Z9 w
; P/ G1 G" i$ I* `6 s$ I) K其他程序段。。。。。
  i! K8 ]. O1 W& P1 u! \, |, `
; H. V" [9 J5 T; L- C   free(x_d);: w  v  L2 _/ i) Q; _2 T, g
. l- p# @' D$ v& M& u# a6 A
使用DSP侧单独调试功能,验证动态申请没有问题,5 e; C" Q6 N# o; D) ?) S6 i
& P3 E: M2 q, F! Y- t
但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。/ Z" \( V9 p8 Q" _" z( d6 T: a

- _. `7 ?1 y3 M, w6 y7 G+ w+ w1 b0 R

. |- D# X) V; u" o5 a* P9 S7 `! d& i& n" @+ v
/ z! S1 M! f' P1 s6 k, F

5 F. _( T0 n! K
9 R3 _+ V% d8 e9 Z" O! E2 p8 o4 ~4 R
% C* ^' M( Q6 q" k* V9 k  {3 N9 L+ [8 h$ r! Y

( ]# \# Z: Q7 y2 r1 S# J8 A
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2015-9-4 10:29:21 | 只看该作者
补充说明
7 u+ z% y9 m% p1 u4 h我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下
: J  C5 j0 I# j8 u. V$ g/ o+ U(不过疑惑的是,为何单独DSP仿真就没有问题呢?)- V8 o- f$ Q/ k+ i
/ P; G" u3 r0 j+ v9 ]2 q* p. W4 H" n
是不是需要在DSP.CFG中进行配置) |! Q0 x3 V8 t: w% F% W
我现在的配置为/ A, m4 `  n1 Q) ?) [: a. {

, q, s. y, i% ]5 N3 t8 B/*
" i$ L3 @  G% J' M+ j/ Z7 h/ e *  ======== Operating System Configuration ========: z7 M% d) }7 H  R2 \: T
*/. m2 g, h4 D( j

- N7 e; ]7 G* R. r- l8 C/* no rts heap */8 x; a  e- `+ f
Program.heap = 0;/ f+ d: S; l. z' U: X$ @/ t9 b
Program.argSize = 100;  /* minimum size */2 I7 q% j* i& _$ L2 {4 \, v
Program.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大
$ Q; D( D& s. Y; w% c5 @- e5 T, u1 }9 h7 ?6 b
/* create a default heap */
  q# [4 S% \5 }0 z- x& \var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');9 P+ K/ [" [8 N. L
var heapMemParams = new HeapMem.Params();% z  O/ l. F: M
heapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大( T% d* {! F6 j# \# I5 I) m8 A/ Q; h0 m
! M2 w0 K! l4 y
var Memory = xdc.useModule('xdc.runtime.Memory');  f6 B& d9 s  _: A- Y$ r* U1 [
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);2 `6 y4 q, T( k: w
8 c) I* ]1 F5 P& G/ W, j
/* configure System module */
; @4 M2 [& z+ k7 k4 Evar SysMin = xdc.useModule('xdc.runtime.SysMin');3 {+ O+ p% A2 L$ {% b! }6 ^
SysMin.bufSize = 0x1000;
5 G5 d7 g  K! P7 w& T0 @7 eSysMin.flushAtExit = false;
8 B4 B( U6 T8 k$ }( d$ l5 x
$ K4 }7 c5 p) P0 v2 J3 m" r; T, Vvar System = xdc.useModule('xdc.runtime.System');: k, s" ?, o, L; Y" }: M! w; G
System.SupportProxy = SysMin;
7 d0 f# c! s+ \; k) |
( N; a5 [) V7 l, ~% C4 J# i/* configure SysBios to use the lower half of Timer 1 */
+ _, S1 _7 K8 X4 Uvar Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');
8 {+ x# i6 m6 Pvar Clock = xdc.useModule('ti.sysbios.knl.Clock');
: e  L4 p. U+ h* a3 J/ cTimer.timerSettings[1].master = true;. |4 R4 T$ X; g/ v
Timer.defaultHalf = Timer.Half_LOWER;
- l' t# O, q9 m: L$ zClock.timerId = 1;
  F$ c# p9 G  {2 H) L  t
& [) |3 L  Y) {
3 E! }, I" h" r; a# ~, q- t/*) ]2 M1 z2 v) b7 h# U* c
*  ======== Miscellaneous Configuration ========
- C; J* E! C2 y& W7 K7 S */8 a. J3 ~, c! ]1 G
, @" ~4 {7 X" z; a9 g1 n5 d
/* set default diags mask */0 n) W5 u$ V6 X# P
var Diags = xdc.useModule('xdc.runtime.Diags');
. B: g0 K9 y1 N/ X- b- Z( _! fvar Defaults = xdc.useModule('xdc.runtime.Defaults');
8 v' `7 m( q. Z5 e. g7 f+ Z9 w, q. Z
9 L' c/ a7 n' c7 X# K* TDefaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;
# q7 `5 U5 @1 [( {6 KDefaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;
! `# K- }9 I+ J8 x0 I2 ^Defaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;
' T0 J" ~4 x1 D4 J9 z9 N9 t3 lDefaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */. w3 f. Y3 P4 G
Defaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */' c! v$ G* x: o$ B. n8 Q4 j  ~
Defaults.common$.diags_STATUS    = Diags.RUNTIME_ON;8 R6 i5 e9 J7 ^3 d+ q1 q) f: |6 N
Defaults.common$.diags_USER1     = Diags.ALWAYS_OFF;
1 n% |* Y5 S# NDefaults.common$.diags_USER2     = Diags.ALWAYS_OFF;
2 s0 W  _5 e1 v9 f' cDefaults.common$.diags_USER3     = Diags.ALWAYS_OFF;7 o1 G5 l0 C- m) X$ f/ v" j  \
Defaults.common$.diags_USER4     = Diags.ALWAYS_OFF;) p  k. x. F9 f9 ]2 B
Defaults.common$.diags_USER5     = Diags.ALWAYS_OFF;
- G- }) Z( W0 _6 J- ?Defaults.common$.diags_USER6     = Diags.ALWAYS_OFF;- F; Q7 Q+ B/ \" c  f. B, _
Defaults.common$.diags_INFO      = Diags.ALWAYS_OFF;
8 E$ m$ q0 k/ c  O! ~( w3 m6 aDefaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;( _/ q' _- O: |+ q
0 S' X% N+ A5 i9 U$ S
/* override diags mask for selected modules */
& z8 t- f) z4 D+ H+ |+ sxdc.useModule('xdc.runtime.Main');
5 [& d& I3 u9 J2 n1 Z. G  BDiags.setMaskMeta(3 r8 W* y. x3 D: q9 q
    "xdc.runtime.Main",
- q! m+ }* I6 r1 y0 K" x: ~    Diags.ENTRY | Diags.EXIT | Diags.INFO,1 y* H; I- ~& r% v. @
    Diags.RUNTIME_ON
0 F. C, t7 Y. o);# U+ t& f- ?+ Y1 O

' A& n/ D6 M7 b6 ~1 U; j( Kvar Registry = xdc.useModule('xdc.runtime.Registry');
* [1 C/ x" l5 ^) V. G3 KRegistry.common$.diags_ENTRY = Diags.RUNTIME_OFF;0 Y- ]; {* E/ @5 V+ r
Registry.common$.diags_EXIT  = Diags.RUNTIME_OFF;
, F; p  Z' i6 L( V) cRegistry.common$.diags_INFO  = Diags.RUNTIME_OFF;0 m6 i/ N0 X) L9 O8 ~( j/ ?+ E
Registry.common$.diags_USER1 = Diags.RUNTIME_OFF;  B' p+ W4 t2 \, `, w$ e7 |
. ]# ?$ K3 e7 E8 }
/* create a logger instance */7 d: C% q+ d7 }4 y! s5 ?
var LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');
5 `& P, ]' |) Q, `, I5 p( p6 ~var loggerBufP = new LoggerBuf.Params();
) {6 Q: ?' Z0 B6 }3 ~loggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */3 E- p! _0 V) }- \' Q3 d
loggerBufP.bufType = LoggerBuf.BufType_FIXED;
8 I9 q& G! X9 U& _5 X4 I6 n4 j$ T. R' _# `1 {5 l' G+ a! ?' g0 o
var appLogger = LoggerBuf.create(loggerBufP);
4 M! `) v* {- ?$ k4 r# o: ?2 sappLogger.instance.name = "AppLog_Core1";
, X3 p/ w; u8 K  j3 ?% v! H! {6 fDefaults.common$.logger = appLogger;" \  u6 f) k! b, e4 o: r# q. c( H
Memory.defaultHeapSize = 0x8192;   
! B6 K) t5 h/ l2 g" YIdle.idleFxns[0] = "&LEDStatus";
/ U0 j0 G% `4 q, G. }) ^  c, hCache.initSize.l2Size = Cache.L2Size_32K;
, n3 B! e7 b. q  U' U1 x$ V( h4 B# s
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
板凳
 楼主| 发表于 2015-9-7 15:38:00 | 只看该作者
为什么没人回答呢?   大家都不用动态申请内存方式吗?
回复 支持 反对

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

积分
1093
地板
发表于 2015-10-28 09:51:31 | 只看该作者
/* create a default heap */
  E! I: e6 Q  S0 U. _var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
3 A7 D1 s2 x7 I) zvar heapMemParams = new HeapMem.Params();" ^5 K' L2 e' ]5 |' W
heapMemParams.size = 0x4000;. l- a3 f8 D2 K. o+ ~) U* l
/ \5 |4 A! @3 ]" V: U+ r4 d
var Memory = xdc.useModule('xdc.runtime.Memory');. Q( F- v; T5 v) Z+ I# @
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);
6 {7 }: O) B3 Z( N3 @) R
: ?& n0 \" q8 ^1 J, Q1 y1 K我大约calloc  每次共计大小为5K*16bits,
9 o3 d8 @# Y9 R4 g2 f' p而默认配置才0x4000、需要改大。
" |  x( H( d/ t) m# r8 Q; l" U: P8 Q& ^9 v7 `. Y
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
5#
 楼主| 发表于 2015-10-28 16:14:47 | 只看该作者
/* no rts heap */
* s$ c+ l* t. fProgram.heap = 0;
) B; Y/ t2 D" ~) a& gProgram.argSize = 100;  /* minimum size */
4 u+ A7 I$ _- x: H0 I7 WProgram.stack = 0xF000;                   //我改到F000  也不行
回复 支持 反对

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

积分
1093
6#
发表于 2015-10-31 20:55:50 来自手机 | 只看该作者
这个问题,我再测试一下,过两天实测后给你答复!
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

点击跳转“创龙科技服务通”

QQ|手机版|小黑屋|嵌入式开发者社区 ( 粤ICP备15055271号

GMT+8, 2026-2-25 19:58 , Processed in 0.043217 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

快速回复 返回顶部 返回列表