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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2015-9-4 08:33:31 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
创龙工程师你好,我在OMAPL138单独调试DSP程序(使用SYSBIOS)时,在任务中使用calloc函数动态申请内存,用完后free,类似如下结构
0 F; n8 _4 w' s
8 I* h6 x/ W/ ]+ I    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //256
- t+ @1 w5 ~# h0 {* y* f( ?3 [; w; ~8 [- u1 q
其他程序段。。。。。7 p2 H3 p0 x5 g" A) |
8 J" G4 G0 H* I6 o' Y# O9 k
   free(x_d);
8 g6 L, w' m+ U; O/ @! Y9 j. Q6 `6 h& Q# u7 o- A" Z% r. g
使用DSP侧单独调试功能,验证动态申请没有问题,
' X2 P* X% u6 d4 P; `9 V% G$ q. O+ D# U  O% T2 g' P
但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。# R0 }- [4 G, I8 H( S9 k0 m
7 h$ c8 z- K+ U
. V" l! G. x3 C

9 ^- a9 k% ?) V, l. w% K
3 r" N- q. j/ I8 n
3 H; L& w& B3 o5 r' K* \' h. u& w2 s7 p* m) l

& h, K  k" a# g& q7 k( Z7 o
  H* u- t9 w8 L5 Q, p% `& c$ ]* U- R+ e9 @: A. `2 ?9 b) a2 `6 S

4 X+ R. J4 ~$ \' c6 V' ?( u
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2015-9-4 10:29:21 | 只看该作者
补充说明" Z  d6 a8 Z7 y1 B- S6 j# y' r; ~
我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下& I& Q- X$ A$ e6 w' ]4 l* D
(不过疑惑的是,为何单独DSP仿真就没有问题呢?)
, E. P7 j, v4 J4 e
: R3 Z! ?6 N6 O6 U$ S
是不是需要在DSP.CFG中进行配置1 }  d1 M( L6 R: t0 Z2 g
我现在的配置为* k2 w0 ^7 ~6 A+ F" _3 [: y; [
/ @- S. |! D9 M
/*' W& Q. x& w, x  N
*  ======== Operating System Configuration ========
. z) J5 S3 ?6 n  \9 c */
0 `8 V6 f* U7 \) L% l/ e4 y) ^+ d& k" ?. \
/* no rts heap */! ?4 E; o5 X- j2 `1 ]
Program.heap = 0;
+ E1 K5 }3 F, _0 F8 b5 f1 W$ D! S1 mProgram.argSize = 100;  /* minimum size */
# ~3 U# N; a- E5 ]+ yProgram.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大& U; Z: Z$ L2 t3 [( @" D& G

& n/ B6 u  l  _# m' V' s/* create a default heap */
4 B% g- h% Y- Gvar HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
3 |2 f4 X6 d, c* L1 r+ Uvar heapMemParams = new HeapMem.Params();3 m1 w" v/ |2 I5 i: L$ n
heapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大
1 m7 A; H) D% q- q. t! E
3 R' z3 p8 x. m+ E' o+ d* F' S
var Memory = xdc.useModule('xdc.runtime.Memory');
2 e8 g; e( @* C' Y& I* WMemory.defaultHeapInstance = HeapMem.create(heapMemParams);
* f+ c2 Y2 q3 I5 ?+ j! L' g' D3 d
, z+ v3 ^+ b" U+ Z* V3 \/* configure System module */$ \: K, r- ^1 i0 \* [5 W& ]
var SysMin = xdc.useModule('xdc.runtime.SysMin');8 Z8 h' y' `7 n/ o$ i5 I
SysMin.bufSize = 0x1000;9 t6 q, q3 _2 F' w; v' k( |
SysMin.flushAtExit = false;$ _- p+ T' `# P

! k) L8 G5 v  _' F  i9 ~- `var System = xdc.useModule('xdc.runtime.System');
- A7 Y6 |1 K: i6 JSystem.SupportProxy = SysMin;, Y3 u8 y5 U% @
/ Z. ]0 {) x- v- N$ g% @% N6 S
/* configure SysBios to use the lower half of Timer 1 */' d/ {: {+ M5 ^' u8 N
var Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');4 E9 l. I6 S; A0 w) z: W: S
var Clock = xdc.useModule('ti.sysbios.knl.Clock');
, N8 \  I- S; E( d' ^Timer.timerSettings[1].master = true;- d+ ?9 x4 K% I7 E# H1 A1 n  z
Timer.defaultHalf = Timer.Half_LOWER;& Q8 P0 Y$ M) r2 `
Clock.timerId = 1;
9 j$ {+ g' ?1 h6 d4 U! L( o. ?# }3 n7 Q$ k0 \* Y) P# m2 b3 A( _
4 F& Q3 h8 e7 b9 G, x
/*7 }9 n( }  s. M$ l% ^! A
*  ======== Miscellaneous Configuration ========- s% G( t$ {. T/ O3 F' N) z$ y( V
*/( k! ^( Q' A. v5 `" n" [

% b2 F* q6 @& ]5 z  [) L/* set default diags mask */
7 L0 d  H( p" }  a4 I' T. Dvar Diags = xdc.useModule('xdc.runtime.Diags');  v6 B4 G4 ]; F
var Defaults = xdc.useModule('xdc.runtime.Defaults');1 b* L8 g4 G, ]
. E  K3 w/ q3 o
Defaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;  w: c; c9 X$ z4 p
Defaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;
5 g- V! N6 v' Y0 ^* J1 ?& q/ }Defaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;
* v6 p% q0 x( H! zDefaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */
* j2 b" J: h( g* PDefaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */  k; G9 C0 `/ M, l- q* @2 V: o
Defaults.common$.diags_STATUS    = Diags.RUNTIME_ON;0 R" I% N; o2 X
Defaults.common$.diags_USER1     = Diags.ALWAYS_OFF;) @, b2 b( W# ]5 x6 Y1 A
Defaults.common$.diags_USER2     = Diags.ALWAYS_OFF;1 ^! r5 V% Q- C- |
Defaults.common$.diags_USER3     = Diags.ALWAYS_OFF;
9 M! M4 g7 u) q; `/ C+ RDefaults.common$.diags_USER4     = Diags.ALWAYS_OFF;
" X( W# }" T! S! y- {& T4 e" WDefaults.common$.diags_USER5     = Diags.ALWAYS_OFF;9 C2 n+ j3 y) p0 L; C
Defaults.common$.diags_USER6     = Diags.ALWAYS_OFF;3 M5 v- @5 v0 X% k" F8 I* G9 s  S" z
Defaults.common$.diags_INFO      = Diags.ALWAYS_OFF;# l" L* C" w8 g1 v6 m8 ~7 X
Defaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;
4 y2 w6 B) G. X  P: B4 `( ]7 l, g; r' h0 w1 w7 o
/* override diags mask for selected modules */
; c" x, l  b2 `9 C. ~3 {% [xdc.useModule('xdc.runtime.Main');
& p% S, J8 Q& [% B: M' p, D( VDiags.setMaskMeta(
& I9 t0 S. a& }) e& K    "xdc.runtime.Main",- Q0 z( q3 k, G2 T0 H& m
    Diags.ENTRY | Diags.EXIT | Diags.INFO,
6 Y& y! j- E" A) N    Diags.RUNTIME_ON' X8 {' O5 r4 _& f3 S) z$ f: I
);
0 u3 U  a" W* B0 ]" F2 T& I
% G' C8 \' G, Nvar Registry = xdc.useModule('xdc.runtime.Registry');: I- A6 R: R( B7 q0 K. `1 |' K
Registry.common$.diags_ENTRY = Diags.RUNTIME_OFF;6 j6 J0 }( c; `; w( V- w/ _' |# P4 C
Registry.common$.diags_EXIT  = Diags.RUNTIME_OFF;
; d6 a8 f! `& O% U! eRegistry.common$.diags_INFO  = Diags.RUNTIME_OFF;
4 @# |; b9 E4 m; S2 M$ B) qRegistry.common$.diags_USER1 = Diags.RUNTIME_OFF;
) A& R0 `) Z% H6 v: K
/ t6 K/ c  W3 P- M  q( R2 T7 l/* create a logger instance */5 z+ w- ]% `" t6 W/ b8 D+ z
var LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');
# _- Q/ x( T" F+ b+ q$ O: h5 avar loggerBufP = new LoggerBuf.Params();( o% e* ?% N! l# R" I
loggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */3 a7 x. j  V3 Q& T
loggerBufP.bufType = LoggerBuf.BufType_FIXED;
  m; ]' p; T) [" T! ^3 S
. L2 U7 d% S" J% a4 Pvar appLogger = LoggerBuf.create(loggerBufP);. J- Z0 L, G( Z' f: V: a; o* @
appLogger.instance.name = "AppLog_Core1";
& j8 f; v! O& Y2 c0 O' H* EDefaults.common$.logger = appLogger;6 ]1 E% K2 D0 s! |4 F
Memory.defaultHeapSize = 0x8192;   
9 J* c! Z- r9 `2 |. v( PIdle.idleFxns[0] = "&LEDStatus";
$ d. S# S2 q0 f" P, y, hCache.initSize.l2Size = Cache.L2Size_32K;* n& R2 b* H6 O9 e7 v5 F7 v

) M/ \+ u# u! ?4 @3 B6 Q6 N- o
回复 支持 反对

使用道具 举报

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 */
* I- y. }1 A- O6 I1 Mvar HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');' W( ]6 S5 o7 _7 B
var heapMemParams = new HeapMem.Params();
3 i9 k# k0 N" \, o+ `" EheapMemParams.size = 0x4000;. f* ]9 K% E) Y3 ^

" a$ u- \& z. T0 T& N. O: t$ Ovar Memory = xdc.useModule('xdc.runtime.Memory');
8 e# \! F- k# X7 xMemory.defaultHeapInstance = HeapMem.create(heapMemParams);! q7 B( O! o7 ?& z6 r9 P: A
% C9 X% x/ V8 S, v7 c* f+ _
我大约calloc  每次共计大小为5K*16bits,& m  b; {: G+ Z4 u7 H( s+ X
而默认配置才0x4000、需要改大。  d1 l1 K% Q" n7 Q0 B" z

. ?( H. |# Z+ R* d+ [3 H
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
5#
 楼主| 发表于 2015-10-28 16:14:47 | 只看该作者
/* no rts heap */
8 {5 Q2 B; O1 }7 m4 I# ?Program.heap = 0;
( P; Y! @. g" x$ F- GProgram.argSize = 100;  /* minimum size */
& i. g+ E$ H' y: FProgram.stack = 0xF000;                   //我改到F000  也不行
回复 支持 反对

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

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

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2026-3-15 18:48 , Processed in 0.043909 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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