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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2015-9-4 08:33:31 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
创龙工程师你好,我在OMAPL138单独调试DSP程序(使用SYSBIOS)时,在任务中使用calloc函数动态申请内存,用完后free,类似如下结构( N5 Y* X& X7 U. J' d
9 V5 j( |$ K8 B! c( u5 o
    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //256
; [2 t8 [5 M5 Y5 ?' A6 r, U  @. X* b. u3 n+ K( Z5 m. t# V1 x
其他程序段。。。。。
# e+ |# U2 y' I. X
9 t2 z- S9 M: ?7 M   free(x_d);
/ z& l. c  f3 w& r( O$ B) w6 B! g1 \" o( _  t  m: \
使用DSP侧单独调试功能,验证动态申请没有问题,6 [% U5 c. x0 b% [0 o% K, ~+ Q( b3 d  ?. n

. g& u' }' S8 T# L- J4 b5 G+ w但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。8 u: v5 F; I) N6 B" k$ m6 ?

* N8 B7 V6 D" m% J1 D! S) o7 A# q9 d- u3 c! }, H* f
+ r3 g* l6 {& B  i' G
1 b  A0 A+ _2 b# }. C2 |3 ^

& j. v6 P3 ~+ y% I% C8 I) q9 i6 Q" }( n- p" o: }

" ^5 [& ^1 m2 l0 D' V2 G$ I0 Y3 G5 L$ I

  O( @5 ]7 C$ _5 b* J4 u9 v4 _  C
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2015-9-4 10:29:21 | 只看该作者
补充说明
/ P- H' |2 _" t0 _* |# X# s8 i& i我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下
* l/ _7 K8 Y1 x2 b(不过疑惑的是,为何单独DSP仿真就没有问题呢?)( X" I( C, f8 }# F

& @( `& ~# I) b" @, X是不是需要在DSP.CFG中进行配置
% I( }1 y" N2 q$ N3 [. V9 g+ n我现在的配置为( ^7 a  i9 l8 y! P

* e7 ^! Y3 s. W' t+ e/*5 m9 n1 G- S* v
*  ======== Operating System Configuration ========: l' ~) T& Y/ f. G
*/& I9 K% C: ?5 |0 J/ J- z
  m" K4 t2 h) Z0 z5 v: ?
/* no rts heap */
6 y4 n' R/ a- Y- X) s6 A6 ?Program.heap = 0;' Z' L7 K' g/ d( [5 i
Program.argSize = 100;  /* minimum size */
9 S1 ?2 E" v: EProgram.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大
1 z6 P- B* p/ S- w: N
% B, M' b* w6 Y6 i0 Z% E# F( L9 O/* create a default heap */
" J( B, U5 o' N: o8 Kvar HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');2 @: t: R3 [  Y, H4 t3 t
var heapMemParams = new HeapMem.Params();
' N/ L: D' K4 ~* L( G6 sheapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大
7 {2 p/ _8 b( z; S9 g
. e1 |, @9 l4 {" V  f0 V
var Memory = xdc.useModule('xdc.runtime.Memory');# \3 J& O/ }, \! i! D# c
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);
2 j" p% P  P+ @" O& m- V
$ j1 _8 g% a0 L2 s& m  r3 I9 E9 \/* configure System module */! a- h: s1 T; E
var SysMin = xdc.useModule('xdc.runtime.SysMin');
1 M2 w% @* {$ m6 Y0 a/ Z/ O; wSysMin.bufSize = 0x1000;
; |$ i- e3 T" ?. A4 iSysMin.flushAtExit = false;- U% l; f5 y. Y
7 q% O: Y& p/ ^. ^" ?2 m
var System = xdc.useModule('xdc.runtime.System');( L4 Q0 z1 F& D, N( ?) u
System.SupportProxy = SysMin;
7 f0 }; w6 U# j' J9 F9 F- g' S
- {3 y  H4 x" ]3 ]( [1 q/* configure SysBios to use the lower half of Timer 1 */$ s3 T& h! r8 |- c. S4 S
var Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');1 _2 A& z; Z& l2 ^
var Clock = xdc.useModule('ti.sysbios.knl.Clock');0 j/ H, z, u" L) ~  G# T5 R
Timer.timerSettings[1].master = true;  m0 n0 ^7 W6 j6 W, X' s4 K
Timer.defaultHalf = Timer.Half_LOWER;/ Z8 R' }" c8 [. M; T0 f
Clock.timerId = 1;* p$ }( Z& q# {3 j+ m0 k( i$ ?
" q/ V# v8 V, J+ d
2 ?/ Y  G5 ~: {. t2 i  q- R* g, \( W
/*
0 o$ ]/ m9 D: q  c9 l: Z *  ======== Miscellaneous Configuration ========
* d" `5 t* R! i3 ] */9 D' B$ {1 E: O. i' p) @' P
( a4 |( @' P& w/ y7 T! q
/* set default diags mask */- N+ [" m! U0 T1 F
var Diags = xdc.useModule('xdc.runtime.Diags');- J* D" y" k" H- y' h6 Q) ~# v
var Defaults = xdc.useModule('xdc.runtime.Defaults');% l9 ^' |: c0 u: v% c' O( q

3 z1 k1 ~. _) f" I* ^Defaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;( N/ o$ z2 I* J& d+ c( l/ G
Defaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;
: B( J: G, l4 _# I* @3 c$ qDefaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;
% b) S+ q9 R- S7 d: IDefaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */' Q0 B$ |: |0 d5 _
Defaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */
" d- d- Q5 e( m* TDefaults.common$.diags_STATUS    = Diags.RUNTIME_ON;
, R& E* l1 Q% K' P, WDefaults.common$.diags_USER1     = Diags.ALWAYS_OFF;
/ Z) M( P) n* S% S. l- Q, ~2 z! J+ RDefaults.common$.diags_USER2     = Diags.ALWAYS_OFF;
7 d) R! J3 N/ V1 E: [Defaults.common$.diags_USER3     = Diags.ALWAYS_OFF;
% Z: |0 x9 N4 gDefaults.common$.diags_USER4     = Diags.ALWAYS_OFF;
! U$ M; \) ]* e. C+ x9 rDefaults.common$.diags_USER5     = Diags.ALWAYS_OFF;
0 M5 l" B2 R3 r1 X; ^) n  [; NDefaults.common$.diags_USER6     = Diags.ALWAYS_OFF;8 Z  C3 [  M& l0 }7 |
Defaults.common$.diags_INFO      = Diags.ALWAYS_OFF;, p3 q5 }) W% f6 W- Q
Defaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;" D! I7 J4 [* h8 E& ^# u2 F3 B
; e& H( L. {% Q# e4 t! }
/* override diags mask for selected modules */
( b& n$ [4 U* q9 jxdc.useModule('xdc.runtime.Main');7 `7 o& k2 Z" i# w4 ~8 c
Diags.setMaskMeta(
/ T: t% A3 C% X6 d+ w    "xdc.runtime.Main",+ g" S- r# }9 t& C9 C* u# }4 D( k
    Diags.ENTRY | Diags.EXIT | Diags.INFO,2 G6 J& s2 A! k4 ~
    Diags.RUNTIME_ON
, n! I$ @: Z* |: O( G9 C2 v);4 Z# U0 @0 `+ p$ c) r9 t
9 K9 r6 ?# V& R' m) j1 L
var Registry = xdc.useModule('xdc.runtime.Registry');
# _2 ]. h7 N& w' k' L- bRegistry.common$.diags_ENTRY = Diags.RUNTIME_OFF;) q) A; R$ s7 f- h
Registry.common$.diags_EXIT  = Diags.RUNTIME_OFF;8 ]* O2 }/ |) R* o7 P6 N: s
Registry.common$.diags_INFO  = Diags.RUNTIME_OFF;# W4 M) k6 o9 G/ f8 t0 M0 V# M- V( X
Registry.common$.diags_USER1 = Diags.RUNTIME_OFF;8 z' e4 s( Q% q! `( J
4 q1 h2 e$ Q; r0 F3 R* Z
/* create a logger instance */' P' w0 [8 _3 Z
var LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');1 T: w) P# U* P% l5 ^
var loggerBufP = new LoggerBuf.Params();. F7 a% S7 |* Y8 J9 x: T
loggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */
* |- g9 Q7 w+ A! C/ qloggerBufP.bufType = LoggerBuf.BufType_FIXED;
8 c: p: ~7 s. e. u2 X6 u7 \/ g7 _! D5 K; {6 X
var appLogger = LoggerBuf.create(loggerBufP);2 a9 i2 T. I2 [/ N& X7 `4 C8 p5 {# v
appLogger.instance.name = "AppLog_Core1";
5 J3 |" `+ _3 n: F' HDefaults.common$.logger = appLogger;- n1 i9 t6 B! ]7 G. i( }5 a
Memory.defaultHeapSize = 0x8192;   
! z. Z2 c8 E& r6 y: ]% s% TIdle.idleFxns[0] = "&LEDStatus";
* h' {1 k7 f! s9 u; L$ DCache.initSize.l2Size = Cache.L2Size_32K;
# C5 G6 V8 ]" w4 {/ ?  d: r5 B1 F6 w/ o
回复 支持 反对

使用道具 举报

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 */* J* h; g7 G2 ~; ~
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
' D+ r& X' p& \# R; G9 L  Mvar heapMemParams = new HeapMem.Params();9 F1 l, i' I6 ?2 K: R
heapMemParams.size = 0x4000;3 \1 O' m8 H" n

  Q  A2 M$ b2 fvar Memory = xdc.useModule('xdc.runtime.Memory');
/ i& w3 Y: d( N9 C. m" gMemory.defaultHeapInstance = HeapMem.create(heapMemParams);
. V) @. K, K' R' p* m5 D& z1 q3 S2 q0 P1 r8 j; C
我大约calloc  每次共计大小为5K*16bits,
, E/ l8 t3 G3 h  x: n( O- g而默认配置才0x4000、需要改大。
% T: n; _* O, W, S& i; _) q: C0 T4 L9 c% a, G* U( v) q: R9 Y
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
5#
 楼主| 发表于 2015-10-28 16:14:47 | 只看该作者
/* no rts heap */. H% Y: H' X8 h; c) X  g3 w
Program.heap = 0;
/ N8 `: ^" A' a7 a6 u; D  ~Program.argSize = 100;  /* minimum size */
. `$ z3 s* m- F" sProgram.stack = 0xF000;                   //我改到F000  也不行
回复 支持 反对

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

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

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2026-1-13 12:55 , Processed in 0.042038 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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