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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2015-9-4 08:33:31 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
创龙工程师你好,我在OMAPL138单独调试DSP程序(使用SYSBIOS)时,在任务中使用calloc函数动态申请内存,用完后free,类似如下结构
' a1 L0 n5 T6 c& M- I; ?  J$ a7 \( i
    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //256
( W$ h- N6 {( U+ ]' g2 d1 \7 W, x  H# O$ b; g  x/ P. ^! d
其他程序段。。。。。$ z2 T9 F* `; p9 F1 b( p2 l7 s+ _) \

* c1 H- m7 ?( |/ ^% ?5 b( }   free(x_d);
2 O; l' a! q. u$ I6 R7 i9 w4 I
使用DSP侧单独调试功能,验证动态申请没有问题,2 U4 {) s. B! y: b5 ]# r

8 M* u$ ~6 N. b1 a$ Y% H! |但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。
4 ^  F  D; a5 V
8 T" d, v; P" Z0 @$ T% C1 k/ e; e

6 L& w1 Y% n# \$ e1 U
3 r$ ?5 y# S4 v& D; K. l: a+ I8 v: K
- A4 o/ e* ?* J0 B( l/ ^4 `; o8 G: U: _3 {+ I$ F. X- x& @

8 l: @  @2 v' I" c8 b; H
& s" e5 p. O3 D5 V
/ D6 w$ u( j% w7 H6 P
. F# \6 |+ ^5 ]- c. h% `
) Y1 ]1 U  j! k
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2015-9-4 10:29:21 | 只看该作者
补充说明- z& d- W/ }# n1 T
我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下7 [  p! [7 C/ Y; Z  l
(不过疑惑的是,为何单独DSP仿真就没有问题呢?)( m$ N$ u7 w" o( w& k& ]9 G2 Y: H1 m

: X4 t: r- F4 P) T" x$ O2 H是不是需要在DSP.CFG中进行配置" ^1 k( Q4 s4 R' o
我现在的配置为
! k1 p4 D! B- `% C( b
+ `/ l+ ~: Z/ W6 r/*
9 M8 S. A' s! h1 P+ }/ } *  ======== Operating System Configuration ========. y1 Y: z! c& L# R
*/
) E2 d6 a6 j2 |: {2 K4 Y( l4 _5 A8 q' c$ G3 V1 B
/* no rts heap */# \  }; \) g8 j& d; M& z
Program.heap = 0;
' D5 Z: `; x1 |: A7 ^8 w( p9 OProgram.argSize = 100;  /* minimum size */" b) ^) r" K2 A' T1 y3 v1 v
Program.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大
% F) D; b! k* H( ~7 F
7 {0 g, p- @- a. H) p( }/* create a default heap */. p4 h& m8 K; a3 Q" w
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');1 ~/ B- ?) S) r1 Y
var heapMemParams = new HeapMem.Params();
4 a, A1 e4 o2 PheapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大5 O: _: l* E9 B: X& V6 G% A

, r/ @" q1 q; {8 E2 p
var Memory = xdc.useModule('xdc.runtime.Memory');
- }- V( }& l" ?8 UMemory.defaultHeapInstance = HeapMem.create(heapMemParams);9 i; F0 s, T4 U  \+ q5 |

- ?1 Y  [* m/ p+ Z/* configure System module */
* \# _8 I6 x; s% j& i- v) `7 H5 C" qvar SysMin = xdc.useModule('xdc.runtime.SysMin');
- w2 c6 |; j$ }& M# nSysMin.bufSize = 0x1000;
/ u5 d8 ~1 i' }7 [: sSysMin.flushAtExit = false;
: I, d5 {. E# F& c+ w0 a/ A5 ~. W3 e" O8 D, U
var System = xdc.useModule('xdc.runtime.System');0 [. W& J/ ~2 A: |) X
System.SupportProxy = SysMin;
4 C. _, b# o+ N1 W9 M  @0 Y. b+ \5 O2 G) k' L
/* configure SysBios to use the lower half of Timer 1 */
9 M( x2 h. v1 Cvar Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');- v7 t7 G* Z) a1 Y2 S) _! W
var Clock = xdc.useModule('ti.sysbios.knl.Clock');
9 m4 [4 N' N# D( x5 t9 T! zTimer.timerSettings[1].master = true;! V( l4 T) Z# @& b* f. v* a
Timer.defaultHalf = Timer.Half_LOWER;' T) @8 I+ F; m0 v# A3 p
Clock.timerId = 1;
' j- O# \& u  ^& R! w  ?
8 [  f6 Z2 x. R
3 }- {1 {7 O  k/*) h5 z/ d  S$ W1 Y
*  ======== Miscellaneous Configuration ========& c& W" @$ U# K. b
*/
2 _5 V4 I2 g  s; C  L) B: H8 I6 ]/ T
/* set default diags mask */
# p' P5 S9 L6 y& ?) ~$ qvar Diags = xdc.useModule('xdc.runtime.Diags');
0 t- |3 Q" E  _var Defaults = xdc.useModule('xdc.runtime.Defaults');: Q9 R& A7 J; _7 r& }
3 M! |' v4 j* b# s- _/ P: H
Defaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;! O% k  |$ t& h2 V
Defaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;4 I  K/ n$ w- d& H2 c, h
Defaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;0 d/ n$ r. L9 j1 M% t! w
Defaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */
& p5 Y; k( _3 [5 i* `* |/ S& i% ?Defaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */
0 \& R4 [1 n1 k  I" c( h0 ~Defaults.common$.diags_STATUS    = Diags.RUNTIME_ON;# P- p7 H3 U' Q4 N
Defaults.common$.diags_USER1     = Diags.ALWAYS_OFF;
7 w/ b/ u; q/ y# E, fDefaults.common$.diags_USER2     = Diags.ALWAYS_OFF;
. H, d3 k' F( N3 _Defaults.common$.diags_USER3     = Diags.ALWAYS_OFF;
2 j. c4 p. a2 a& t) @' e& r" gDefaults.common$.diags_USER4     = Diags.ALWAYS_OFF;
8 \8 x5 f( }8 N0 R* ?) _6 {' VDefaults.common$.diags_USER5     = Diags.ALWAYS_OFF;
, x/ z. P1 [/ @9 H9 [Defaults.common$.diags_USER6     = Diags.ALWAYS_OFF;. F" W( l6 D  z8 x9 M# L
Defaults.common$.diags_INFO      = Diags.ALWAYS_OFF;1 g( w7 l: ^; g" s2 g8 M9 g# J* I
Defaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;
4 ]! R( y  V9 s4 W( r% ^) S4 Q9 L# k4 u1 C/ J- v6 c
/* override diags mask for selected modules */  b( t4 I; V, D/ v; t* f8 ^
xdc.useModule('xdc.runtime.Main');
. Z; V2 ~2 Q: D! A# \0 QDiags.setMaskMeta(
4 s3 `/ H' l% F/ c4 s2 R    "xdc.runtime.Main",
! }3 H  {4 H  ~( |    Diags.ENTRY | Diags.EXIT | Diags.INFO,; a: \8 x- w/ G" h* T
    Diags.RUNTIME_ON. [2 m# a# @6 D' q
);6 Q6 r: a8 z0 W3 A+ `3 [

- R* c( v/ ^; T1 b- S; ]: I- @var Registry = xdc.useModule('xdc.runtime.Registry');
0 n, `9 m( K% p. qRegistry.common$.diags_ENTRY = Diags.RUNTIME_OFF;( W6 T) ?, Y) |1 t/ a+ b6 k1 z. b
Registry.common$.diags_EXIT  = Diags.RUNTIME_OFF;5 {& ?1 O  s' t" q! w# z* |, {- J
Registry.common$.diags_INFO  = Diags.RUNTIME_OFF;
. v8 l% T. [( e1 @5 D0 KRegistry.common$.diags_USER1 = Diags.RUNTIME_OFF;0 W. Q7 _7 m9 P* c7 h& b

8 Q7 y/ G# j$ C& d# w; k1 J/* create a logger instance */
( ]0 m3 g, E# g* Q) Y2 n3 qvar LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');& c9 E6 W; ?* b, E7 D$ p4 ~; y/ i
var loggerBufP = new LoggerBuf.Params();+ p" ]+ C' h% `. l
loggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */1 F, n2 G& P" K! L7 J
loggerBufP.bufType = LoggerBuf.BufType_FIXED;
1 U; o6 C! e* Y; b8 |
/ D& d# M+ a5 ^/ P, svar appLogger = LoggerBuf.create(loggerBufP);
5 K& V7 |7 H: l+ fappLogger.instance.name = "AppLog_Core1";) B/ q' N6 q6 e" q: A6 ]* ?! h
Defaults.common$.logger = appLogger;
9 t& Z/ Q1 F5 j6 K) [+ P5 s) }: OMemory.defaultHeapSize = 0x8192;    ! F/ o9 ~/ E( R) ]0 I3 m
Idle.idleFxns[0] = "&LEDStatus";
2 r, H& T" \  ]- m8 u! LCache.initSize.l2Size = Cache.L2Size_32K;# x& Y/ }7 g( s- S+ P+ T
/ _. s# J8 X1 ?9 }) ^, U$ X  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 */* L0 J1 ?) u2 ?; d# W3 u( q
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');6 `  z! D: {9 b+ p8 N' G9 b* t
var heapMemParams = new HeapMem.Params();- l' M. A9 U3 K/ O" M; k' w0 A6 S
heapMemParams.size = 0x4000;1 g8 p2 \, ~# h
- s- G5 }/ }9 M: C9 t6 L. D2 p, f
var Memory = xdc.useModule('xdc.runtime.Memory');
9 S# u) ^/ f) R6 t( I  lMemory.defaultHeapInstance = HeapMem.create(heapMemParams);  R- V9 K$ _, w, v4 Z

8 c) k* g4 j: `- E( [0 r我大约calloc  每次共计大小为5K*16bits," j7 Y9 o# s% m
而默认配置才0x4000、需要改大。
, I/ L  ]. }2 R+ Z: |
* }" |1 x# m) j$ t
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
5#
 楼主| 发表于 2015-10-28 16:14:47 | 只看该作者
/* no rts heap */
8 ~+ m* L6 V! [+ Q7 w3 ZProgram.heap = 0;; u6 q$ C7 d  G  f( e5 E
Program.argSize = 100;  /* minimum size */, t1 X9 z$ C% E, K0 i
Program.stack = 0xF000;                   //我改到F000  也不行
回复 支持 反对

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

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

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2026-1-24 19:24 , Processed in 0.043631 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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