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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2015-9-4 08:33:31 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
创龙工程师你好,我在OMAPL138单独调试DSP程序(使用SYSBIOS)时,在任务中使用calloc函数动态申请内存,用完后free,类似如下结构
+ H7 h+ D/ R+ u* b9 W5 y# ~% s& X: q- \" G+ O
    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //256- u  B8 F/ a2 X* w

- d! r# B4 n. e其他程序段。。。。。
& _! X1 ~% u+ A
* ], k# _- d( y2 R   free(x_d);
: |; t) s# f! j. q/ G6 I1 Q" k; i! ^4 w' E
使用DSP侧单独调试功能,验证动态申请没有问题,
$ K$ v$ a2 l, s  F
: K3 \: l0 T* h' b2 O但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。$ M% q7 U) }3 M3 s  ~& b. k+ X9 u

1 I( ^6 P0 s7 n3 L/ [" S+ j. S2 {2 T  o
* e- ?4 @+ `2 f9 g/ }! k
) f8 P! n  n! F$ F

7 L2 Y; P/ ]- W( K9 W" T7 O
+ P8 Y' \' c, C
4 X- Y/ `/ G: B# I
* {' m, w' M9 i5 z( f: i) G. o  q. h; @% D5 P. x6 q: @; [: ^
' u; ]# G* a5 S# h
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2015-9-4 10:29:21 | 只看该作者
补充说明: i, h# B0 E9 l/ ~& g8 ]
我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下" u+ v# i: m' O4 _( D
(不过疑惑的是,为何单独DSP仿真就没有问题呢?)+ F1 f; X2 A% L) A& ~2 H3 g5 ~! q

* G- C5 Y- V& m/ h是不是需要在DSP.CFG中进行配置5 ~1 a& Y# v8 U' i
我现在的配置为
  I1 \# W& z. s! o2 l: V$ y( {/ i. b- O* k
/*. E: z1 ~+ ?% \
*  ======== Operating System Configuration ========
& V7 O2 _8 e& Z9 Z( O */
/ Z2 y1 P) C. |. c/ M  e! t) o( b  _3 z6 d
/* no rts heap */# X, l6 ]5 t/ S9 D
Program.heap = 0;! N3 [, t' R: e0 Q6 f
Program.argSize = 100;  /* minimum size */
: D* z. f7 Y' |Program.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大
" U' D4 I9 y$ m! g% l. Z
% Z0 I  `* Y4 _5 J, `( I1 I/* create a default heap */! Y* g/ p6 D3 }2 b( E. z* D
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');* g3 M# v/ W3 g  _- q2 }1 K- V! b
var heapMemParams = new HeapMem.Params();/ ~, p  g5 b6 o
heapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大
$ y5 n, z8 H& b/ @" ~: H" X7 O7 R5 w
5 [) r4 d$ e6 Y  s% f. W4 @
var Memory = xdc.useModule('xdc.runtime.Memory');* U0 Z$ ?# [+ F  R5 Y6 V8 x9 l
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);
4 R; J) I# ~; ^& X- P/ ~
- s' j, L) g7 w8 T# h: A9 Q/* configure System module */
- Y5 r8 x( \. N5 ovar SysMin = xdc.useModule('xdc.runtime.SysMin');
, c! {" Y, M9 A7 RSysMin.bufSize = 0x1000;, R( s  m" S8 o+ \: p1 `
SysMin.flushAtExit = false;/ R" ?- ~. Y6 x/ k
9 i2 V$ X9 I9 P; v# G
var System = xdc.useModule('xdc.runtime.System');3 p  W! K- u  ]  p
System.SupportProxy = SysMin;0 Z7 ]# v; A: p" O* T' h5 ]3 x

4 e2 g6 l* g. w/* configure SysBios to use the lower half of Timer 1 */9 a1 N& {6 M+ G- c: `5 C
var Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');
3 J+ m+ E4 T$ lvar Clock = xdc.useModule('ti.sysbios.knl.Clock');
* L0 b: I0 F% @! Q1 K+ }Timer.timerSettings[1].master = true;' I/ ^: A# D1 D& S7 v
Timer.defaultHalf = Timer.Half_LOWER;8 |2 s8 P/ x$ C4 O+ F: K! N
Clock.timerId = 1;  R3 @! i. L+ o5 x

3 W6 G: e4 r; B6 p8 M* X9 A, E. r: ~6 y! U( j6 a. I1 T
/*5 X+ o' L# x( ]! N) @/ ~
*  ======== Miscellaneous Configuration ========
- o! M1 U$ X) r: u" l2 y  x */" t; t$ ~: x. \1 D

) }2 L# S# W& M9 [) q/* set default diags mask */
( v3 M* o6 Z& ~* Y) zvar Diags = xdc.useModule('xdc.runtime.Diags');- G6 D% A4 C+ v' j  _
var Defaults = xdc.useModule('xdc.runtime.Defaults');
5 F& L- {- _4 B7 A0 E/ W  ?. O6 s$ m
' V7 A1 D" T8 U7 k$ b6 N* y0 u1 SDefaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;) @9 ?5 Y+ j/ o/ U: T$ N$ i; C
Defaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;
' S2 U. Z1 ^" g5 x! c$ FDefaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;8 J- U7 G; ]7 m- ^  y) L' o  i
Defaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */
, @8 G% N. X' h7 rDefaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */+ N# s, d% ^' R
Defaults.common$.diags_STATUS    = Diags.RUNTIME_ON;' z& W$ ~4 T9 k2 |
Defaults.common$.diags_USER1     = Diags.ALWAYS_OFF;
' Y3 B: ^$ k) m/ ]6 H6 LDefaults.common$.diags_USER2     = Diags.ALWAYS_OFF;5 V8 Q0 ]. W9 o9 }. {& B% U7 Q
Defaults.common$.diags_USER3     = Diags.ALWAYS_OFF;
8 h1 U7 z" j* ?# x; p0 h8 cDefaults.common$.diags_USER4     = Diags.ALWAYS_OFF;
# f1 F5 j8 {' i5 s% T  s0 LDefaults.common$.diags_USER5     = Diags.ALWAYS_OFF;
- @# j- O6 j  Y2 _5 |. P8 qDefaults.common$.diags_USER6     = Diags.ALWAYS_OFF;. `. I: s: h; A
Defaults.common$.diags_INFO      = Diags.ALWAYS_OFF;
/ u+ f% L8 |9 L* x5 [5 [Defaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;: S8 w$ ^% E0 V8 T
. {4 Z. H+ L. S
/* override diags mask for selected modules */6 I; r% m3 ~1 I$ ~8 U2 n  x9 w, q4 c& `
xdc.useModule('xdc.runtime.Main');  }+ S1 d0 g. y$ |* |4 H7 ^
Diags.setMaskMeta(! m, c. n# t" j( W
    "xdc.runtime.Main",
  [; z* i% E# e+ w    Diags.ENTRY | Diags.EXIT | Diags.INFO,
5 t" z2 `. @+ p3 g* g/ X; a    Diags.RUNTIME_ON
5 R% q2 f7 [1 u3 T. t- R);
: q: s/ _" z. o& ]  o( l3 _7 T6 G/ n) J/ s8 Q& G9 C* o; Q" L
var Registry = xdc.useModule('xdc.runtime.Registry');1 [8 H. y8 F7 J& X% h+ o
Registry.common$.diags_ENTRY = Diags.RUNTIME_OFF;
* u  _3 g) M- k) I9 |Registry.common$.diags_EXIT  = Diags.RUNTIME_OFF;4 q! F2 v: z8 I
Registry.common$.diags_INFO  = Diags.RUNTIME_OFF;+ J( B+ z. U$ X* v& l( z
Registry.common$.diags_USER1 = Diags.RUNTIME_OFF;" c5 s% z" l* g- l. l% d

! T6 j- S/ T+ \* i/* create a logger instance */' }) l- j7 o& W$ b" `; M6 ?- N
var LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');/ |5 e' y( c; j- ]7 @2 ?/ G, a
var loggerBufP = new LoggerBuf.Params();# ?+ I) h, M6 X3 m2 t; |
loggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */
0 }6 C! W* H: c/ q; f$ jloggerBufP.bufType = LoggerBuf.BufType_FIXED;
+ R( {  M  n! ~( G. A% ?
' g( _$ C& L3 X1 n4 J. qvar appLogger = LoggerBuf.create(loggerBufP);
3 d: h1 x. q- d: ?! m' iappLogger.instance.name = "AppLog_Core1";
! ?4 `6 n4 b3 ?1 k! S' jDefaults.common$.logger = appLogger;
% x) j3 V  H8 P7 z: \) K  ^Memory.defaultHeapSize = 0x8192;   
% [! ~7 \$ z3 h- M& w/ Y0 JIdle.idleFxns[0] = "&LEDStatus";
+ j$ k1 v6 h& O, }1 \" ?/ u7 UCache.initSize.l2Size = Cache.L2Size_32K;
3 V& A$ E, ~3 c/ x/ I& P0 s% i9 \2 n5 p9 m# D, @
回复 支持 反对

使用道具 举报

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 */
0 W/ _0 r0 I$ Svar HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
" g' a8 a! o; u" T4 Tvar heapMemParams = new HeapMem.Params();
8 }* \7 N3 c: iheapMemParams.size = 0x4000;  M5 P6 J/ [- \2 E7 u6 t9 d8 m

: F- A1 o8 F. k) a0 x/ k8 tvar Memory = xdc.useModule('xdc.runtime.Memory');# I. O! I" c4 u* P; o# X
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);
5 G+ ~# R+ h$ ~' n; }8 w( U5 ^$ J* [. n, C1 H& i
我大约calloc  每次共计大小为5K*16bits,
8 r4 b  D! h: u% k而默认配置才0x4000、需要改大。& q, v/ P8 R3 ^4 ^+ ?! @

4 I* z$ d4 ], R: \
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
5#
 楼主| 发表于 2015-10-28 16:14:47 | 只看该作者
/* no rts heap */
# `( Q. ~% d  e# h0 Q, kProgram.heap = 0;
1 S" ~! B$ ]& F9 j9 c6 ?' o- vProgram.argSize = 100;  /* minimum size */
5 K$ r4 b( x9 ?/ ?' J2 U% XProgram.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 02:27 , Processed in 0.041843 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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