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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2015-9-4 08:33:31 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
创龙工程师你好,我在OMAPL138单独调试DSP程序(使用SYSBIOS)时,在任务中使用calloc函数动态申请内存,用完后free,类似如下结构
6 o4 a# m4 V8 \% f' e3 J" N- d+ F) V  ^# j. Q5 i, N0 @" g6 z: l
    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //256
8 I# c' I3 \6 Z$ D; s$ h
; K! A3 e/ X3 D8 p" o其他程序段。。。。。* h5 a4 q& |  C
* k! z6 Z2 k  R# e0 X8 U" b1 D7 J
   free(x_d);5 z9 {1 T( G6 R8 i( M3 ^

7 `& \# O9 X9 q' D使用DSP侧单独调试功能,验证动态申请没有问题,
, W& T) H. ~- s- A+ a
3 e$ i8 M( V) Y$ H4 d) J$ ]但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。
5 `* M, C! e; \: G' ?6 ^

7 Q) L- F6 E. O$ L% P1 {
7 P0 o  Z7 L/ }) w/ x4 ~+ h6 L$ f$ x5 ~9 x  x) Y
# l/ p$ c6 o$ h* S' s! O

( B. Y" m5 X( @2 Z
- w6 A0 A. J% A7 z+ P' U$ W# ?3 W

" l* t  b8 C( i: ^" C$ g1 E6 b0 w- @1 W+ X7 ~3 K% h
2 g* S/ b* o$ M2 h" S
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2015-9-4 10:29:21 | 只看该作者
补充说明
8 ?7 @* W( x8 ~  n; Z我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下  P. L" u' \3 }( ?$ Q
(不过疑惑的是,为何单独DSP仿真就没有问题呢?)
* O  J' r& L8 Q

# ?6 |: k9 j8 y( A4 f是不是需要在DSP.CFG中进行配置9 |8 m+ F5 [) Z; r% v% I) h. J4 X
我现在的配置为, H: J, _8 G. ^$ z2 x
$ F' D0 H& a, F0 n. @
/*! b/ I- h' v. h) d1 I! W* c
*  ======== Operating System Configuration ========4 h) G' I! c; k. X; `
*/
3 \2 k5 O+ Q$ x& T) S3 ?
) J2 `" U  g- c% s. [3 I' L/* no rts heap */
# Z8 C7 k) s: ]4 R5 IProgram.heap = 0;
! l1 @1 Z$ D+ L! P3 X3 z- nProgram.argSize = 100;  /* minimum size */
$ x% s$ R& G# t/ cProgram.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大
; j) u( b& K* u- v& {" Y$ w' T9 Y* _9 }1 m6 b9 G, F( W
/* create a default heap */0 M6 F4 \+ b) v  ]# o7 r% U
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
1 m% r* d3 V+ ?' Z- zvar heapMemParams = new HeapMem.Params();! U2 E, {/ G% x9 ], l
heapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大
' ]' Q% w& I+ D
; x. ~* Z2 D  C& I  d
var Memory = xdc.useModule('xdc.runtime.Memory');& H; W& `4 O, K* `4 _& `
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);
6 t7 F, u2 q) F) E3 j  U4 A8 a4 k" {
/* configure System module */6 A4 c9 c# q4 U. P( o3 G* j
var SysMin = xdc.useModule('xdc.runtime.SysMin');% f; _9 F- q! m) s9 ~( S% }
SysMin.bufSize = 0x1000;( ~7 f- T7 c: _. P" ~
SysMin.flushAtExit = false;1 {6 |' m; j. D5 R0 j4 ~3 L

0 C4 O5 ?9 @1 `. V2 q, ?var System = xdc.useModule('xdc.runtime.System');/ j) x! ]' @/ {4 k* j$ s
System.SupportProxy = SysMin;- u7 z8 D$ s2 u1 U% }+ ]

) Q! c% o5 a( {# @% r1 t/ y/* configure SysBios to use the lower half of Timer 1 */
5 a' D. O* S$ E! U2 \" Wvar Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');. D2 q1 _' a8 a" U
var Clock = xdc.useModule('ti.sysbios.knl.Clock');
4 l) O2 n2 y# |Timer.timerSettings[1].master = true;
- V! `; g7 L' j# R  M: a. rTimer.defaultHalf = Timer.Half_LOWER;3 }5 v- \( S0 W; w
Clock.timerId = 1;
. W. f+ r% {+ U' `0 x
8 j9 T1 v4 q1 o" Q4 y4 A9 _: K0 k" g4 T' v
/*; H3 g0 O8 P5 E) l  a6 J6 m
*  ======== Miscellaneous Configuration ========
6 M; r% ~0 g( _: i, d9 y0 O */
7 T) _  i  H; L& x4 N2 i' Q: s, e) U2 O8 M, _" K0 u
/* set default diags mask */
. `/ o. A  J" F1 W5 Avar Diags = xdc.useModule('xdc.runtime.Diags');
, t( G0 d/ \9 x; W6 n" Xvar Defaults = xdc.useModule('xdc.runtime.Defaults');; ]4 S, W6 T4 f' R1 n7 r" p

9 b5 y  m' W  [Defaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;
2 X1 S" @8 X& A# D: N. \Defaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;
8 Y- C5 W* A) Z& A& t' kDefaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;
3 T3 i2 z: b1 R; l7 vDefaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */
: M, Y3 t' i! [0 g! Z, m7 v& zDefaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */; m# {% u0 y% P5 E) h6 s( z3 W
Defaults.common$.diags_STATUS    = Diags.RUNTIME_ON;0 O' c! O% ^* l* e) i
Defaults.common$.diags_USER1     = Diags.ALWAYS_OFF;* Z# ?& _$ L0 W; |" y  H8 `5 U6 Q
Defaults.common$.diags_USER2     = Diags.ALWAYS_OFF;2 D8 J8 ~, b4 `6 F" S0 Q1 }
Defaults.common$.diags_USER3     = Diags.ALWAYS_OFF;
! W* `7 o7 y7 }Defaults.common$.diags_USER4     = Diags.ALWAYS_OFF;% c1 l0 k; n# v3 x" O
Defaults.common$.diags_USER5     = Diags.ALWAYS_OFF;  i) R" r1 ^6 s. X2 Z  e
Defaults.common$.diags_USER6     = Diags.ALWAYS_OFF;
1 k, a! e$ q/ D! z4 [' bDefaults.common$.diags_INFO      = Diags.ALWAYS_OFF;4 M# R3 Y9 a& j, r7 R. r# ~  i0 Q5 s
Defaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;
8 Y: o3 c+ O$ B  W+ s% D: \
5 E3 O8 ?. `# z! c/* override diags mask for selected modules */
9 L9 p, R" q  ~+ H' yxdc.useModule('xdc.runtime.Main');
+ M; L" u, r& o2 yDiags.setMaskMeta(& {9 m0 ~: ?& w) }: h5 m
    "xdc.runtime.Main",
& I0 ]& Z6 k5 P1 A( W    Diags.ENTRY | Diags.EXIT | Diags.INFO,+ ?* M- p+ m0 Y6 U2 R- ]
    Diags.RUNTIME_ON$ @; c, L! ~! b" o. q, w: ^! u" m( N
);
. g+ B2 {% I& q9 E! V2 ?8 S2 ?6 m7 G
var Registry = xdc.useModule('xdc.runtime.Registry');
2 S% q- C" g1 [+ D5 f! y$ E7 qRegistry.common$.diags_ENTRY = Diags.RUNTIME_OFF;: [$ D3 d. j8 B1 s# X
Registry.common$.diags_EXIT  = Diags.RUNTIME_OFF;! i! l% [* x+ e5 }: \
Registry.common$.diags_INFO  = Diags.RUNTIME_OFF;
$ P6 E+ ?9 j( u5 |* NRegistry.common$.diags_USER1 = Diags.RUNTIME_OFF;
) K; V% ^3 F1 C/ ?! E
' Q6 P4 x* a. p: t. l/ c/* create a logger instance */$ F( `2 E1 m0 k
var LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');
6 z. m! A  x, h2 Tvar loggerBufP = new LoggerBuf.Params();
$ f) `. Q4 z) R+ [7 ploggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */) L4 M1 e3 i& i" I" r3 B9 Y2 j/ `
loggerBufP.bufType = LoggerBuf.BufType_FIXED;  x; d: D# l+ y( i; n

  Y4 {0 v+ ~1 qvar appLogger = LoggerBuf.create(loggerBufP);7 e" u  o1 R" i- n3 X$ E% ~
appLogger.instance.name = "AppLog_Core1";
; [+ ]0 t8 n$ W  Y9 z  VDefaults.common$.logger = appLogger;# J% G, x! B7 U' p% H  i& N
Memory.defaultHeapSize = 0x8192;   
, }, E) [: @' a+ V& bIdle.idleFxns[0] = "&LEDStatus";1 ]- j4 T( \& ?9 q% i: U9 y& L
Cache.initSize.l2Size = Cache.L2Size_32K;
8 |* s) B! [9 q: _8 h# A
/ M$ e3 z" _$ Q2 R! H2 K" n
回复 支持 反对

使用道具 举报

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 */* x2 ^" t& L2 b) Y4 t; \
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');) Y+ k; H; N! y
var heapMemParams = new HeapMem.Params();
$ _! l! k! o1 F7 KheapMemParams.size = 0x4000;
1 w; Z0 Z9 f, D' v# w3 p& U# G" z5 E9 T
var Memory = xdc.useModule('xdc.runtime.Memory');# f4 i. g! @+ E
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);3 Q) D0 _& q- @6 K/ H8 C

  ~( m% f3 }6 c: W+ G/ v2 t8 G. h我大约calloc  每次共计大小为5K*16bits,. K+ k" G0 |* t" j4 I
而默认配置才0x4000、需要改大。4 w5 v/ v; S( q; ?/ f: }6 B
- g5 o8 ]- s2 \7 N
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
5#
 楼主| 发表于 2015-10-28 16:14:47 | 只看该作者
/* no rts heap */6 ~& x$ h. {& T4 N! N: C$ l
Program.heap = 0;
) b0 u! z9 }; }2 v- G- UProgram.argSize = 100;  /* minimum size */
4 l2 H- {& K! z4 SProgram.stack = 0xF000;                   //我改到F000  也不行
回复 支持 反对

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

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

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2026-3-10 14:17 , Processed in 0.042507 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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