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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2015-9-4 08:33:31 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
创龙工程师你好,我在OMAPL138单独调试DSP程序(使用SYSBIOS)时,在任务中使用calloc函数动态申请内存,用完后free,类似如下结构  k& P# V' q' g2 e
0 `$ `6 V7 s  N! S+ {! d9 O
    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //256
) W% Z3 ^2 g5 m3 h3 I! ?( ~$ y
其他程序段。。。。。
6 D: ^7 X* R( W  C1 a ! M. \& F5 F: i3 f, a
   free(x_d);, J$ V; y+ {, u2 @, s; H5 |8 A; m
- j  v( p; _( t6 Q9 d7 }) o4 a
使用DSP侧单独调试功能,验证动态申请没有问题,
) p4 S0 ?4 b' P. Q$ X3 j7 s  E  l3 [) g
但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。) o  v( ?  G" F* e
& ^5 w2 L4 `6 u! J5 E  M# k$ w
* o# I9 B5 ^$ [$ ~7 j
' x! s3 h3 l1 Q+ H8 r7 s

+ I3 y0 O6 A  _/ M1 u* `: \; q. i+ V: B) `/ k0 _

, A- m- }$ ]7 c* v0 I4 v# m; C
4 e, p2 K7 Q( r! q& u4 J, H8 g9 k. e% V  Z
% V) E7 c1 d8 s/ F
2 i. e! s! K' X$ ~/ b" t! X
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2015-9-4 10:29:21 | 只看该作者
补充说明9 t# m, l# S. c  _9 Y
我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下! M/ {$ m- n. I! v) w; ?* C* z, j
(不过疑惑的是,为何单独DSP仿真就没有问题呢?)
4 X3 m% Z# Z: n: Q. a: m! A3 q! ^

3 e3 j6 {, @; }是不是需要在DSP.CFG中进行配置
' {9 D: E" ^0 t/ l5 q) {我现在的配置为
0 r1 m* e1 J+ K/ N- q3 A* ?. P  d) I* d5 ~8 P8 p! s* J7 A' N" h: t
/*
: v' C6 y) W( J0 U7 Y *  ======== Operating System Configuration ========
, V, @7 H- Q0 P7 I' w! {8 [ */( S" K( d/ D% R1 E! {. E) T

7 s% d' b0 Z# x5 f/* no rts heap */8 I- k1 y- T# w  D: ~& g! x; b, N
Program.heap = 0;3 Z* {9 a+ D7 J4 G  J, ]6 {
Program.argSize = 100;  /* minimum size */
4 @& H, z! d5 ?- b+ a/ lProgram.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大
0 F# y3 P) V) H$ ?4 W" U1 L) U. G' z! n2 n0 A
/* create a default heap */
# R3 J2 L" ^, o" mvar HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');* u* r' o8 H/ n+ A' n  @! \; [
var heapMemParams = new HeapMem.Params();
+ K) m% ?; Q+ _* t1 eheapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大( x0 M- j' T  z5 R* O1 G; i

7 s) a- U& k2 v/ y6 s
var Memory = xdc.useModule('xdc.runtime.Memory');
3 \- Y2 k8 s0 o* _& d8 {Memory.defaultHeapInstance = HeapMem.create(heapMemParams);
6 `$ ~  h1 ]( L! `0 z" o6 H3 ]: v! r3 s5 f/ T' {5 l  k  x* e- n
/* configure System module */
3 h9 O# V, [+ e! r* Bvar SysMin = xdc.useModule('xdc.runtime.SysMin');
1 I* F' n9 @. {' \/ SSysMin.bufSize = 0x1000;
, ]; I3 v4 d0 e6 eSysMin.flushAtExit = false;# Y/ ]+ v( i% n3 ^& {

3 ~6 \* G6 D; V+ zvar System = xdc.useModule('xdc.runtime.System');
" O% v- @7 X' n9 \* `2 Y1 jSystem.SupportProxy = SysMin;
9 x) g" e& O' z9 x0 ]5 y) T0 K- Z% z( x
/* configure SysBios to use the lower half of Timer 1 */
  O& E" P8 G% z, r( bvar Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');
, m$ l/ @: x0 j% I  M# M5 {) Uvar Clock = xdc.useModule('ti.sysbios.knl.Clock');* l! D* X- h4 p! @  G: n
Timer.timerSettings[1].master = true;5 f4 h$ g& S3 a8 ?0 f' B% T- ^- C
Timer.defaultHalf = Timer.Half_LOWER;+ f1 C' ~- i1 k; Y
Clock.timerId = 1;1 t1 k8 |/ @2 ]- [! O( h

% Z7 L  C; P- G6 x* L9 ^5 C" ?9 ?/ c1 H: l+ a: P  W
/*! ?* ~; b9 F$ ^# b$ F- C8 [
*  ======== Miscellaneous Configuration ========1 {! K4 a6 x. |7 i
*/; e* a0 W. J+ }3 g8 M6 o; q  p

8 j6 S4 r% S; r) u( ^/* set default diags mask */
2 G$ t$ `3 P1 ~3 Nvar Diags = xdc.useModule('xdc.runtime.Diags');
: Z! o. C3 ~, R: z  {5 C; d5 Gvar Defaults = xdc.useModule('xdc.runtime.Defaults');3 A/ d7 h" ^! |) i2 x+ W! W
) f) t9 W5 E# }% b0 G8 w, Y
Defaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;: f$ ?- M  i$ ], a$ H, @; m- P
Defaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;% \  y- C7 `0 r
Defaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;
: P6 Q$ P  }) j' s& bDefaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */- d& y8 `# Z* [  J" F) O3 x
Defaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */
7 Z+ S- Z7 ]6 t* Q, u& N; vDefaults.common$.diags_STATUS    = Diags.RUNTIME_ON;
/ _! E. ^# F8 u- lDefaults.common$.diags_USER1     = Diags.ALWAYS_OFF;7 Z+ ~. f2 n& A0 k6 w1 r2 c  x: \9 v- p
Defaults.common$.diags_USER2     = Diags.ALWAYS_OFF;
+ m3 i% S! E; Y3 k8 n" d5 k1 u9 MDefaults.common$.diags_USER3     = Diags.ALWAYS_OFF;: m' ]% v. R% c1 _( V  K% n' j% j
Defaults.common$.diags_USER4     = Diags.ALWAYS_OFF;
! V2 P, g0 K# ~9 l# rDefaults.common$.diags_USER5     = Diags.ALWAYS_OFF;; f! i/ v2 M% }& U6 K
Defaults.common$.diags_USER6     = Diags.ALWAYS_OFF;) v) `6 x, M, S( O6 c  f
Defaults.common$.diags_INFO      = Diags.ALWAYS_OFF;/ h+ j% b) n+ \. h; x# F6 l
Defaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;0 T  W# T. m+ s# p( s

3 o6 n2 ]" T% v4 I4 K- C/* override diags mask for selected modules */& i9 i: V  c' l# F# Y( x& e' [
xdc.useModule('xdc.runtime.Main');
( ?7 u) y. Q, WDiags.setMaskMeta(
/ H2 T! E1 i' y2 w  {: |    "xdc.runtime.Main",
. x; W& k% f# n' R, J    Diags.ENTRY | Diags.EXIT | Diags.INFO,3 [# H9 t! [* b; A! v
    Diags.RUNTIME_ON6 B. m% |: [, V: ]7 h9 c
);
. n( ~. Z3 y- u8 B- {! y: `, r  u' _& `& s
var Registry = xdc.useModule('xdc.runtime.Registry');# K5 u1 \5 a7 Y: q
Registry.common$.diags_ENTRY = Diags.RUNTIME_OFF;
2 {& H: {! o/ @# w/ m! zRegistry.common$.diags_EXIT  = Diags.RUNTIME_OFF;) {+ f( s( h. C/ r, n5 w
Registry.common$.diags_INFO  = Diags.RUNTIME_OFF;8 c2 T. P/ b( m5 x0 R
Registry.common$.diags_USER1 = Diags.RUNTIME_OFF;
3 Q+ z3 {0 }: a* N
: k- n- b4 G1 [/* create a logger instance */& j7 F; e- @+ k1 L2 c
var LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');
' y: {' Z7 i! K7 I+ F" Z+ r: d$ svar loggerBufP = new LoggerBuf.Params();, D" y9 L2 j; |! ?, P
loggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */
5 c3 Z5 e  p% r5 U# T3 a" o  s$ m2 XloggerBufP.bufType = LoggerBuf.BufType_FIXED;
: \# {+ v7 N2 G+ v/ u: j+ g# Q: t7 [4 ?- W  ]4 v% R
var appLogger = LoggerBuf.create(loggerBufP);* w2 z6 F3 [9 Y4 h' q
appLogger.instance.name = "AppLog_Core1";
9 k* [8 R( K% K' r6 F/ f9 D: s5 h' qDefaults.common$.logger = appLogger;
- `7 j0 x/ {4 IMemory.defaultHeapSize = 0x8192;   
7 I3 @7 E0 i+ RIdle.idleFxns[0] = "&LEDStatus";( ?- f5 s( V; r* _! N! f
Cache.initSize.l2Size = Cache.L2Size_32K;
$ g) p0 |9 Y" T% k/ @8 w1 Y2 h7 D% T- l+ 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 */! |/ K. U0 o: k+ m
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
% T: F! F! N- n* Wvar heapMemParams = new HeapMem.Params();) ?6 ?( ^0 R6 n
heapMemParams.size = 0x4000;
$ G1 Q, F* {/ N& ~
" n" Z. O# {; w, R' Jvar Memory = xdc.useModule('xdc.runtime.Memory');
& Y1 Q/ R/ L: v4 S* }Memory.defaultHeapInstance = HeapMem.create(heapMemParams);# r% H, a+ i3 R3 ]/ D. O6 h! v% p
  ~1 _; j- h$ j! c, [
我大约calloc  每次共计大小为5K*16bits,
7 ?5 h: `- r4 ?* U/ h. g而默认配置才0x4000、需要改大。
$ e: ~, [/ ?; \' }5 C# V. d$ D8 ~
! C" _; X  \+ e, F
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
5#
 楼主| 发表于 2015-10-28 16:14:47 | 只看该作者
/* no rts heap */' Z5 D2 X; C. ]# c' P$ ]% e
Program.heap = 0;
$ g7 E& j. c! U. k# J( BProgram.argSize = 100;  /* minimum size */1 `; p4 U( H6 m. [; g& H) q/ D2 x
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-24 05:42 , Processed in 0.043419 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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