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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2015-9-4 08:33:31 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
创龙工程师你好,我在OMAPL138单独调试DSP程序(使用SYSBIOS)时,在任务中使用calloc函数动态申请内存,用完后free,类似如下结构
+ Z$ V2 J# T" \! X
# Y. W+ C, i, L: _: ~    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //256
( J* n! n; M: ^5 C6 m  r
, |% _0 S. [/ W" c9 m; t4 P其他程序段。。。。。
# \2 H& a. I# V9 `* }* \ ! O$ ^5 O6 ]# h" X
   free(x_d);
. b; q9 N( s" u( k& t' W( _: d+ w6 j" M% I% c: T) b# @$ e  q7 C' U' Q( `
使用DSP侧单独调试功能,验证动态申请没有问题,
$ m! `2 [* _' r  `2 l) t2 ~  ]# @. i6 F  W4 {. `3 Z! C
但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。* i/ h" U& j( z$ e+ S0 E" n3 u, U
( }- [2 f" r4 y5 J+ N! W0 `

( R, n3 {5 _& T+ I) M8 t8 q/ ~9 p1 t" P. H9 [7 Q# x/ ?8 [/ J3 S
7 I7 m5 i; R4 }8 J6 P/ w

* _; ?0 C- e9 O: ?; o. Y
( u; S  O2 R& p: Q% ?! z& I6 E3 F  a, _- C. k- q' L" P5 E  {
4 q0 `4 n* t( {- ^0 E# Z9 C

  Q" I. G7 a" d1 l
" Q! j0 V6 i# @! s' Y
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2015-9-4 10:29:21 | 只看该作者
补充说明
. S5 L5 U) j0 L/ T2 a) w我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下
- C6 l$ @& t! ~(不过疑惑的是,为何单独DSP仿真就没有问题呢?)
% S; D. G, ~6 C' K( Q9 k5 ?

2 w! y, N% a0 {是不是需要在DSP.CFG中进行配置
# G( B0 t/ c- }" M$ ?我现在的配置为, N$ q( Z9 C& q
. C4 n! i. s6 t* d  v2 G3 Y
/*. m" e/ _1 v- k
*  ======== Operating System Configuration ========8 X5 ?9 w( d2 L
*/
! u5 X8 J: K/ y( t9 A8 x
( R, F+ f1 A; `* n7 |4 p( P& `# |/* no rts heap */4 w9 q) ?9 W/ b$ k( D
Program.heap = 0;5 k$ l2 P  k' ]( I* H
Program.argSize = 100;  /* minimum size */
3 {: C/ S# g% E8 ~* iProgram.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大' \$ L" L# `7 n
; o3 j7 R  T1 Q" R
/* create a default heap */
8 r. j* V) t* V  }) `var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
; H' X  F# i! A3 W, a$ {+ l4 Bvar heapMemParams = new HeapMem.Params();  X' x" n4 a3 D8 m# Y7 y/ X
heapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大
6 i8 C& e/ _8 N8 y0 t6 c3 _" T
$ q% j1 x7 i+ P) `) O6 Y$ t
var Memory = xdc.useModule('xdc.runtime.Memory');8 j" p, w: R; A% \' {7 ^+ {, z9 J4 x
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);
; _" ]: E% z* z4 q- k
  U0 S1 R% X0 Z" H# m& L- z/* configure System module */4 v3 f3 b; \- u5 ?
var SysMin = xdc.useModule('xdc.runtime.SysMin');
# P" v0 O2 |7 RSysMin.bufSize = 0x1000;* |" B+ J8 m5 {4 |& D1 e( Z
SysMin.flushAtExit = false;
, P' _( E* e5 w- P( _) k1 ?. X% b/ A( s$ A7 a
var System = xdc.useModule('xdc.runtime.System');: }! R4 G& l/ D! P4 g5 p
System.SupportProxy = SysMin;9 r( M  S. ^. s" N0 d* n
2 Y. Y; W' Z& P- W
/* configure SysBios to use the lower half of Timer 1 */
1 m, f- ]$ N! e7 ^. l2 B5 Ivar Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');+ t7 C, q( G3 F4 q/ P, w
var Clock = xdc.useModule('ti.sysbios.knl.Clock');  w# ]1 Z2 h7 H( j
Timer.timerSettings[1].master = true;9 `4 l' H) E+ k" i& C1 C
Timer.defaultHalf = Timer.Half_LOWER;
1 i, @* M% h; y* _. G: RClock.timerId = 1;
% W( s6 U& ?) G, i3 w1 [  O8 [6 J* g9 w; o" L( w+ t  N: ~( J
) J  X. D( \8 E% n" s5 d% d' F
/*: z+ U' r1 c9 J8 f0 D. X# o% U& X
*  ======== Miscellaneous Configuration ========
8 y" V4 y. s) N* `# E */3 r/ H% _/ @+ ?6 U

" X: r9 C( O- K/* set default diags mask */
. y! o! n- E' {) L: [5 ]- B/ U! ?var Diags = xdc.useModule('xdc.runtime.Diags');( U/ L% q; d: T, P
var Defaults = xdc.useModule('xdc.runtime.Defaults');% W, v& k  v- v9 ^' Z0 f
4 w) m2 z+ z3 Z; r# P
Defaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;9 r, M  M2 u( e1 j; M
Defaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;) x) P7 B/ N! C5 n
Defaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;( P8 x/ v5 G6 j
Defaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */
; Z) b* x0 o: F3 \, o! aDefaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */
- U+ x( J" ~! r" h- IDefaults.common$.diags_STATUS    = Diags.RUNTIME_ON;! K7 t# ^" L8 Z8 V
Defaults.common$.diags_USER1     = Diags.ALWAYS_OFF;. h7 y  o5 ?4 U1 g/ M
Defaults.common$.diags_USER2     = Diags.ALWAYS_OFF;
+ V2 d  v0 g9 _' h& \Defaults.common$.diags_USER3     = Diags.ALWAYS_OFF;
1 D8 k. h# t8 D( |4 ]Defaults.common$.diags_USER4     = Diags.ALWAYS_OFF;# `, S2 }8 g) \3 R9 t) Q1 G
Defaults.common$.diags_USER5     = Diags.ALWAYS_OFF;. ~% i/ y4 l3 \( A) j
Defaults.common$.diags_USER6     = Diags.ALWAYS_OFF;* ~* k, O- w$ l9 f5 Y
Defaults.common$.diags_INFO      = Diags.ALWAYS_OFF;$ F" X& `- B  [& {; H! H2 R
Defaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;! B7 Q9 r1 y4 K; A! E2 W% K% D
, P" A2 P! B9 `2 m# r- F
/* override diags mask for selected modules *// a, V; f+ p' }) A
xdc.useModule('xdc.runtime.Main');) J- @% x0 i7 d
Diags.setMaskMeta(
8 d( V- h  C8 ?0 X( R- X    "xdc.runtime.Main",
1 }6 p$ q9 M, `# w9 M    Diags.ENTRY | Diags.EXIT | Diags.INFO,
% z* A& \' e9 M! Y: |0 T7 f& k    Diags.RUNTIME_ON
' f# E" p& k: \8 \);6 `9 ]( n! V" U+ F
6 i# t8 H! B# |" s5 b. f
var Registry = xdc.useModule('xdc.runtime.Registry');
4 i! {' W6 {  O2 _Registry.common$.diags_ENTRY = Diags.RUNTIME_OFF;5 M$ @8 @/ U, W+ A
Registry.common$.diags_EXIT  = Diags.RUNTIME_OFF;9 z' z2 y: H& ~& R
Registry.common$.diags_INFO  = Diags.RUNTIME_OFF;
/ F7 ~+ A! p' [3 `Registry.common$.diags_USER1 = Diags.RUNTIME_OFF;* d: o( O( o6 j/ i9 l' F

4 k+ A  f2 |5 s) l/* create a logger instance */
/ C1 k. q3 a1 \) p% b3 Kvar LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');( _: b$ y0 G% C; F; U
var loggerBufP = new LoggerBuf.Params();+ Y) A: [, v: q$ E6 G# U" ^
loggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory *// E0 z( L5 s, Z! D) v0 D
loggerBufP.bufType = LoggerBuf.BufType_FIXED;- {8 p) ^" U: W3 |3 k2 ~
8 F; T: q  F7 K8 I. X+ V/ I1 h( n
var appLogger = LoggerBuf.create(loggerBufP);
, B, v; Z1 x4 IappLogger.instance.name = "AppLog_Core1";/ A" x! l- K! k9 ]4 W
Defaults.common$.logger = appLogger;% z$ E6 v& J/ w6 m
Memory.defaultHeapSize = 0x8192;    9 f" C7 P0 `% ?& d+ `1 h2 I% E" }
Idle.idleFxns[0] = "&LEDStatus";0 E$ d. |" M: I1 V. C* H
Cache.initSize.l2Size = Cache.L2Size_32K;
1 q/ w: t! D5 V6 m. D0 ^( G; b$ n, x9 S
回复 支持 反对

使用道具 举报

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 */$ |- w- _% X. y1 m# _1 o" ^
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
7 [2 ?: |; {: x  b" o% Fvar heapMemParams = new HeapMem.Params();
; R6 I; Q5 u0 X" M# KheapMemParams.size = 0x4000;. \- p( A& T/ x- V' ~

8 Z7 s" X1 U4 f: A1 s! h* Z( N( Mvar Memory = xdc.useModule('xdc.runtime.Memory');
( v6 ~5 F  D/ N2 f# f# j. T: BMemory.defaultHeapInstance = HeapMem.create(heapMemParams);/ U1 f  @6 X; ?
' s- x$ V3 X6 M' I
我大约calloc  每次共计大小为5K*16bits,1 U1 \5 E3 a: u: J1 U( E/ {: @
而默认配置才0x4000、需要改大。" }" Q3 j4 N: |5 _% Q: l4 P* W+ i

2 ^+ i* q; o2 R/ v# g8 _1 |& D- n
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
5#
 楼主| 发表于 2015-10-28 16:14:47 | 只看该作者
/* no rts heap */* c8 U$ x2 `7 C' ^
Program.heap = 0;/ r) n& d: B: H% v* _
Program.argSize = 100;  /* minimum size */
: |  {& s) D8 p9 P8 UProgram.stack = 0xF000;                   //我改到F000  也不行
回复 支持 反对

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-12-22 07:16 , Processed in 0.040132 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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