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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2015-9-4 08:33:31 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
创龙工程师你好,我在OMAPL138单独调试DSP程序(使用SYSBIOS)时,在任务中使用calloc函数动态申请内存,用完后free,类似如下结构) Y% W/ v! b4 r' z
$ i  e# Z6 ~1 ~
    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //256
7 p( M# t6 y' ~; j
7 X9 ?7 }4 p: p! o) V: F2 V. j' ^其他程序段。。。。。7 N7 |) [. W9 Z$ m
( W2 T* i! e7 d( i2 g5 l  y- ?* M
   free(x_d);
% X. T8 g6 a/ p* j8 ~5 N9 U: y) O% A# R% A: q6 i; y3 z
使用DSP侧单独调试功能,验证动态申请没有问题,, d0 a& U- Z2 X* s  d( c

7 Q/ d, [% [7 W* p* i但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。/ k4 F5 v2 Q* G$ g5 c9 i* m
  l$ R1 D5 h; \
3 A4 i5 L8 @3 g& Q9 P" P
. W5 J' @$ g/ ^4 V
" G) q+ L' @: b) X5 b

" Q- z" c6 M  J+ c! u1 V3 K& i5 ~$ |4 ~3 B/ I. R6 a: b! l

  n" |. L! U/ S; m
$ D  X' y3 E1 j6 ]
9 L# r. v$ Z, |2 o( Y$ q. r, j7 u: V. `9 j' r" N9 ]6 n+ O
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2015-9-4 10:29:21 | 只看该作者
补充说明
; v0 u5 K$ Q' ~' w) X我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下
; E1 z. Z  I+ q- F(不过疑惑的是,为何单独DSP仿真就没有问题呢?)
$ _. b8 m( c# ~9 r" B
; W+ _7 a" ?9 n& u) r2 W8 w
是不是需要在DSP.CFG中进行配置5 c8 |+ o2 V$ U" P
我现在的配置为+ h( L4 U+ C4 c! \4 R
* O: @" c6 t* G) h* b
/*) _# X4 b3 H; l. X
*  ======== Operating System Configuration ========
" }: ~" p7 J* J% i */
9 R4 e  w. p4 r8 S: z9 z1 z
' r9 |  J  t1 r7 H& X# B/* no rts heap */
/ ^) d/ A  E0 ?0 _' eProgram.heap = 0;* Z. E2 K5 m. K; @# Z$ k) o
Program.argSize = 100;  /* minimum size */# ?% i) l% R. f! |& _5 |4 c
Program.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大
- w4 K. s0 O. ]+ H6 D3 D" G. O* Z- p* c" E3 T# d
/* create a default heap */) ]( i4 w+ x% s
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');; l9 R5 d" _. ^0 D* Q" L0 O9 j
var heapMemParams = new HeapMem.Params();
8 Y3 B8 d' o/ \0 O& NheapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大
9 y: ]# G/ p$ r% _: [: V! ~% R  Z8 i, q) W6 W! E/ E
var Memory = xdc.useModule('xdc.runtime.Memory');
% \# Y" s4 s" \- ?  ]! L9 LMemory.defaultHeapInstance = HeapMem.create(heapMemParams);! C4 c2 M# R! a; J; A: L- u2 P* ?

3 K; h8 q6 x+ @! k- E6 D/* configure System module */8 S2 a4 I7 x$ a" y. T+ a9 C
var SysMin = xdc.useModule('xdc.runtime.SysMin');1 s: c. ~8 Z" s* x. K2 E: _
SysMin.bufSize = 0x1000;+ R9 p0 Q( }9 {! t# H; m1 r$ z5 J
SysMin.flushAtExit = false;# X1 V3 D' Z9 r8 c  `  Z) Z+ f$ w

# O$ g7 X6 Q; G. p3 B; Dvar System = xdc.useModule('xdc.runtime.System');* O0 U' f+ H2 e
System.SupportProxy = SysMin;
4 c4 k9 Y  C; G! W% |& ~. Q3 u% w. |' L9 g7 H' i2 V
/* configure SysBios to use the lower half of Timer 1 */
4 `# M0 g6 d- x" W; @6 S: _9 ivar Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');* B8 B: e& D1 y4 l7 S  }% }+ \" M9 o
var Clock = xdc.useModule('ti.sysbios.knl.Clock');9 e% U, Y# ?! k$ X6 Y9 v
Timer.timerSettings[1].master = true;4 c9 |$ R; ~) E+ o, p
Timer.defaultHalf = Timer.Half_LOWER;! U5 K2 x+ \7 |
Clock.timerId = 1;4 ~5 v' U, K5 H; _
) G; }/ Z+ o' x: Y
. Z/ X+ `. W- x9 x0 j4 K
/*+ b# l) N+ W3 ]
*  ======== Miscellaneous Configuration ========  D* L9 }# }1 m* q  H( p  U
*/
5 G% p$ f  X  ]3 L, s* U; T0 T! i' d1 L; h, g
/* set default diags mask */8 |/ x' H3 ], S- A3 T/ a5 p' s- P
var Diags = xdc.useModule('xdc.runtime.Diags');* e1 J/ [) t' ^& q6 V) W2 h( V
var Defaults = xdc.useModule('xdc.runtime.Defaults');
6 M! t8 |* c4 c; y# K) j7 @; b. b: N0 [% E! P# {
Defaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;" W8 u+ e/ p4 x1 ~/ d4 d3 v# r
Defaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;
- D9 T. j) U% v0 l! uDefaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;
% a) Z6 d2 i1 h% IDefaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */
- u$ S) L! D  k8 b, }! M( }0 fDefaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */
' U' B8 Y4 B. f* `1 _Defaults.common$.diags_STATUS    = Diags.RUNTIME_ON;( B* _( p, F& j9 g4 N% n
Defaults.common$.diags_USER1     = Diags.ALWAYS_OFF;0 z$ n6 p4 w  o  h
Defaults.common$.diags_USER2     = Diags.ALWAYS_OFF;4 }' E+ s$ A- Y: j
Defaults.common$.diags_USER3     = Diags.ALWAYS_OFF;. m2 I/ B# N% w! D& h
Defaults.common$.diags_USER4     = Diags.ALWAYS_OFF;- W5 |: O2 [+ U. c
Defaults.common$.diags_USER5     = Diags.ALWAYS_OFF;( l( P3 i. B. K( [
Defaults.common$.diags_USER6     = Diags.ALWAYS_OFF;
9 D( K& d! U8 p& EDefaults.common$.diags_INFO      = Diags.ALWAYS_OFF;& f3 o$ [: E. t" X
Defaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;; M: v$ j2 Z7 E7 B2 a1 b; z/ A

6 W6 O  N- S' A+ e/* override diags mask for selected modules */
2 r( n/ m4 C/ R% y* Bxdc.useModule('xdc.runtime.Main');
4 K+ g/ Z: s& u! ?9 a) QDiags.setMaskMeta(
) ]0 c% B+ g* l, o6 v: P/ A    "xdc.runtime.Main",
4 t6 u1 E- T2 `6 x    Diags.ENTRY | Diags.EXIT | Diags.INFO,
6 Z8 y2 k: ^- w9 [    Diags.RUNTIME_ON
2 d6 j9 z1 P7 `/ W5 W/ ]);
, G! }+ R  l8 Y6 T2 ]3 O. |: K" W" S: Z0 J+ w, r
var Registry = xdc.useModule('xdc.runtime.Registry');
9 e% Z: I; Z7 Q% S! R0 {# r0 I& rRegistry.common$.diags_ENTRY = Diags.RUNTIME_OFF;. e/ c& n" ]' `: O' ^& f
Registry.common$.diags_EXIT  = Diags.RUNTIME_OFF;& k8 ~' _: a1 `0 {
Registry.common$.diags_INFO  = Diags.RUNTIME_OFF;
3 W# M0 B6 @" S: d0 a2 {/ yRegistry.common$.diags_USER1 = Diags.RUNTIME_OFF;. R  @2 \, @: ]5 ~3 n& ~" c) z
9 z. r0 z9 P7 ?8 _
/* create a logger instance */
7 [+ h+ Z7 K5 fvar LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');
3 ~0 }, ?9 |3 ]0 g5 Fvar loggerBufP = new LoggerBuf.Params();
. g9 h. x' l8 b% S% _5 LloggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */
: G& Q, f0 x5 m& t1 s$ t& U/ C, x# \loggerBufP.bufType = LoggerBuf.BufType_FIXED;( B* E3 m1 M: x* m: ~5 W% z

& u3 X5 _7 V  j6 k8 Z$ g7 uvar appLogger = LoggerBuf.create(loggerBufP);
4 v: C! ?$ h0 q2 sappLogger.instance.name = "AppLog_Core1";
# f% U( \/ Q. J7 n9 l4 ?$ ]# ]Defaults.common$.logger = appLogger;6 Y2 ~# C- C, S! `- c
Memory.defaultHeapSize = 0x8192;   
, |' K8 ?/ m. ]. W: v0 y- y' p3 MIdle.idleFxns[0] = "&LEDStatus";
% m4 t0 H3 O; V; x" r. aCache.initSize.l2Size = Cache.L2Size_32K;( U8 z4 Q. q3 M" Y* t! G

5 N* `* e# L; {
回复 支持 反对

使用道具 举报

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 */4 l1 V0 I% A5 N7 X: n3 i! \; Z9 |
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
2 u* f, K! Z+ `! Ovar heapMemParams = new HeapMem.Params();: A6 ^4 H) C: |, W* L* t
heapMemParams.size = 0x4000;3 y- Q$ F; V+ h! i" r8 ]- ~8 J

2 [* m/ C! f, L( @; ]7 d* g1 Zvar Memory = xdc.useModule('xdc.runtime.Memory');
: d3 I( _* I7 z4 K. R( ]Memory.defaultHeapInstance = HeapMem.create(heapMemParams);2 G) J  {3 u5 a' A
8 G7 k! E* h: F8 J* c
我大约calloc  每次共计大小为5K*16bits,; Q8 s8 D. r, \
而默认配置才0x4000、需要改大。$ ]. C% s4 [0 A# {" i

' A  l8 T+ H; u/ Y2 F2 p
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
5#
 楼主| 发表于 2015-10-28 16:14:47 | 只看该作者
/* no rts heap */
8 d- I! u5 I% T5 I, QProgram.heap = 0;
+ }. U6 I+ D5 C. O  c( \Program.argSize = 100;  /* minimum size */
2 e4 X# M$ r$ Q, i! a/ @Program.stack = 0xF000;                   //我改到F000  也不行
回复 支持 反对

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

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

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2026-2-21 23:12 , Processed in 0.043368 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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