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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2015-9-4 08:33:31 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
创龙工程师你好,我在OMAPL138单独调试DSP程序(使用SYSBIOS)时,在任务中使用calloc函数动态申请内存,用完后free,类似如下结构
5 D* o! z  @2 T$ H/ ?: E# T8 Y" f
/ e1 ^7 w2 {$ k2 t    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //256/ ?, G- e" @* X! ~

5 N$ ^0 |* R& L6 M- L7 T  {2 {其他程序段。。。。。) ]$ x# m0 i; c2 y  a. {. p3 j
$ z. y0 T) q# f
   free(x_d);) J5 @$ r3 k7 ~- J" ^" k: K

" o% S. z/ e& ]使用DSP侧单独调试功能,验证动态申请没有问题,- R; \8 G$ ~8 d

, t$ p% }. y% ?. i& K! j$ ]! Z$ n但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。8 X9 x: x& Q9 p" g) ^8 i5 ~* H9 c! _6 t
6 e1 g* s1 _+ y  l" K9 l
+ m) ^6 |3 r' |. ^. ?, L& h; [: J
( c9 F: X/ T# v/ x" [
6 t+ W2 @- @# l3 S

! u  W/ T0 i2 z. O8 f/ n% M
2 ]* f: N; m9 e, C9 n
# m8 S8 W; [2 p' C
2 {3 `1 g4 R' P1 o7 L+ f+ h+ E
  `0 j9 Y. k6 }8 e4 O7 p9 z, \$ m) Z% \" w
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2015-9-4 10:29:21 | 只看该作者
补充说明
3 w, A; U7 V' [我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下& n& o5 w; Z3 ~8 c3 l4 e
(不过疑惑的是,为何单独DSP仿真就没有问题呢?)& Y9 T7 F& c" y9 x

8 C! K  g8 e3 ~$ O是不是需要在DSP.CFG中进行配置
. U9 H1 ^% Q6 h4 ~" q9 @( \- r" {我现在的配置为, ]9 K9 F6 C' V6 w& e, L
* J: V0 |: o1 u4 }7 ]
/*
. x. q1 D7 h4 F *  ======== Operating System Configuration ========
. p9 z, L/ x, l( T" F */4 [/ G% @( ]: x$ b2 y

/ y+ A$ S  U% R4 L% b3 q5 s/* no rts heap */1 \/ Z) d) R8 z5 A# o1 V7 O% g* i
Program.heap = 0;4 C( h. q3 L, o* u! R
Program.argSize = 100;  /* minimum size */
/ H; a: J' O. n( y' gProgram.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大
0 |) g0 |, R( _( V  k  ]$ F$ e) H% I) c" U6 U, E
/* create a default heap */
  A) i1 d% z' ~! _8 ?var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');4 e; w# L: [9 E3 g, y- }1 E
var heapMemParams = new HeapMem.Params();  c+ n% v# X+ S' {, D7 y
heapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大
6 X: C+ V1 ]+ p& C$ w
) o: p9 b+ v  ]5 C1 g& _; V* a
var Memory = xdc.useModule('xdc.runtime.Memory');0 A( O* c. ~, H6 r8 _0 }1 a0 |( X
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);6 I7 d& u% Y8 `* C3 F  h
1 c: Y: e0 N' B1 _6 A
/* configure System module */  ?; ?1 l; r$ ~* G
var SysMin = xdc.useModule('xdc.runtime.SysMin');2 G- o% {4 R- q5 P- B
SysMin.bufSize = 0x1000;
  M" K! p' }* Q8 ^& k3 F& mSysMin.flushAtExit = false;
5 a/ X) e: B0 I6 B) b8 `! Y+ c  ~% _' A4 [$ P/ f* \( O
var System = xdc.useModule('xdc.runtime.System');$ e# b2 B4 _$ b# G' @! h, W- e
System.SupportProxy = SysMin;- W# y: h/ J9 @. N7 }# A0 X% w
1 Y( o8 y' k- @8 g+ N9 f, z* o
/* configure SysBios to use the lower half of Timer 1 */3 N  _" W& o& `0 J2 |
var Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');6 r9 \1 c7 j, e6 M8 m& @% n0 b
var Clock = xdc.useModule('ti.sysbios.knl.Clock');! x( c+ T* z  g4 L2 r" S' x, C& h
Timer.timerSettings[1].master = true;6 D0 n! i. u- ^4 i) j# s' L0 o
Timer.defaultHalf = Timer.Half_LOWER;
* N% ^7 v( M& U4 b/ eClock.timerId = 1;
% {/ o+ D; l' X+ E2 x/ Y8 O% b5 i/ |7 f- z' y8 `

1 E# L7 I3 k' m/ ?" k/*
+ R. [& C* ^1 s. }" O9 O- ^9 Q; t *  ======== Miscellaneous Configuration ========% s  c1 |+ o# Q5 m8 y" R
*/" g7 `( C/ ?. M7 b0 W% M! c( {

9 V/ k% t! d: m* T9 C1 L# ]$ a/* set default diags mask */9 w* A& l5 x, \3 L+ i3 I1 u6 F
var Diags = xdc.useModule('xdc.runtime.Diags');7 F, C3 E6 e, S
var Defaults = xdc.useModule('xdc.runtime.Defaults');% g/ A$ k1 G9 ?

- y1 E0 P8 N7 A& L% q  ]. z; hDefaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;
2 U, s+ I5 o  c, [Defaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;
4 ]1 ~. z8 P2 z: |; g8 EDefaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;9 i( {. ^, h& l& j6 M, K$ |
Defaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */
$ d( j# x, ]. w7 SDefaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */
1 K) y# v  u& \- _8 gDefaults.common$.diags_STATUS    = Diags.RUNTIME_ON;0 Z  I  _5 c2 u4 c! P
Defaults.common$.diags_USER1     = Diags.ALWAYS_OFF;+ ?5 m# B  J7 _+ `
Defaults.common$.diags_USER2     = Diags.ALWAYS_OFF;9 s* _& U" @, i5 A
Defaults.common$.diags_USER3     = Diags.ALWAYS_OFF;
, @2 R3 ^& @) R  nDefaults.common$.diags_USER4     = Diags.ALWAYS_OFF;" X7 B; f1 O( b& V
Defaults.common$.diags_USER5     = Diags.ALWAYS_OFF;" l  Y/ @7 e( R# R
Defaults.common$.diags_USER6     = Diags.ALWAYS_OFF;
4 T3 X9 z* S; [6 ]1 [Defaults.common$.diags_INFO      = Diags.ALWAYS_OFF;
) q$ K# w/ e2 sDefaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;6 U8 z# y+ B7 B3 Z

$ f6 V3 G1 Z; x1 z4 O6 K/* override diags mask for selected modules */
6 H9 o* u' t3 U& b$ M* f% t2 uxdc.useModule('xdc.runtime.Main');
, X8 b! L1 Q, w5 X5 `Diags.setMaskMeta(& Y) u4 u' u5 _6 h  t8 _; l% Y" X
    "xdc.runtime.Main",
( S1 A8 v+ V+ u( V+ h  V) g3 y    Diags.ENTRY | Diags.EXIT | Diags.INFO,
+ O/ s* q- C; n% w! [- n: p    Diags.RUNTIME_ON
8 y* L8 z% U# W* E( v);$ e5 }, }! B- i% V6 D5 v. H0 u

* Q' l5 t0 i1 q1 xvar Registry = xdc.useModule('xdc.runtime.Registry');
' @/ Q3 e& Q8 ?+ k. X/ MRegistry.common$.diags_ENTRY = Diags.RUNTIME_OFF;
" F9 g) Y3 u/ Q* DRegistry.common$.diags_EXIT  = Diags.RUNTIME_OFF;
2 [+ `# H7 q% qRegistry.common$.diags_INFO  = Diags.RUNTIME_OFF;; l( [# ?; V' F( Q" [# y
Registry.common$.diags_USER1 = Diags.RUNTIME_OFF;
+ e+ k  \, I3 \+ }) S) T+ r. M" f1 A& w2 U  {% U. D) F
/* create a logger instance */
+ _) w2 g0 t+ d* avar LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');. \9 o0 p9 Y6 F8 ^
var loggerBufP = new LoggerBuf.Params();
% o9 d7 v' M* sloggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */( N" g5 A6 H# @1 D
loggerBufP.bufType = LoggerBuf.BufType_FIXED;
% E5 v  k) a5 v# }8 D- c* M5 l7 r7 ~6 G
var appLogger = LoggerBuf.create(loggerBufP);
# _% }( h0 |& F) q5 QappLogger.instance.name = "AppLog_Core1";
9 B1 E0 R2 V5 m3 i6 R2 ~Defaults.common$.logger = appLogger;
6 c. i1 Y  a( e9 A/ [Memory.defaultHeapSize = 0x8192;   
3 p0 H" E* T! |Idle.idleFxns[0] = "&LEDStatus";$ L$ |& X6 J6 ^- z: d/ N) E
Cache.initSize.l2Size = Cache.L2Size_32K;$ K6 F( h8 d2 E' H& @/ J2 d6 o* H. `5 j

5 G- h/ K7 z' |1 h
回复 支持 反对

使用道具 举报

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 */; g" R# E7 F5 T; O) S* `
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');/ u6 O" Z: O( I% s
var heapMemParams = new HeapMem.Params();- _' n+ P2 r: Z  o' Y7 F+ s: K
heapMemParams.size = 0x4000;2 f2 N3 m. m! n9 b9 T
* l8 a& Y3 u/ l: }7 V! p
var Memory = xdc.useModule('xdc.runtime.Memory');! @& E$ E1 r" J
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);1 l: [$ X) t  L7 f& T+ R

& y3 I0 o; \7 P$ y4 U: _3 z我大约calloc  每次共计大小为5K*16bits,4 Z2 C6 [/ x" t* `1 i) U! q1 J
而默认配置才0x4000、需要改大。" s( }3 A2 R  ^
! M# u* I9 i+ ^2 [0 A
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
5#
 楼主| 发表于 2015-10-28 16:14:47 | 只看该作者
/* no rts heap */6 n: q+ D( O& O. H, r6 `
Program.heap = 0;
% d1 R! t8 u' g0 c- qProgram.argSize = 100;  /* minimum size */, I& f  M# u! t
Program.stack = 0xF000;                   //我改到F000  也不行
回复 支持 反对

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-12-12 04:37 , Processed in 0.039400 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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