关于OMAPL138在SYSBIOS下DSP侧动态申请内存问题 - OMAP-L138 - 嵌入式开发者社区 - 51ele.net
设为首页收藏本站

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2015-9-4 08:33:31 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
创龙工程师你好,我在OMAPL138单独调试DSP程序(使用SYSBIOS)时,在任务中使用calloc函数动态申请内存,用完后free,类似如下结构
* W8 n5 M! `8 F7 |3 E* u! ~
  ~/ a' }% |5 g! g0 v/ r    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //2562 E0 I/ m5 l3 m) g- n- {

8 L6 M+ p6 E6 `: r- q. u其他程序段。。。。。
: ?- n% U0 a& E. H: l6 o* `$ V7 F8 e/ ` . e; u4 X! p) P& m! C" _! F% A) z
   free(x_d);: o6 [5 o0 l( \8 k" H
# P7 m0 \* ?1 b) L6 p* M. B. Y
使用DSP侧单独调试功能,验证动态申请没有问题,% _7 {, `+ \; \1 o4 ~8 r7 c5 }% ^

6 v5 E$ f& I6 N. B% y# g( N但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。
+ o! Y/ n6 h2 J2 o; l

) X1 O3 o. @5 s# z
, }& }: o. @0 O; _3 J6 l, H& o
. s, Q; O" s7 E$ N, U# |4 Y6 v& g2 R2 Y( I# _9 M0 I
) [3 A$ m) V0 }. W

) D' M1 ~) O. o
6 Z9 D2 X0 J3 x8 H& F" f5 ?+ e8 H2 d

- Z/ E" h+ s6 I6 v( {- \& M/ f& M6 d# e6 M! l8 @7 X
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2015-9-4 10:29:21 | 只看该作者
补充说明
: e6 Z8 y* C) M- u$ ~我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下
7 c# ]1 b' U5 l( _* u(不过疑惑的是,为何单独DSP仿真就没有问题呢?)
9 J: z" ~7 K+ @! [- [

0 g  C) H2 f6 s2 N* v是不是需要在DSP.CFG中进行配置  t9 I& Q6 A! \
我现在的配置为% [3 c/ C; ]+ E; G; z& E7 {

2 N" r$ k! f/ d- t2 ~9 z5 d/*
2 N8 d+ C0 M& d- n( v' D$ x4 \+ H; L6 I *  ======== Operating System Configuration ========9 W* Y& \8 p# P6 i9 g0 c* x0 r) X
*/+ W: P' t' Y% q" B+ O. N
2 F3 [( M  F* r' s5 x' N  Q
/* no rts heap */
1 v+ J7 q2 Q4 }  k  hProgram.heap = 0;
% Z1 ]4 {# v- j% C2 m9 q4 |; pProgram.argSize = 100;  /* minimum size */
/ h+ g% _( ~4 ^" u, SProgram.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大5 d' b& G# W0 k" S' |

# X5 Y' T. N0 b; A8 P/* create a default heap */! A# B0 g; }/ M( d9 W& o
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
0 H" P+ Q: F- G6 Lvar heapMemParams = new HeapMem.Params();
. u/ m( d# h4 x8 ~; U- @heapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大, A: X& z' Q/ m# ~8 Z" Q

# v$ \, ~. y' \6 g3 Q' T
var Memory = xdc.useModule('xdc.runtime.Memory');
& M5 P5 e9 P( Y, w+ f' TMemory.defaultHeapInstance = HeapMem.create(heapMemParams);" t/ A! J+ X" x; P4 |3 D2 Z

/ L5 Z3 m% M  ?" q! m/* configure System module */
5 h3 E2 L* ~7 y: S+ m8 y5 Q, N% bvar SysMin = xdc.useModule('xdc.runtime.SysMin');
2 K7 B! B. X1 g# j+ n% l+ ]: ESysMin.bufSize = 0x1000;+ r& k% K8 ]/ H$ v) Q: j4 e' C/ J- ~
SysMin.flushAtExit = false;0 `4 G) {. w% |3 {' ^

5 `1 T8 q( G- G/ fvar System = xdc.useModule('xdc.runtime.System');
  h$ L' T3 p0 V- W' FSystem.SupportProxy = SysMin;& }% S0 r! e% P3 z6 F9 Q
" _; }+ C& c* h
/* configure SysBios to use the lower half of Timer 1 */
- Z% y# ?* x& j- C8 H- Pvar Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');
' g' E! n9 D" ?# g% ]8 _var Clock = xdc.useModule('ti.sysbios.knl.Clock');7 B8 d2 h0 O  G& d4 N. r1 [0 z, O
Timer.timerSettings[1].master = true;, X+ v- A. s; \* O- c. l
Timer.defaultHalf = Timer.Half_LOWER;+ E& S: b1 Q0 y' p
Clock.timerId = 1;
$ t5 K2 T3 F# C3 B: _1 U4 a4 b* }
4 m1 _. i5 c! Q/ A! l
; P" e' _, S% m5 }5 C! R5 }/** ~' T6 o, P+ E( H9 ]; C- ~
*  ======== Miscellaneous Configuration ========" F+ q$ @/ _' _/ ?& T
*/
( n+ p/ M3 W" y; Q- V
8 G* K) O6 X; m& q$ j/* set default diags mask */! S' D/ v2 ?6 @
var Diags = xdc.useModule('xdc.runtime.Diags');/ W0 S. O; [1 U4 o* w5 H: g
var Defaults = xdc.useModule('xdc.runtime.Defaults');
& t' r$ [/ B* S  D2 s1 N; R* K5 ^
Defaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;
; R0 k: i3 ?! N6 {. YDefaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;
% D* b5 N0 g: Y% [7 I7 xDefaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;
. H4 F+ `3 L) D2 v& gDefaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */
' F9 W# y' V1 O! `; R1 A9 kDefaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */
+ v9 ^7 r5 |* C4 |( J! b% \Defaults.common$.diags_STATUS    = Diags.RUNTIME_ON;- u8 p9 P$ G- w) U  j0 {, @& D
Defaults.common$.diags_USER1     = Diags.ALWAYS_OFF;1 D8 h/ a0 Y1 l' w+ P6 w( c
Defaults.common$.diags_USER2     = Diags.ALWAYS_OFF;
2 h- c- O' y4 eDefaults.common$.diags_USER3     = Diags.ALWAYS_OFF;
5 ^$ `* c3 p2 d  ], g6 KDefaults.common$.diags_USER4     = Diags.ALWAYS_OFF;
: j8 Y" V7 s  u+ M. \: fDefaults.common$.diags_USER5     = Diags.ALWAYS_OFF;
, V: x+ c6 w1 V8 `3 rDefaults.common$.diags_USER6     = Diags.ALWAYS_OFF;
3 |. a+ q4 P( S+ |% d, HDefaults.common$.diags_INFO      = Diags.ALWAYS_OFF;
8 e: Z7 B3 B$ u0 g4 c3 kDefaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;
% p, s( `  S* S# f3 k' N8 B# d1 a
4 Q1 b9 x9 s9 m! z/* override diags mask for selected modules */
, J! a: @# L4 lxdc.useModule('xdc.runtime.Main');- @3 ]( p1 n% x5 A
Diags.setMaskMeta(
# z; V& j! |+ S/ o    "xdc.runtime.Main",  p2 ?- p" Z9 n% I* r
    Diags.ENTRY | Diags.EXIT | Diags.INFO,
& ~- T$ w  P+ r1 `" P    Diags.RUNTIME_ON
+ M; F! s" q7 f' T) {* G);: Z  {7 ~4 E! {/ l

3 x8 }2 }; u. ]& K) _var Registry = xdc.useModule('xdc.runtime.Registry');( i- z* N3 Z& G
Registry.common$.diags_ENTRY = Diags.RUNTIME_OFF;
4 J& Z& S4 M8 x6 }$ ?3 ^3 zRegistry.common$.diags_EXIT  = Diags.RUNTIME_OFF;
8 I7 N1 U- u3 O/ pRegistry.common$.diags_INFO  = Diags.RUNTIME_OFF;$ P& j. E  G7 p, Q
Registry.common$.diags_USER1 = Diags.RUNTIME_OFF;( S0 V5 r7 Y# R" j9 f9 \  K; g2 Z" f

( e/ N; ?! M, _: v) u/* create a logger instance */1 o3 m! ~$ r; H* X( ?$ g6 T7 ~
var LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');
4 ]! X, ~" d' F) H8 Jvar loggerBufP = new LoggerBuf.Params();
% t3 m$ H9 }6 ZloggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */
" o% O+ ^3 m* e5 w  ?loggerBufP.bufType = LoggerBuf.BufType_FIXED;
+ E# ~& A6 N8 T0 v  c8 a
1 I+ U) T7 a9 Z7 C! D" q* @6 ^var appLogger = LoggerBuf.create(loggerBufP);6 R9 J1 m0 ?/ @+ U; l" j
appLogger.instance.name = "AppLog_Core1";6 s: s$ y  i+ y0 d4 m; T
Defaults.common$.logger = appLogger;
8 o& Z! b" Z# ]9 p- D0 f$ Z/ f0 HMemory.defaultHeapSize = 0x8192;   
# G/ E3 `% `2 o) QIdle.idleFxns[0] = "&LEDStatus";3 O  p  w6 U. A7 O
Cache.initSize.l2Size = Cache.L2Size_32K;
0 E3 b0 q% y/ a' f# J; ?) U6 c' [6 M: a9 `* h! G
回复 支持 反对

使用道具 举报

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 */8 s4 L/ Y. q5 c6 }5 f' u0 F! J
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');6 ?8 F* q2 U5 R, S: i3 L4 S% ~
var heapMemParams = new HeapMem.Params();
  Y6 i( p; w: L1 {' S1 o* BheapMemParams.size = 0x4000;
1 W% j7 E, ~* @8 n- U: F* G+ x
0 e' D/ L0 g  j; J) A7 \, b; i: ~var Memory = xdc.useModule('xdc.runtime.Memory');7 C7 V5 \$ d+ O7 E7 [2 I! N0 n
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);
% W; ^% K' r7 X3 m' P, v; F* V  f  E. a: k
我大约calloc  每次共计大小为5K*16bits,
+ N& Y5 U+ `# b$ y! b8 E而默认配置才0x4000、需要改大。
3 \5 d& k; u) h# a1 J( y. j4 ?
' d9 i/ {1 L, c
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
5#
 楼主| 发表于 2015-10-28 16:14:47 | 只看该作者
/* no rts heap */
4 f" z! R# F: i6 S$ IProgram.heap = 0;
' b: e' F, E3 M) N, N7 GProgram.argSize = 100;  /* minimum size */2 ~7 {- H2 @+ |* T0 q
Program.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 08:36 , Processed in 0.049699 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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