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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2015-9-4 08:33:31 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
创龙工程师你好,我在OMAPL138单独调试DSP程序(使用SYSBIOS)时,在任务中使用calloc函数动态申请内存,用完后free,类似如下结构; R! r$ Y4 C1 `" h+ H7 K
0 h; B+ V' g2 A8 Z! H
    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //2564 Z, w% ?8 g7 x

7 b' p, D* Q0 \( J5 ?" m8 _' B其他程序段。。。。。
. Y. Z6 z, b( q: m, | * y: t; F  R# ]( w& X* M
   free(x_d);) c0 V: @+ h+ _$ k
3 B) X" [1 w( ?" n: m0 s" k. g
使用DSP侧单独调试功能,验证动态申请没有问题,
3 q8 _1 [& b( N9 i* O0 o* v) i" y# j+ A+ A* B6 W" J6 {) k
但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。
' L% R% o$ A. G2 [- j4 Z/ l1 z
$ a2 K) n0 o" Z7 j' J" h
- T. R; h: p9 q& z

, e. F" o6 F' `( z5 Z) d, i5 c5 _0 J( `

) o# [  c% d7 ?( H- n1 k0 S: E
& m& G) S: S9 v: [' N5 w: H' R( v% l9 G& g. t* i
1 _6 D) T  v0 d

3 B& v! S: b# j6 Q8 O5 Z3 W9 ]" g% O( R0 @( H" y7 f& Y
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2015-9-4 10:29:21 | 只看该作者
补充说明
  N" i+ \$ ~. p7 U- G+ m$ W我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下
1 l  {- E  ]2 |0 ]7 I8 A$ c5 U(不过疑惑的是,为何单独DSP仿真就没有问题呢?)6 T% P% v4 c6 m6 d) l5 o/ o! s- q& B7 r
& ]" K" ?" y6 N% |
是不是需要在DSP.CFG中进行配置1 y0 x+ g! I. G0 D* \, v
我现在的配置为3 @4 g# B' [' @
. S* U$ s, I2 q8 Q4 m9 Y$ Y' F4 B5 Y
/*) ^% b3 B; z8 D) |
*  ======== Operating System Configuration ========& ?# b3 N! i+ W% o- O. p
*/
) e  p! d" b$ K0 f) @
3 j; E" p) B! P( }8 F2 [8 X/ p/* no rts heap */
% D0 y4 O5 w0 K2 X. S. @& XProgram.heap = 0;, |& v" J+ J4 o1 M- M
Program.argSize = 100;  /* minimum size */
" [0 F( M# q3 b0 b* A- ?  }Program.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大5 C% Q2 K3 l" @9 O8 T' `( f5 U. S
( K6 T: q2 x  S
/* create a default heap */
* k- ?3 y# U" t, M8 Jvar HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');6 \  r( Z; D+ S% w  e" \
var heapMemParams = new HeapMem.Params();
5 j8 \1 c; {& G1 _' DheapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大
6 L1 s: {" ?: G+ B) ?+ w( L% I$ }
$ D0 |0 n( K: h5 x' R" k9 t; S
var Memory = xdc.useModule('xdc.runtime.Memory');
6 k7 |( Q# }' U' x$ ZMemory.defaultHeapInstance = HeapMem.create(heapMemParams);
2 X9 h' R4 N' ^; {% R" ?4 X8 C0 M, J- X
/* configure System module */$ h; `1 U: K$ `# k$ s9 ?: \& X
var SysMin = xdc.useModule('xdc.runtime.SysMin');
, K! e' ~: p: n% ~8 H" |SysMin.bufSize = 0x1000;' X9 i5 f4 r  E+ }0 h
SysMin.flushAtExit = false;
* a& S. Z4 a5 F4 f1 G& Y5 Z5 y) K% v% u8 U
var System = xdc.useModule('xdc.runtime.System');" U  ]6 a" R/ @% v& H: z( j; H
System.SupportProxy = SysMin;+ B# `& F$ r. d* J) z& l
( |% a8 G/ e1 ^4 s* G" O
/* configure SysBios to use the lower half of Timer 1 */
* v5 N9 O8 ^. s& d7 R8 avar Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');9 b* [/ N* Y  A% o9 e
var Clock = xdc.useModule('ti.sysbios.knl.Clock');
% u4 H8 ~$ Y  x% qTimer.timerSettings[1].master = true;
( N% G0 E6 K- B; w/ n8 Z- B4 J* XTimer.defaultHalf = Timer.Half_LOWER;
- @: e) }- C! A( u! _9 p# S* |Clock.timerId = 1;
7 f) T- i: ^3 h& Q2 ~1 P+ n+ ^- s5 h
3 c: ^1 |  [! F! Q
/*) j1 q. w3 y6 p* m2 b
*  ======== Miscellaneous Configuration ========
6 ], x2 h; J* {% y* ^ */8 P& M; Q3 \+ T, \

# h8 y  s5 S& Y9 u- @( Y5 I/* set default diags mask */9 T$ _1 T" C  G& o) v9 u
var Diags = xdc.useModule('xdc.runtime.Diags');0 o9 r1 s: ]; ~+ E/ }
var Defaults = xdc.useModule('xdc.runtime.Defaults');1 r" e1 [% A+ K; S

* @" E9 J/ {" S9 f3 wDefaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;
% i9 J# F- i  Q! }4 H! J7 ZDefaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;
4 K# k. I2 U% a. b  cDefaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;
" p7 f8 b  x( C" o" z5 m# B$ y* h0 iDefaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */3 w1 N2 m0 P- m# F" _% t
Defaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */& ^- b4 Z+ g/ W' _1 ?
Defaults.common$.diags_STATUS    = Diags.RUNTIME_ON;9 O: o4 o# Q" R8 l+ I
Defaults.common$.diags_USER1     = Diags.ALWAYS_OFF;
* I+ k0 r6 j% n- A' pDefaults.common$.diags_USER2     = Diags.ALWAYS_OFF;& {' G. p! q# r& ?& u
Defaults.common$.diags_USER3     = Diags.ALWAYS_OFF;0 G, F5 t, x) ?* Y' D
Defaults.common$.diags_USER4     = Diags.ALWAYS_OFF;6 F& J- }' S- P
Defaults.common$.diags_USER5     = Diags.ALWAYS_OFF;
5 ^2 o! U) w4 D" p' Z# U% V8 qDefaults.common$.diags_USER6     = Diags.ALWAYS_OFF;
( u! Q, V* p6 Z1 eDefaults.common$.diags_INFO      = Diags.ALWAYS_OFF;
9 L+ U6 Q% I5 Q0 ~Defaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;+ I; a! M% N; _: P) W7 D* w8 U
, q7 N0 P# B5 d" [/ f& ~
/* override diags mask for selected modules */9 u/ n6 P) d1 v& S, _7 B
xdc.useModule('xdc.runtime.Main');' M, _- k" i8 C) S' k+ I
Diags.setMaskMeta(6 S8 W) E& l: F2 U
    "xdc.runtime.Main",! Q; i4 M. m8 u3 y6 A
    Diags.ENTRY | Diags.EXIT | Diags.INFO,
0 C1 j9 i. O: X- O% k( `    Diags.RUNTIME_ON* a1 t/ _0 |$ ^( a8 s* x; @
);) X" Y+ s6 U) C
, }' J! n" g+ @
var Registry = xdc.useModule('xdc.runtime.Registry');% u4 x$ G% |; I) k! i: ^
Registry.common$.diags_ENTRY = Diags.RUNTIME_OFF;
! b5 v+ ^3 w( R; K# cRegistry.common$.diags_EXIT  = Diags.RUNTIME_OFF;4 v& @2 _: v. R) |
Registry.common$.diags_INFO  = Diags.RUNTIME_OFF;) Q0 E: ~4 I  H, T
Registry.common$.diags_USER1 = Diags.RUNTIME_OFF;3 [0 e: B/ F4 U9 m" G2 x
) I+ {8 r; J4 M* L
/* create a logger instance */. g3 x0 Z0 D+ g0 {
var LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');
1 ]3 R, k; [  P- ?var loggerBufP = new LoggerBuf.Params();5 H* k, |: J0 J. F" T' d. n
loggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */
  [! J5 i# X- r) j4 yloggerBufP.bufType = LoggerBuf.BufType_FIXED;! M$ P& A% K- S. \3 g
  ^5 o* X! C2 O/ I% G7 g9 E5 r
var appLogger = LoggerBuf.create(loggerBufP);
5 z" J0 f& u6 N1 K* ^0 |4 EappLogger.instance.name = "AppLog_Core1";
, G; V$ S( q  x7 {2 \1 D0 v  }6 @Defaults.common$.logger = appLogger;  ]6 M- ~7 @9 x8 H( ?
Memory.defaultHeapSize = 0x8192;   
6 @5 W9 s% e- z1 d: z& vIdle.idleFxns[0] = "&LEDStatus";/ A; u) [5 n& X: K, s
Cache.initSize.l2Size = Cache.L2Size_32K;, p+ ]0 h% m7 N  D. N' Q0 p
0 m+ i- ?" E- Q0 Q
回复 支持 反对

使用道具 举报

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 */$ O+ g$ B# N2 _
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');1 a" k$ p- Q  `+ r; B: \1 {: p
var heapMemParams = new HeapMem.Params();3 z$ {4 C& O3 e4 y$ O9 @
heapMemParams.size = 0x4000;
: f; s9 F5 g7 g. U, h% M7 F2 [
var Memory = xdc.useModule('xdc.runtime.Memory');: n; H8 o" p, F5 A/ d
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);& V9 b$ @) H/ ]- W$ z# [% \1 ^0 K
: a, p$ L1 x/ Z  o# E% L& n) Z
我大约calloc  每次共计大小为5K*16bits,
3 D) ?3 e- x  |2 f而默认配置才0x4000、需要改大。; d; _6 q% [2 G% ]; p6 \0 O
3 G* |# G( l% O) i( u6 L8 x% O3 W
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
5#
 楼主| 发表于 2015-10-28 16:14:47 | 只看该作者
/* no rts heap */
4 o( C" Q# P4 y+ EProgram.heap = 0;$ W" B( p; l6 G7 Z4 X" Q
Program.argSize = 100;  /* minimum size */: v6 r: C2 f: @
Program.stack = 0xF000;                   //我改到F000  也不行
回复 支持 反对

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

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

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2026-2-23 21:47 , Processed in 0.041666 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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