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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2015-9-4 08:33:31 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
创龙工程师你好,我在OMAPL138单独调试DSP程序(使用SYSBIOS)时,在任务中使用calloc函数动态申请内存,用完后free,类似如下结构/ f) e! B% @0 k+ Q% y: f

* }, M% r9 O7 e3 h1 t$ \$ G    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //256
5 v7 w- s# Z, v
% j$ ^' {+ Q- f, O9 L( F8 t其他程序段。。。。。
7 \) u6 @- Z9 F' [
9 T$ \' N& s7 z0 n0 {) e; l   free(x_d);/ Z5 z( j1 p) ^

1 Q( l# x$ o, G* R& `使用DSP侧单独调试功能,验证动态申请没有问题,
1 M+ D) C. N0 K/ h+ S' y  X
; l1 ~4 ]4 `( {' _) w但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。
9 r% l0 P  w2 V. o: ?

) P6 K# V9 d0 r! @& l- F5 f( p+ I& ?- g. Y" F/ q# F! z1 T2 `, ?

" ?) P% }. E  S6 O2 M4 X3 z2 V  ^$ r5 X5 P8 Y! E7 r
/ z! X, D' z! a9 g0 d' y
( b! d6 o  ]3 L: U% \

7 p; F( U; ^4 g- l6 Y4 f( A$ Q. y) q6 l- a3 ~, |

- P9 F# M+ m& {9 y' \( Q3 W  W2 `1 ~1 ]
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2015-9-4 10:29:21 | 只看该作者
补充说明  J9 Z5 Q: m2 F5 _% `4 t. D
我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下
0 N1 y9 r0 i' c/ Y" s' v. B5 L(不过疑惑的是,为何单独DSP仿真就没有问题呢?)
8 m* l, r. G7 h( Q
# T8 A3 a) f+ w* n( Y
是不是需要在DSP.CFG中进行配置4 R0 Z- b/ t0 m) e
我现在的配置为
+ C6 h0 W( Y6 r; D% H+ C9 H9 w4 T9 X* r; a  y
/*
$ [) z" ?# [7 k: _# R2 U2 h *  ======== Operating System Configuration ========% k5 j9 I2 O4 `6 q/ r" K0 C" o
*/+ A" i9 W* j6 q+ |. _
& b; [+ g7 a0 L" B- H
/* no rts heap */( M# i: q1 M! T+ b0 W9 Q/ W" y0 ~
Program.heap = 0;
. m8 C9 m  x. j4 Q9 _9 R5 _6 {Program.argSize = 100;  /* minimum size */, _1 [+ d7 L* X
Program.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大
2 w" h1 {( u2 L( @9 K8 e1 m* ^! y: E; p8 |: `% M7 P
/* create a default heap */
. R: z! J. b  Qvar HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');  `( a0 a+ J: k" g" ]8 y
var heapMemParams = new HeapMem.Params();
+ a7 \# x1 f# J2 z) V" m7 Z0 WheapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大
& m1 S: x4 K7 A* [: p9 w1 `
3 H; f9 x+ u7 X  y
var Memory = xdc.useModule('xdc.runtime.Memory');
! K  E8 j/ j1 s5 y$ ~% A% f  RMemory.defaultHeapInstance = HeapMem.create(heapMemParams);
8 t: }0 _( j8 W0 J$ o: \
; r3 q8 a5 z; M& `/* configure System module */
, k8 C- o8 ]0 z, P3 w" jvar SysMin = xdc.useModule('xdc.runtime.SysMin');. j/ w* J$ F( H6 i0 {" q. Q: }
SysMin.bufSize = 0x1000;
7 v( E, K4 k: @6 y/ V: ]: G/ \" VSysMin.flushAtExit = false;, P/ p; ^3 A1 o3 b4 N9 d$ d

) H! w7 R9 u& Z  g$ R" K/ P, f8 Y9 kvar System = xdc.useModule('xdc.runtime.System');
, r, I# t. D$ m- S' jSystem.SupportProxy = SysMin;4 [% g6 D- V% U! E) a7 U6 t" c
  l* \/ s. W; K2 c! J$ h0 g
/* configure SysBios to use the lower half of Timer 1 */
" R$ ?6 L6 _  V) wvar Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');
7 J/ ^# q  s0 w6 b% g( c3 F) m4 ?var Clock = xdc.useModule('ti.sysbios.knl.Clock');* u  m$ U7 s) b# F1 Z
Timer.timerSettings[1].master = true;' f, w0 F. N! d  z" |
Timer.defaultHalf = Timer.Half_LOWER;
- d0 ~! b' D5 r' J! E4 jClock.timerId = 1;
7 o# y% C' T8 c0 F
/ t5 `4 f% u; j" H: g* B: e( O: d* F( I) Y
/*
( t; ?$ |  P. M' A6 ?: I *  ======== Miscellaneous Configuration ========! Z8 u! ]6 o. u
*/
, H' V7 P8 `6 @; v& @0 ?
. X  c6 Z: ^/ u4 w$ o  N  v/* set default diags mask */
/ T6 h; j% ~. Q4 L& _$ N9 rvar Diags = xdc.useModule('xdc.runtime.Diags');* G5 L5 k+ K. o0 j. ?( e
var Defaults = xdc.useModule('xdc.runtime.Defaults');' f9 P8 U( Z! T  Y& e' l' c: n3 _
, E' W" \. I* @8 R) q/ s( T
Defaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;* Y, x+ Z3 ^" G/ y2 s) B# j3 q
Defaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;
) g+ D- g( g4 f8 ]: ]( H' f, r7 wDefaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;
- R) w, m! d" n) YDefaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */
  w1 `" H* R! h! ?Defaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */
7 S/ O3 N; |4 ]1 w: Q2 JDefaults.common$.diags_STATUS    = Diags.RUNTIME_ON;
4 N. J. f; f2 G4 w' ]' F+ r1 cDefaults.common$.diags_USER1     = Diags.ALWAYS_OFF;
4 M% ?: y7 l) [$ u7 ]7 T# p2 CDefaults.common$.diags_USER2     = Diags.ALWAYS_OFF;5 o7 Z7 Y, r& z9 u9 X
Defaults.common$.diags_USER3     = Diags.ALWAYS_OFF;: T5 v) _! o' s
Defaults.common$.diags_USER4     = Diags.ALWAYS_OFF;
! N5 P% g: r" H8 lDefaults.common$.diags_USER5     = Diags.ALWAYS_OFF;
2 V* i/ p0 Y" s1 y1 TDefaults.common$.diags_USER6     = Diags.ALWAYS_OFF;+ @6 ]- M6 _2 I* h( m  Z& Q6 |
Defaults.common$.diags_INFO      = Diags.ALWAYS_OFF;8 G# f2 g6 p, t: q- O4 N* E
Defaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;
% A$ l5 Y6 t* ?% ^. k, o" W
- ?. b0 `8 G! W/ g8 M+ r/* override diags mask for selected modules */
5 N2 K6 u! C% b& Zxdc.useModule('xdc.runtime.Main');+ o* t* I3 R7 F$ i# C
Diags.setMaskMeta(/ B8 g6 c# \0 k! c
    "xdc.runtime.Main",0 @5 Y7 {1 L( Z. w3 J( a% F  @
    Diags.ENTRY | Diags.EXIT | Diags.INFO,
0 q# v& {8 w, O  h& I( p6 r# r4 f    Diags.RUNTIME_ON2 A1 z( ?+ ?8 u/ F- f( }2 X9 K8 N
);
1 G& t4 }$ w! |5 b" u) M
9 F2 j  [' c( U( O5 yvar Registry = xdc.useModule('xdc.runtime.Registry');0 I7 o8 ^' J) X$ ]5 ^5 D2 g
Registry.common$.diags_ENTRY = Diags.RUNTIME_OFF;% K. a# I6 k! I; \
Registry.common$.diags_EXIT  = Diags.RUNTIME_OFF;
( ?, w8 r0 R& e% M- DRegistry.common$.diags_INFO  = Diags.RUNTIME_OFF;! _( k, B/ V2 K5 d6 I8 G7 t
Registry.common$.diags_USER1 = Diags.RUNTIME_OFF;: S5 `* m0 K9 f' r( R
0 m) O; S, h3 [; p
/* create a logger instance */
) N3 Q) P: `. y& H5 T$ uvar LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');9 c% E3 ]; y: B1 K0 G
var loggerBufP = new LoggerBuf.Params();$ ]5 O7 _2 e$ p, t( c5 g6 J7 u
loggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */! ~: u6 ]( O, ]- a6 I, J' _  C
loggerBufP.bufType = LoggerBuf.BufType_FIXED;3 K' N% E& j  V& F
6 \. ~. x) Y% O3 a
var appLogger = LoggerBuf.create(loggerBufP);4 }! \6 d5 \' t2 n/ G9 l8 j) L  v
appLogger.instance.name = "AppLog_Core1";
% U8 t- B9 ^- w+ D" j3 [+ rDefaults.common$.logger = appLogger;. ^/ x! q! }2 ]; N
Memory.defaultHeapSize = 0x8192;   
% G# x* P$ F+ X/ Y8 \( xIdle.idleFxns[0] = "&LEDStatus";' J) z& h; Z* C
Cache.initSize.l2Size = Cache.L2Size_32K;% H' O6 |2 j4 Z$ H. W

8 A% w5 w2 l5 r. O5 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 */' ^+ }7 c' y3 l' a- o9 a! @3 w
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
+ \* c  p  K) E( H. Ivar heapMemParams = new HeapMem.Params();
, _% Q) L: W. H: fheapMemParams.size = 0x4000;
( {- _% P  ~0 ^2 ?  j, C3 x+ @+ h$ H* Z* h* O; H- M
var Memory = xdc.useModule('xdc.runtime.Memory');* t6 T) k0 o" G: P7 U4 n
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);
0 n2 X& A5 E/ B# k
* k' Q/ ~( P1 D+ U2 Y! M我大约calloc  每次共计大小为5K*16bits,
8 M9 |: l& I0 T+ R& X而默认配置才0x4000、需要改大。
* M0 r$ Q* ^& B5 ~1 t8 B% F# v  L. ^* E0 R! k$ [
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
5#
 楼主| 发表于 2015-10-28 16:14:47 | 只看该作者
/* no rts heap */
7 L& Z+ b9 c4 b  Y7 e& q2 }0 XProgram.heap = 0;6 F& l& ?8 M. q+ U$ w/ _& L& M
Program.argSize = 100;  /* minimum size */5 s0 h! H9 V8 ^# E9 G
Program.stack = 0xF000;                   //我改到F000  也不行
回复 支持 反对

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

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

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2026-3-21 11:15 , Processed in 0.043421 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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