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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2015-9-4 08:33:31 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
创龙工程师你好,我在OMAPL138单独调试DSP程序(使用SYSBIOS)时,在任务中使用calloc函数动态申请内存,用完后free,类似如下结构
% c, k4 f. G2 |" M! Y4 U' N7 `: e$ B0 p' W, L$ k& a
    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //256
  H9 G: Q4 u8 e1 r1 l9 ]8 y) L5 A( _
其他程序段。。。。。
+ v9 E/ s  B2 q
" t! \6 f: g7 U- g   free(x_d);
9 H% L6 i" ?  y6 N
; c7 b; m6 T. D- {3 V使用DSP侧单独调试功能,验证动态申请没有问题,: [0 L/ G% q1 h4 g' K

) b0 p' J/ ~! }) _0 }, l) g但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。& O% c3 O5 }* n, L
1 w3 M. c( r1 m2 }! e, q  t6 {; A) d

* L6 Y6 {3 W0 w$ L8 z$ A% t* P# g5 U1 ]3 P% i8 d
1 I6 o! L* p) P9 m

' w9 l% [& m3 q9 Y4 H8 Z. I/ i% R, J, X' O7 a8 S. z
! G  t+ G! G* ^8 b! w0 r
4 Q9 I1 L6 N( U% z, U
* F/ W( Z, m( m! ?5 W  `# }- `( S

% j; i8 _; ^, M+ h
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2015-9-4 10:29:21 | 只看该作者
补充说明
6 w6 s: n3 h2 A1 H  K  L我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下/ ^) }$ Y, M/ A" x
(不过疑惑的是,为何单独DSP仿真就没有问题呢?)* A8 q. ^. e, E
4 O; x+ W: b4 S: e- }: Y6 q/ {
是不是需要在DSP.CFG中进行配置/ ~( m4 J" n5 M, X+ u: v7 _' M+ K
我现在的配置为, q. w+ |7 o$ U3 L

6 B" A! S) B5 C$ b& d/*) {5 K" I, D+ s# f1 G! W& r
*  ======== Operating System Configuration ========
" v; \5 X/ z6 m9 z9 I* I */" |9 r5 r4 j# ~+ C7 p
% M! S. l! ^& u- V
/* no rts heap */
9 j, [) z  D: J" r* RProgram.heap = 0;( ]5 k+ ~, W  F# A+ E8 v- X
Program.argSize = 100;  /* minimum size */5 q7 a0 ~; o2 \' C% y
Program.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大7 x: q+ {. C/ K, p2 _1 T4 f& k- ?
% d4 J! ~$ ~0 ]- `& e- T
/* create a default heap */
3 R8 j: U2 V$ {3 l, L5 b, ^var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');9 @7 K: ~% W: u  I6 e/ {, V' u, s
var heapMemParams = new HeapMem.Params();& ]3 X; n% \7 o
heapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大; C( }9 _( m3 |6 ^0 W+ n
, A* ~: h7 h' y& D+ y$ T8 ~
var Memory = xdc.useModule('xdc.runtime.Memory');" p2 _/ X, S% b6 P( r
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);' C6 V$ }- T! D( s* O9 L

( C- }$ d, R7 @6 `6 P5 v1 G/* configure System module */6 O5 [+ z' o. ~5 P' C
var SysMin = xdc.useModule('xdc.runtime.SysMin');
1 ~6 A, @% C; f, X3 [6 p0 qSysMin.bufSize = 0x1000;
0 P4 s' X0 n3 U6 K  cSysMin.flushAtExit = false;1 e' j" j' e8 w/ |; l8 A$ {3 R' p4 M9 z
: d8 X! L0 X. f
var System = xdc.useModule('xdc.runtime.System');
& {0 `1 ^! G. @9 d. V% VSystem.SupportProxy = SysMin;. {( p: f) @& L) }) B

9 u1 a- o3 o" k" R8 |/* configure SysBios to use the lower half of Timer 1 */2 n5 d# I; q0 m  Q; y) {: x( y4 |
var Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');
9 }& `8 G& P4 W3 Vvar Clock = xdc.useModule('ti.sysbios.knl.Clock');
: p. {) c6 V* ~# e; f4 ?% T) [: M* YTimer.timerSettings[1].master = true;4 }' j) G0 g% v
Timer.defaultHalf = Timer.Half_LOWER;
6 n4 P: V" q+ y' mClock.timerId = 1;
4 M9 T9 ?7 `% Q  U. [' X/ d# r, b# k6 w( A" y( W' C& e3 E
. O9 Z$ N; m/ i  F" E) K# s# X. z4 q
/*" z- l1 F7 q1 b
*  ======== Miscellaneous Configuration ========
2 X) G$ M1 m# o! ] */+ i$ ?' K( D6 `' u& a! @7 V

5 w$ a8 C0 B+ b, u5 `/* set default diags mask */& @2 B+ Z; P& w* c8 @4 _) d8 D' c; F
var Diags = xdc.useModule('xdc.runtime.Diags');
% D8 i9 g, |( E- B- X. k  {6 e- X0 m) \var Defaults = xdc.useModule('xdc.runtime.Defaults');2 w7 a( [. q! \0 z" E( Q

0 d+ j9 z: E- {: w! HDefaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;
/ s& t7 t4 S5 i% R0 H; I! jDefaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;
; F/ y6 I' Y+ `* d9 _Defaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;
9 q3 v7 K9 V, `" P6 J3 oDefaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */* x3 e( w$ t" S4 }( Y
Defaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */" d1 G# D9 }6 p, V& L1 [) B1 ]; n- M
Defaults.common$.diags_STATUS    = Diags.RUNTIME_ON;: Z7 w& y+ S% @* F7 v8 L) D
Defaults.common$.diags_USER1     = Diags.ALWAYS_OFF;$ h9 F( l+ x+ f
Defaults.common$.diags_USER2     = Diags.ALWAYS_OFF;
# p6 r1 \6 S& u' S$ L! K- XDefaults.common$.diags_USER3     = Diags.ALWAYS_OFF;7 i$ R  b1 U$ A
Defaults.common$.diags_USER4     = Diags.ALWAYS_OFF;6 I0 f3 L2 g" l4 S* q
Defaults.common$.diags_USER5     = Diags.ALWAYS_OFF;, Z: Y6 L, ^( o  I
Defaults.common$.diags_USER6     = Diags.ALWAYS_OFF;8 F: \$ Q/ z  T9 U
Defaults.common$.diags_INFO      = Diags.ALWAYS_OFF;
' l# f( D8 b7 Y; X, WDefaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;
5 f4 B& y- s# H) v( \, h* u; g
5 l6 ^% M6 X9 Y6 P% z9 r/* override diags mask for selected modules */" l& r8 W3 E& A& f' c. z- D5 a  C, x
xdc.useModule('xdc.runtime.Main');" f+ \: t6 {0 L5 X$ t9 ~3 [% x
Diags.setMaskMeta(
- B& S* G2 ~' Z( P    "xdc.runtime.Main",
5 e. u1 R. K4 y7 R+ P. x- [3 V    Diags.ENTRY | Diags.EXIT | Diags.INFO,/ H# T2 `) A8 {5 P. B/ Z2 M
    Diags.RUNTIME_ON
, d) k7 ]/ ^: Q; y7 J( s0 `);7 W/ n6 f* u9 g) v

5 J! H8 j0 M# K/ s* fvar Registry = xdc.useModule('xdc.runtime.Registry');
4 `, T" u9 L, v" A. l' k% QRegistry.common$.diags_ENTRY = Diags.RUNTIME_OFF;. r: G: L5 B  r5 W/ W% N# y$ b3 v
Registry.common$.diags_EXIT  = Diags.RUNTIME_OFF;
+ ~9 p4 C# V, \% y- HRegistry.common$.diags_INFO  = Diags.RUNTIME_OFF;
% M. X; j- y8 V+ a1 URegistry.common$.diags_USER1 = Diags.RUNTIME_OFF;3 i/ q6 t  O, s9 b/ u6 r. R
2 P) j# p9 a* C
/* create a logger instance */  v% B% g# Z- O% P$ s1 @
var LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');3 p0 z! C% G5 D, L: S
var loggerBufP = new LoggerBuf.Params();+ y8 E# d+ t2 f% m
loggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */* ^' u0 Y+ ~1 s) _* o2 }$ [: V/ T
loggerBufP.bufType = LoggerBuf.BufType_FIXED;* R& L( u  U5 }7 P, M3 @
& X# P. R% `) Z- }
var appLogger = LoggerBuf.create(loggerBufP);! l2 s# y/ Q& t& Z* G/ |
appLogger.instance.name = "AppLog_Core1";# q+ i1 M2 |2 I* u" Q7 C: J
Defaults.common$.logger = appLogger;
: ~4 Q0 z1 B# J: p: o& NMemory.defaultHeapSize = 0x8192;   
6 G( H9 D- c% k$ ?4 s! g6 mIdle.idleFxns[0] = "&LEDStatus";  z1 S& X7 U- R. L+ |3 T! ]
Cache.initSize.l2Size = Cache.L2Size_32K;
: K, _* ]; O/ W% H8 \# P9 G% J6 j
2 f- b/ z  P, q3 |1 V- K
回复 支持 反对

使用道具 举报

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 */
# K" W- r9 F+ ^var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
3 R! C9 F& a7 }5 D! f: _var heapMemParams = new HeapMem.Params();
- l1 D$ [  a" O; @' [( x# `. \& C# P$ kheapMemParams.size = 0x4000;9 Z" |8 U' E3 x# I

% G: W$ K4 `7 M4 U5 ivar Memory = xdc.useModule('xdc.runtime.Memory');  @/ K' a! m# a, q
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);
- _/ R- V' s: Y" Z- L& p, e% C+ y) J. f( @4 f# n7 l8 W
我大约calloc  每次共计大小为5K*16bits,
  |9 x, X5 P. K: L( I( b! D而默认配置才0x4000、需要改大。* |2 C+ N& D# x% b) l' _/ m

# s$ h) G$ A+ J4 f4 T! G  ?9 J
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
5#
 楼主| 发表于 2015-10-28 16:14:47 | 只看该作者
/* no rts heap */
  t) l" z3 C( Q5 |7 kProgram.heap = 0;8 G2 s+ ?6 W5 A1 h. y% w7 V+ U
Program.argSize = 100;  /* minimum size */
% i* w& q& `& K; cProgram.stack = 0xF000;                   //我改到F000  也不行
回复 支持 反对

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-11-26 11:34 , Processed in 0.056440 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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