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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2015-9-4 08:33:31 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
创龙工程师你好,我在OMAPL138单独调试DSP程序(使用SYSBIOS)时,在任务中使用calloc函数动态申请内存,用完后free,类似如下结构
3 V6 v2 t' B6 H: v' }( _4 O% B5 Z' m2 H+ X( \, R
    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //2563 K! F4 S& ?; X
9 V% l/ B, ^% Q0 M9 ~; ^
其他程序段。。。。。, W9 z1 v+ g0 T' s8 ?; D6 }
9 ~6 K: Z. t# X; o
   free(x_d);& v! Y* h. R4 k% g( x" O
8 u1 @# q4 g8 y' O8 i6 D2 q' q
使用DSP侧单独调试功能,验证动态申请没有问题,' |# D2 \: I0 z) [  G
! N! }" n( O- {) l. B3 G
但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。
, z& y5 W, r8 F

8 R' w- e2 x+ x$ T3 z
/ |5 {( H' a% B9 \$ {) C2 l% ]& n' K& |5 r  n4 f4 C

+ V9 C, ~) E& _# o! e4 n* j& _
& _. X% X: x( x8 i# v" [9 K0 g" d( r; J. H8 {" q& Z

/ k4 V- G3 x% T. a0 e! `' A8 K
4 i$ K& Z9 p: q( }! ~4 ]
5 `, O  S. m% m$ Q; @
) [( z9 R0 w' o2 d3 Q9 h& s
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2015-9-4 10:29:21 | 只看该作者
补充说明
* B$ S  e. z& d) h我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下3 V7 L+ Y% X/ E" a
(不过疑惑的是,为何单独DSP仿真就没有问题呢?)- w7 S: C, {" Q8 n
( `* L% Z% n. v5 z, g
是不是需要在DSP.CFG中进行配置2 f0 C' R) Z: s$ e( Y2 l
我现在的配置为* f% l" I  q- j' J

/ }- {7 d% l' X: G5 L+ _6 Q/*  t  k" V5 _9 \
*  ======== Operating System Configuration ========
- u* y# n" B4 O  f5 l8 X */$ @8 p7 i+ `; V6 x% y( o! x1 G

& H$ z* [% S5 d, ^" ~2 Q/* no rts heap */
% k1 h6 ]8 N6 z9 M/ ^Program.heap = 0;+ t0 O8 |# y$ w" a/ B7 X; ^) S+ W
Program.argSize = 100;  /* minimum size */. y% I! z  K0 f9 e% o4 ~
Program.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大
; M  t9 S, K. f- Q; q6 Q8 {1 q/ z( {. p9 X6 S
/* create a default heap */; ?- F$ O8 M% ]8 w: U
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
0 s, [% r9 u$ o, r! g8 [( x4 x% D* dvar heapMemParams = new HeapMem.Params();( F6 i) N3 d) d9 w
heapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大
+ s) }$ Q- \. J: ^
" T! W  L, ]9 E8 |; j# U
var Memory = xdc.useModule('xdc.runtime.Memory');
1 c" C/ p! w- T5 UMemory.defaultHeapInstance = HeapMem.create(heapMemParams);
1 H( C, y5 J8 `6 w# k+ Z, n' M  p4 N( p5 S( @) m2 e) V
/* configure System module */3 X& b' i0 Z( }0 s# Q: X
var SysMin = xdc.useModule('xdc.runtime.SysMin');
* l! v: c. }" K7 `2 I& f8 \SysMin.bufSize = 0x1000;
0 ^. Q! y& K4 @% G0 wSysMin.flushAtExit = false;
0 K* J/ @) R" I2 G" n
, K, T& ]* t$ T9 C: Yvar System = xdc.useModule('xdc.runtime.System');* Q. [5 r9 W5 b" Q3 J
System.SupportProxy = SysMin;: z0 _; l) Q  R, N- i5 ?: ~8 F
5 @* |/ V; r: |! x" p
/* configure SysBios to use the lower half of Timer 1 */
! n9 O% p; G/ e+ J2 D2 v2 A  `1 E# ivar Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');
* x1 @7 ?2 M' j; `) f* c' `var Clock = xdc.useModule('ti.sysbios.knl.Clock');7 M& P4 z3 r  l) X2 e
Timer.timerSettings[1].master = true;" o7 W( b. u+ E+ S3 }) b2 G
Timer.defaultHalf = Timer.Half_LOWER;
8 A! h1 ?1 N; i: z: l$ dClock.timerId = 1;2 z; x1 L1 r4 s+ x
- |6 f9 Z& `/ u
; J6 a4 ~4 J+ m7 @$ C2 W. N
/*( o4 K% n- ]- b! `; e# q4 @
*  ======== Miscellaneous Configuration ========
$ q, e% e8 V# i  M" r; n */, ]- }  S- D' _+ H% L
3 B' a; s/ ?9 o& ], r3 u. }" k
/* set default diags mask */
5 D0 J' I: }+ C9 [3 ?: Evar Diags = xdc.useModule('xdc.runtime.Diags');; Z- z2 D1 i" w6 U: C7 n: z
var Defaults = xdc.useModule('xdc.runtime.Defaults');
+ J5 p/ k' y. y- u3 R; x/ ~( k1 |; u3 g: I
Defaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;% {# y3 g5 f, }3 `! d
Defaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;
, K% p1 {& ^0 j# ]Defaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;% K" k$ j5 \* F) o  z
Defaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */
% }1 v& P  ]. ?5 U  X  JDefaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */; X( B$ Z! M& C$ I6 S* [
Defaults.common$.diags_STATUS    = Diags.RUNTIME_ON;/ G/ X7 ]5 j- r$ @( D
Defaults.common$.diags_USER1     = Diags.ALWAYS_OFF;
  z! a8 J. }3 V! {1 xDefaults.common$.diags_USER2     = Diags.ALWAYS_OFF;5 ?% G& d" t0 ~0 f
Defaults.common$.diags_USER3     = Diags.ALWAYS_OFF;
$ g* u# U+ K% }( E) k% x9 j0 oDefaults.common$.diags_USER4     = Diags.ALWAYS_OFF;9 [1 g' m- L! ]! F- T3 j( b
Defaults.common$.diags_USER5     = Diags.ALWAYS_OFF;( f+ {4 ?' x  d5 J- V2 ^
Defaults.common$.diags_USER6     = Diags.ALWAYS_OFF;/ c' [5 @3 ?" c7 n3 W, K- t
Defaults.common$.diags_INFO      = Diags.ALWAYS_OFF;  C% {! n$ e1 R( ~; g* [7 k& D$ h! J
Defaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;
2 R1 D$ M' ~/ M- }) Q
# S) G6 s1 {6 j2 H6 k! Y( J/* override diags mask for selected modules */8 q8 m' G+ c: g) U. |! Y$ c
xdc.useModule('xdc.runtime.Main');$ R1 M, F2 c$ A, ]8 y2 ?6 ?# B1 X
Diags.setMaskMeta(( q% d9 g# ^; g2 @, w* ~. v
    "xdc.runtime.Main",
3 S9 i6 t0 \* C; j3 }- j$ l  s( D    Diags.ENTRY | Diags.EXIT | Diags.INFO,
+ w, }" f3 v" Y4 L/ a5 j+ C    Diags.RUNTIME_ON
* ?/ U3 M& ]; N7 L' ?+ u);# X! A7 E2 o1 q8 f
1 k0 ?: l" j! C' n- k9 D: k) b- p
var Registry = xdc.useModule('xdc.runtime.Registry');
$ I6 C: A" v; E" L4 O' _Registry.common$.diags_ENTRY = Diags.RUNTIME_OFF;
  ?+ w' l" U5 L, n  C: C; xRegistry.common$.diags_EXIT  = Diags.RUNTIME_OFF;
* D2 C! m+ G8 ?Registry.common$.diags_INFO  = Diags.RUNTIME_OFF;1 g) i2 A, Q0 h% Q5 N+ J9 v
Registry.common$.diags_USER1 = Diags.RUNTIME_OFF;
( `2 z7 ?# M; y- z' j6 n" t$ X5 L$ a9 ~2 E# `. T3 S
/* create a logger instance */
' |* k/ [  T: e7 X# w) X% ^" ~7 r9 Lvar LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');
  q% t7 W& m" evar loggerBufP = new LoggerBuf.Params();7 c8 w$ k: |/ M& X5 W" E
loggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */
0 [, s% [0 r; e4 AloggerBufP.bufType = LoggerBuf.BufType_FIXED;& u- X' ~  u3 O6 L3 D0 x

$ V3 O1 x4 Q4 P4 h; U2 wvar appLogger = LoggerBuf.create(loggerBufP);
$ u* [8 Y3 {7 F; g' s/ IappLogger.instance.name = "AppLog_Core1";! ?$ N- y; Z7 i9 F3 a  U
Defaults.common$.logger = appLogger;: A) Y3 D3 ~$ ~2 o/ I# O
Memory.defaultHeapSize = 0x8192;    # M2 r8 U3 k* E+ `
Idle.idleFxns[0] = "&LEDStatus";
, i! w+ J2 m3 X1 p6 LCache.initSize.l2Size = Cache.L2Size_32K;+ L/ z: N! v$ p$ \) n. x

: f# q: a$ ?( g. w; T  t8 E  I8 y
回复 支持 反对

使用道具 举报

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 */
% ]! S$ R8 H, P2 \# wvar HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
5 [% Z( \& U6 L& h% ?var heapMemParams = new HeapMem.Params();
" k3 c/ A# ]' G$ v; s* CheapMemParams.size = 0x4000;: G* z. R! j/ F  ]0 w: \
7 y7 K5 O1 ^& G3 o8 I" A
var Memory = xdc.useModule('xdc.runtime.Memory');
# \: q( }( l8 e& i& o& AMemory.defaultHeapInstance = HeapMem.create(heapMemParams);5 `- f6 y6 a7 s8 x/ l

6 M9 d8 x. I# r3 H4 E9 Y我大约calloc  每次共计大小为5K*16bits,
* n: x1 a6 j7 `% C- E4 G' r而默认配置才0x4000、需要改大。  v6 G0 u) s( E- C( r+ r
) ?$ h; s9 u' n) A1 {  h
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
5#
 楼主| 发表于 2015-10-28 16:14:47 | 只看该作者
/* no rts heap */# H8 \; U+ B. E* @0 ]
Program.heap = 0;
" Q; F; _3 U! e3 pProgram.argSize = 100;  /* minimum size */: J6 R9 l/ Q7 N1 R9 y; E  ?- [) W" m$ w
Program.stack = 0xF000;                   //我改到F000  也不行
回复 支持 反对

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-7-16 04:31 , Processed in 0.042253 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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