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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2015-9-4 08:33:31 | 只看该作者 回帖奖励 |正序浏览 |阅读模式
创龙工程师你好,我在OMAPL138单独调试DSP程序(使用SYSBIOS)时,在任务中使用calloc函数动态申请内存,用完后free,类似如下结构6 ^' J6 e' P1 W/ W" C6 b) ?2 |

. S; g: h) v! H) Y" o3 \! `& _4 @    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //256
0 m) w0 e) o: b6 R+ U
6 x$ E- {5 b# S. L2 ?' r其他程序段。。。。。
2 l+ ]/ ]& |$ j9 N7 l( h 0 D3 ?: V/ Z# z1 \8 A
   free(x_d);
, ]( R( i# b. C. X
" D3 Z5 g! v( ?( X  R' Z使用DSP侧单独调试功能,验证动态申请没有问题,, X2 P6 V; p% V" g0 g* N, Q. O2 O& c

/ o$ A( `. s. D4 L  M但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。
9 q6 P  j# o. Z$ }! S& Y

6 v% E2 P4 t; y& {
9 e1 N  m( m3 o, W2 ^/ b6 ^1 e. V. P1 V* s& }+ p& i
  ^) @. Y/ U7 z5 A( ^
* N8 Y, S0 c/ Z5 b: R0 V

" C; x( x5 c" Z) X: P( z+ h2 Y) t: P! ?% j

: T+ r5 A: a  x# K0 D- t3 Z) c0 G! I  V
8 ^; v# k0 T0 b* H! P0 Q4 C
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

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

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
5#
 楼主| 发表于 2015-10-28 16:14:47 | 只看该作者
/* no rts heap */
1 N% F/ K7 l0 o; d1 nProgram.heap = 0;' K, n/ r1 Y! I$ D
Program.argSize = 100;  /* minimum size */
7 M# }. D: {4 E1 _& Y0 X- w9 OProgram.stack = 0xF000;                   //我改到F000  也不行
回复 支持 反对

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

积分
1093
地板
发表于 2015-10-28 09:51:31 | 只看该作者
/* create a default heap */
2 o7 |3 Q; D& s. m3 z. vvar HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
- |! U; j4 `% A: N7 l/ M4 \var heapMemParams = new HeapMem.Params();
7 j( U. t( |3 r+ ?9 s% X: I9 G$ TheapMemParams.size = 0x4000;
  r2 ]$ z. k6 c0 g( q9 O/ K) E9 }7 g8 s) V2 A4 X
var Memory = xdc.useModule('xdc.runtime.Memory');5 V& H- c/ s  E( F0 W2 ?6 |
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);& A0 c: G+ ~  m) k3 W1 r

+ N9 h5 Y  J( X' h7 X8 A我大约calloc  每次共计大小为5K*16bits,
, J  H! E) T4 [4 F7 B而默认配置才0x4000、需要改大。
8 l. y& q1 \" N. `+ D. X0 g: \5 E  |, l" i
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
板凳
 楼主| 发表于 2015-9-7 15:38:00 | 只看该作者
为什么没人回答呢?   大家都不用动态申请内存方式吗?
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2015-9-4 10:29:21 | 只看该作者
补充说明
; A/ Z. G8 v. U+ O8 _) a我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下
4 S) ~6 \0 x4 S; ^(不过疑惑的是,为何单独DSP仿真就没有问题呢?)
6 c# M7 ]* ~9 `/ I: _5 p5 S
* h" N6 W# W8 \, E6 L# A' U' e
是不是需要在DSP.CFG中进行配置2 I- F8 F, e' M5 @0 A8 f/ F  [1 ~
我现在的配置为- U' U9 N) A, K. Z) @' I
  f& x9 c$ E8 ]
/*
$ z- S" _& M% D+ m3 P *  ======== Operating System Configuration ========* y& {! m3 M( c* R' `
*/+ E/ {) e: ?. ?! v
7 u; }; q0 k/ R8 X- n
/* no rts heap */
( F+ k6 T8 ~6 IProgram.heap = 0;, @" Q- E* I7 K( K
Program.argSize = 100;  /* minimum size */7 W0 W( ]1 x& m1 a* g! `
Program.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大: _9 H) ?5 r' ?& W: u) h6 ]
" c, L: Y- @- C; I+ [8 J
/* create a default heap */
( g: P! C3 D4 ^: E& ~( }- y- B0 Ovar HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
7 V! o+ i/ c# B, n; Fvar heapMemParams = new HeapMem.Params();/ q# C' V2 r8 m$ N/ n: [, h% w
heapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大; w+ r* P3 _' a
0 q: _( i. W0 i* p
var Memory = xdc.useModule('xdc.runtime.Memory');: M) w  ?% v) r9 y& E9 t
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);6 A7 B6 `( r+ T" H% p

; H8 v& l. G- A/ k/* configure System module */
7 U7 P) U. Z: Lvar SysMin = xdc.useModule('xdc.runtime.SysMin');
4 ]# N; _5 f( _# e$ G" F' [( CSysMin.bufSize = 0x1000;$ _+ ?* J& G% ]. b# C; T
SysMin.flushAtExit = false;  \7 Z; T4 {3 I0 p& k
+ A5 S8 A' Q3 g( x
var System = xdc.useModule('xdc.runtime.System');, `  H' U' d) t8 q
System.SupportProxy = SysMin;! O- g% }  i$ t! V/ X- B* v

  k0 }: {2 C, Y# ]1 ~; X/* configure SysBios to use the lower half of Timer 1 */9 \: C0 }3 u) f8 N
var Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');% Q0 i9 t* t/ I  U) K. x5 a/ l
var Clock = xdc.useModule('ti.sysbios.knl.Clock');' e! M, p' A& h. f  ~( _1 ?
Timer.timerSettings[1].master = true;7 Z6 `3 s; U$ D/ Q
Timer.defaultHalf = Timer.Half_LOWER;% q2 y$ n0 w) w# n
Clock.timerId = 1;- q, b. Z  a7 X6 l  Q: z1 [: l+ e0 l

- `+ Q5 E3 I. r% _- U2 q
& `2 M' Q# j6 J4 e/*) Y% z% C& e0 K" U
*  ======== Miscellaneous Configuration ========
) o3 c2 g! }) D3 O */
6 ^2 Z5 n1 n" q4 N% a( G( I  Y% h# [: X
/* set default diags mask */5 n% E3 }, q' l) S% B4 R% O, ]; }
var Diags = xdc.useModule('xdc.runtime.Diags');6 e: x- X9 M2 {; x" V& B
var Defaults = xdc.useModule('xdc.runtime.Defaults');
: E- B; F9 W' a5 c  O; B6 F& u2 a) [! T1 K
Defaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;' S; i& H: W/ _! c+ S
Defaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;
& t2 }7 Y5 l7 P; vDefaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;
$ E; u4 N. K" z; ]Defaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */4 s- s0 x. k" E+ ]; n; o# J- j! E
Defaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */
  G! c5 R# V7 V! J- ^/ BDefaults.common$.diags_STATUS    = Diags.RUNTIME_ON;
' C3 c5 J+ x" r9 K* H6 h% _1 m( e# ODefaults.common$.diags_USER1     = Diags.ALWAYS_OFF;
4 a  X# H; {4 U# C' sDefaults.common$.diags_USER2     = Diags.ALWAYS_OFF;
# M; F& J( g0 n$ @- j* _( aDefaults.common$.diags_USER3     = Diags.ALWAYS_OFF;
+ i! k& j3 ]$ y3 ADefaults.common$.diags_USER4     = Diags.ALWAYS_OFF;
  y( l" P. o$ i/ E! c% iDefaults.common$.diags_USER5     = Diags.ALWAYS_OFF;
: s5 j$ B4 d) X; iDefaults.common$.diags_USER6     = Diags.ALWAYS_OFF;# k( C+ u6 \$ e7 Y7 H& t2 G5 Y1 d
Defaults.common$.diags_INFO      = Diags.ALWAYS_OFF;: ~- v. p4 C; }% G5 f
Defaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;
3 A& b8 ?5 F7 q8 C% a) n' r! j" @; ~# _  n$ N9 i$ W. t! G. g6 L
/* override diags mask for selected modules */
% K: n, d. ~* |8 k8 @xdc.useModule('xdc.runtime.Main');
, J, T1 I' ]$ B8 c! Y) q3 @! MDiags.setMaskMeta(3 G' g4 b  `4 X& N+ n
    "xdc.runtime.Main",
2 }7 r$ E( S$ y) V    Diags.ENTRY | Diags.EXIT | Diags.INFO,
( m, i; ^- a6 r8 L4 p" I    Diags.RUNTIME_ON. k" L$ m! b* s# |5 z# ~( B
);2 U5 ?5 G: N! R3 c

$ [( O6 \. ]; P/ Ivar Registry = xdc.useModule('xdc.runtime.Registry');
6 y  o0 w/ c+ w7 D) E& ]Registry.common$.diags_ENTRY = Diags.RUNTIME_OFF;0 @( X2 z0 l  J5 K
Registry.common$.diags_EXIT  = Diags.RUNTIME_OFF;
$ [7 N% @3 ?2 U0 b2 KRegistry.common$.diags_INFO  = Diags.RUNTIME_OFF;/ H6 x) ~4 _% i. ^
Registry.common$.diags_USER1 = Diags.RUNTIME_OFF;- K8 }' X: W# Q  E
6 S& E# U# H* G, a
/* create a logger instance */9 S2 K5 ?8 \0 C( i$ e
var LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');$ P! b8 U7 C2 q' J9 l
var loggerBufP = new LoggerBuf.Params();, K! b0 G+ F! Y. R
loggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */
& d) g$ W5 _: i) [) T: sloggerBufP.bufType = LoggerBuf.BufType_FIXED;
& a) `" Q: c3 o4 O( U% F9 [/ Z& ]% U) u2 x. [! C
var appLogger = LoggerBuf.create(loggerBufP);
8 v+ [% U# n& g/ K" q1 \5 rappLogger.instance.name = "AppLog_Core1";; t" a( Q, ?/ C
Defaults.common$.logger = appLogger;
& I0 y+ R4 N  @4 pMemory.defaultHeapSize = 0x8192;    # Q8 t6 d: r/ }$ S7 e
Idle.idleFxns[0] = "&LEDStatus";
  e& r# A, n7 x& q' W# Y# S/ ^; C, k2 ?Cache.initSize.l2Size = Cache.L2Size_32K;
- }0 c: ^! R( i9 z- |
3 s! R9 g* \! ^. ^3 n  |
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-12-13 00:37 , Processed in 0.050064 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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