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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2015-9-4 08:33:31 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
创龙工程师你好,我在OMAPL138单独调试DSP程序(使用SYSBIOS)时,在任务中使用calloc函数动态申请内存,用完后free,类似如下结构, g  r+ z2 X: V7 d* L" f

9 f, r6 W+ ?# h+ R2 x( U. f3 S    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //256+ C8 x9 s% Y0 y9 @8 t' k! \

8 z5 o( a- {7 c) g0 ~) i其他程序段。。。。。
. D% J( }7 E3 l; W ' f& H. U5 e2 @# B0 A, U& X  X
   free(x_d);
: b5 I1 W$ w+ \- B- w1 X
) I- p1 U! R3 I1 X使用DSP侧单独调试功能,验证动态申请没有问题,
3 A! P' N* P. _  ^
& L9 u1 Y* U2 l( h但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。
9 P( b* u3 e' x- Q

5 @: n( S; Q6 ^8 q8 |% h2 f3 K/ h( }5 w" I( U$ Q. z- N; @' F

$ ?* X. _, z, b* n
3 M3 d3 f" W5 T% i5 J- C* R
4 Y3 O: a- G8 ^5 n% b4 ~. ?! \9 `& r" K: o2 H

! y) v. @9 V% _
0 Z8 |' W0 G; A: u! E0 G! N6 g1 H$ z2 T7 P$ ?

- n' f: b  W5 _' B
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2015-9-4 10:29:21 | 只看该作者
补充说明3 G9 w: B+ p% q0 h; C) k
我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下6 L; g" _$ r( m/ ^5 f+ }
(不过疑惑的是,为何单独DSP仿真就没有问题呢?)/ M! m/ v6 u3 \( t0 @% C
& M4 h, ^7 _2 ~6 A  ~; H
是不是需要在DSP.CFG中进行配置% C4 ~+ G5 {, c$ h
我现在的配置为& k, E) G" S0 a2 A' W  l  r& F' W

& B9 h" e6 X4 V8 D+ {5 Q/*( `6 o2 I6 z% g6 p& v, l
*  ======== Operating System Configuration ========1 q! \1 {6 P) u0 O* E) I, M
*/# f) z) w) [$ Z! Q8 E3 U

& h5 c( t/ u+ M* ]/* no rts heap */6 R! ~- W/ o  [* L
Program.heap = 0;
5 b% A/ r) G$ b& @1 z2 n  iProgram.argSize = 100;  /* minimum size */
6 K" p2 d' s% i/ w) n3 V: b2 dProgram.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大# F# K! K1 c6 D0 \7 s

4 r# D+ o! u3 Q! J: G/* create a default heap */# _5 w; B0 a" C
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
# u0 v, j: x" I! M/ N+ I% r5 ]var heapMemParams = new HeapMem.Params();
7 [1 p5 ^) B( u7 DheapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大
& ^& F# ?- @0 R
; X7 P& t9 p) _- S: K
var Memory = xdc.useModule('xdc.runtime.Memory');
( w) [5 d3 g. L# RMemory.defaultHeapInstance = HeapMem.create(heapMemParams);
. _) Q; b9 L# F" H* Q5 J. K; _: @$ @7 o' a3 y
/* configure System module */1 ]& a% a- w) S
var SysMin = xdc.useModule('xdc.runtime.SysMin');1 c" A8 h! {0 C  \4 T
SysMin.bufSize = 0x1000;9 \6 d1 q) f+ G- E
SysMin.flushAtExit = false;+ w( t7 _' t1 a6 R7 m: K
, p9 g8 h/ N$ ^- v$ m$ [" K: Y
var System = xdc.useModule('xdc.runtime.System');
' s9 O" N/ J8 @. Z. J' U* d* QSystem.SupportProxy = SysMin;1 a) z0 f/ F6 h1 q2 }1 M
' m* ]! W' v/ Y3 u
/* configure SysBios to use the lower half of Timer 1 */
9 B6 S: i7 p& b) o! k8 E( e- Zvar Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');
, E& @/ H5 |/ r; Y9 G4 mvar Clock = xdc.useModule('ti.sysbios.knl.Clock');" v! U  M* f- V0 L: a
Timer.timerSettings[1].master = true;0 a; b1 s+ J5 v2 c& x, V
Timer.defaultHalf = Timer.Half_LOWER;
! t  P& j& W' d& M1 YClock.timerId = 1;6 T/ f: U5 P% p

, z  F' s8 ?3 r. I
6 Y7 h9 Q' v1 J+ p& Y/*
; [0 u" T/ P% Z1 A( u4 r: z, G  J *  ======== Miscellaneous Configuration ========
- n- d! W/ r0 L. B% z' i */
4 ]1 J2 X5 u8 f) m$ ^( I
" O: T& M: ?& ?! A* P' v# d/* set default diags mask */1 F3 Y8 B6 C. S
var Diags = xdc.useModule('xdc.runtime.Diags');
. E: x3 ]9 ?/ y6 J! W! z5 svar Defaults = xdc.useModule('xdc.runtime.Defaults');. _" o; M/ C# K0 V0 S

* K2 a7 p# L& t  DDefaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;, e0 t2 k: w5 E3 t. q
Defaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;
3 C$ ~/ O0 ~/ g0 gDefaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;% k) W5 l) M$ e( d( j
Defaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */
) |3 |% W$ w( R; O) n' {; aDefaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */% R9 C! Z/ i) k# N8 t  X
Defaults.common$.diags_STATUS    = Diags.RUNTIME_ON;- A5 C1 H) ], h; |' n
Defaults.common$.diags_USER1     = Diags.ALWAYS_OFF;
) N* t- a; t6 O% y4 A5 y0 H- F- ^Defaults.common$.diags_USER2     = Diags.ALWAYS_OFF;* [* P# o. O) k0 B
Defaults.common$.diags_USER3     = Diags.ALWAYS_OFF;! S5 l7 p! ^9 V4 C  p" y& I: r
Defaults.common$.diags_USER4     = Diags.ALWAYS_OFF;0 u- r" w; [) k
Defaults.common$.diags_USER5     = Diags.ALWAYS_OFF;
1 A, n3 n: Q' }: ]Defaults.common$.diags_USER6     = Diags.ALWAYS_OFF;9 }) s1 H6 A2 a& v# o$ F
Defaults.common$.diags_INFO      = Diags.ALWAYS_OFF;
" N) O; ^" t: g8 u  C! `" RDefaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;4 W0 h7 A' |/ T1 W0 J* ]
, t% Y1 P# G* v* D2 U
/* override diags mask for selected modules */6 d6 Z; t- Q" C) s3 l' I2 Z
xdc.useModule('xdc.runtime.Main');- `+ j- L! G# ^4 @- R6 Z) @: Q
Diags.setMaskMeta(
; j2 f% G2 c0 `    "xdc.runtime.Main",
' P6 ?; V/ z3 M: l& ?. K8 |    Diags.ENTRY | Diags.EXIT | Diags.INFO,
+ J/ x7 j2 H9 ^9 L6 f; v+ B' f    Diags.RUNTIME_ON
- K; i$ o7 D( u+ [  d( O5 N);
3 t/ t+ e1 z. I! i, M1 r
5 k& G$ b7 A& L; @var Registry = xdc.useModule('xdc.runtime.Registry');4 U3 e0 Z  \. ]5 X1 u3 O0 O
Registry.common$.diags_ENTRY = Diags.RUNTIME_OFF;
0 }0 L" `' w; `1 j) c+ U- O) x' zRegistry.common$.diags_EXIT  = Diags.RUNTIME_OFF;3 `8 B( Y  @5 O8 f, ]
Registry.common$.diags_INFO  = Diags.RUNTIME_OFF;
" i; {) ~2 z9 O, o0 R0 xRegistry.common$.diags_USER1 = Diags.RUNTIME_OFF;
. b3 N- Z: l+ r" p! o! L5 X, b
+ t! N6 {' w' K9 ~5 H+ e+ u2 `/* create a logger instance */
* P9 P* F9 q. a& t, j6 m4 Wvar LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');
$ B+ X8 O9 r  ~9 Tvar loggerBufP = new LoggerBuf.Params();$ z2 Q' [& z# ?( m. g5 p# W
loggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */
5 m' f% S" X1 A% X, CloggerBufP.bufType = LoggerBuf.BufType_FIXED;( O3 a+ o. P* C" F( Z6 n: \
- M8 q' A& h  ]# ~
var appLogger = LoggerBuf.create(loggerBufP);% U! d5 X8 Y3 G4 b4 E+ }8 a  l
appLogger.instance.name = "AppLog_Core1";
0 U" x# q6 F, G! g' ?Defaults.common$.logger = appLogger;
" Q5 B- Z/ u4 d! k$ C# QMemory.defaultHeapSize = 0x8192;    ; W6 k# m( e# A8 w
Idle.idleFxns[0] = "&LEDStatus";
/ o5 W2 y3 j) _& I! RCache.initSize.l2Size = Cache.L2Size_32K;
& r, w* I7 [" ~4 P) w7 }
9 M0 M" Y" b4 G; X2 r5 y- B
回复 支持 反对

使用道具 举报

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 */3 @. n% x4 ^% E5 E. u. n' j
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
: Y# G' M2 T9 A8 Z4 [var heapMemParams = new HeapMem.Params();. G3 j6 w. i* k& t9 k5 W  Y
heapMemParams.size = 0x4000;
* s! T. a1 i. ]# Z" J1 E4 |+ f1 V& |7 j& ~2 Q/ T* z
var Memory = xdc.useModule('xdc.runtime.Memory');
4 f3 a# X1 I& O: b0 ?Memory.defaultHeapInstance = HeapMem.create(heapMemParams);
* f! F3 j5 }+ ~  I9 x
5 U$ J% M! I  {9 ^( j* F+ W: H我大约calloc  每次共计大小为5K*16bits,4 J/ K& M/ d% t. ?; X, y
而默认配置才0x4000、需要改大。
) L. S# H5 S" j% Q
  M0 z3 ]4 {0 Y5 ~
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
5#
 楼主| 发表于 2015-10-28 16:14:47 | 只看该作者
/* no rts heap */
( `; G0 }6 f9 \- Y; i- pProgram.heap = 0;
9 h6 P. W: C1 A- aProgram.argSize = 100;  /* minimum size */6 i+ y* G! o+ I# Q
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-30 05:19 , Processed in 0.041039 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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