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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2015-9-4 08:33:31 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
创龙工程师你好,我在OMAPL138单独调试DSP程序(使用SYSBIOS)时,在任务中使用calloc函数动态申请内存,用完后free,类似如下结构
$ _5 t1 A5 L9 r, O3 g
! a5 ?# i0 f6 e3 b& G. w    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //256
* ]) p: Q+ Z9 H$ k  G2 R& r+ ^) @, T1 @3 ?: i! q2 I5 q5 m
其他程序段。。。。。
' C1 }; p% j& q# @
8 y' d& s* v, Y: z   free(x_d);! ?4 f3 @% J9 h5 M* R

# I+ a1 R: x& J3 n" j6 K. w使用DSP侧单独调试功能,验证动态申请没有问题,' J! y4 F. T4 `: P3 q! G( F

- ?) Y( F' _6 E但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。' X7 V( \4 V6 {  R7 F4 F# p  n

8 J# s/ |5 {6 A, b1 ~- L5 l: X# X
" ]; y( ~" x0 y' v" o" k5 [- x" L+ Q/ P; N
# {  g! K; r. Q
8 {2 {% h4 `0 T2 P! W
4 ^; K. R: _6 G$ s. y

- h4 A9 A+ p+ v' H1 Z+ l$ h& `, t* ~, e' q2 I' t

4 e: o1 ]& Z) H; g, q& @* {' w0 p+ @. Y" D! a( `6 E+ S
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2015-9-4 10:29:21 | 只看该作者
补充说明0 F4 i: X3 z. T8 p- N
我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下- j1 e: `( [2 t" U/ F( Z
(不过疑惑的是,为何单独DSP仿真就没有问题呢?)7 \' K( |3 x' G! o* x
$ F* Q& ^) A# |% o2 l
是不是需要在DSP.CFG中进行配置+ q7 w- |$ R  X& A0 t( D
我现在的配置为. ?4 m( d3 p" g+ s# C# d  b
% {9 Q- `5 w2 G& h8 G8 V/ t
/*
3 z& J: g3 i; |4 [! j *  ======== Operating System Configuration ========
+ p& D+ X5 x% ? */
8 Q9 d) J, ^% Y, a" [$ ^2 [
0 a1 ]: A. h* }) {, t* F/* no rts heap */
3 V) F/ ?  m6 H! D1 R6 M2 ~Program.heap = 0;& @; n8 V. D5 K
Program.argSize = 100;  /* minimum size */
1 ]" D( \' Y# X/ Z* X* }Program.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大
% H1 s( z& J% W' v; c1 l' I% K$ d& O  L  N4 F
/* create a default heap */
. c, X( o' R; F( S% Avar HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');# P3 l# E0 A2 l! V# P  j8 s
var heapMemParams = new HeapMem.Params();
* L! w' z& M- y5 _, ^- UheapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大
* b7 f7 m" P2 I2 ?% e' n+ i. X) D) {1 q5 }2 o
var Memory = xdc.useModule('xdc.runtime.Memory');
5 I2 p" C0 o4 A! wMemory.defaultHeapInstance = HeapMem.create(heapMemParams);
2 F& W8 Z1 Z0 [" r+ n1 Y- I  u' x/ z; a! B/ Z$ q( d% S6 |
/* configure System module */
0 @2 A( C8 w8 vvar SysMin = xdc.useModule('xdc.runtime.SysMin');
. u+ |- m, p4 @' m6 o  L# FSysMin.bufSize = 0x1000;6 Y: W  O( M/ [
SysMin.flushAtExit = false;
* \7 U9 h8 p: b* k- Z, ]+ O+ X; q* {' q2 I1 c
var System = xdc.useModule('xdc.runtime.System');
+ P( `  u; e# J. L7 vSystem.SupportProxy = SysMin;1 n0 w$ q. U' m$ X' }. H- E3 [7 a

6 v' ^' q2 ?3 A% X/* configure SysBios to use the lower half of Timer 1 */
8 ~) \/ L/ _1 }, H7 ?var Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');, r* `6 C- F6 M! H
var Clock = xdc.useModule('ti.sysbios.knl.Clock');9 x# ?$ t- x9 G) M9 U3 }# k
Timer.timerSettings[1].master = true;
4 I$ X2 N( d' d$ QTimer.defaultHalf = Timer.Half_LOWER;/ B' t/ m. ^4 @+ u$ P  m  Y
Clock.timerId = 1;
; f3 M8 |  S8 O3 M3 m7 P! ]" c' i/ B* C% w+ ]! k) d8 w
5 v6 ~+ _. z% O" K" H
/*; y7 N+ d, g: V2 m4 k
*  ======== Miscellaneous Configuration ========0 i( L! c% O) H' ~( V$ ?% T4 h1 q1 t
*/0 {5 b& o' V0 n* ?$ r8 @5 r

% C. `( Y/ J9 X/* set default diags mask */* A' l1 ?9 I- e7 p
var Diags = xdc.useModule('xdc.runtime.Diags');3 l0 z/ L- C) r" {9 X; i0 w
var Defaults = xdc.useModule('xdc.runtime.Defaults');6 B9 U7 k! {7 l2 m  p8 A8 W. k

- B8 |  ?/ T+ I* ?Defaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;
, M5 k! `4 B( G5 v( W, E2 FDefaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;% r) {. \5 B  Z$ O/ k: e
Defaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;
% S; n$ o2 J: IDefaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */
# {7 ^) B( I$ `* ^, G* lDefaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */
' h8 c4 w7 r, i# W2 [; J% jDefaults.common$.diags_STATUS    = Diags.RUNTIME_ON;
% G9 S7 D& U- T$ \6 EDefaults.common$.diags_USER1     = Diags.ALWAYS_OFF;
' Q5 ]7 i( l4 ^. b$ e) iDefaults.common$.diags_USER2     = Diags.ALWAYS_OFF;0 ^* X1 g" S, p5 P  q
Defaults.common$.diags_USER3     = Diags.ALWAYS_OFF;
! D" U- X2 @: g8 GDefaults.common$.diags_USER4     = Diags.ALWAYS_OFF;5 c5 F4 m7 Z1 o, x- J
Defaults.common$.diags_USER5     = Diags.ALWAYS_OFF;
5 N# @$ g/ y, h4 H6 `Defaults.common$.diags_USER6     = Diags.ALWAYS_OFF;+ ~; I, Y8 @/ G0 x! n
Defaults.common$.diags_INFO      = Diags.ALWAYS_OFF;# e$ c( k/ s& b! L! H" N, M
Defaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;9 P5 p4 d3 J5 {0 M

; a$ O7 U' C9 U8 r  S/* override diags mask for selected modules */
9 r+ w6 W  \0 b+ \: j6 Exdc.useModule('xdc.runtime.Main');4 {, u. |6 p" [8 I. a+ l) K
Diags.setMaskMeta(
4 c4 M6 }9 Q9 i# _* o8 b+ N8 L    "xdc.runtime.Main",
# d7 [$ G, t! {+ o5 W    Diags.ENTRY | Diags.EXIT | Diags.INFO,
5 l, w* N% e- Y/ [: _    Diags.RUNTIME_ON
9 @5 |, T) {/ i) T);
$ L' s6 @- C; f' O6 C- e' X/ ^# I" ~& b  O7 l$ `, S* ^+ C- [
var Registry = xdc.useModule('xdc.runtime.Registry');
' r; A. K- p: n6 DRegistry.common$.diags_ENTRY = Diags.RUNTIME_OFF;% F+ {+ e; {. w+ i# |7 {5 U# d7 }6 ^
Registry.common$.diags_EXIT  = Diags.RUNTIME_OFF;
" |1 g5 @8 x0 D5 m. QRegistry.common$.diags_INFO  = Diags.RUNTIME_OFF;+ ?7 J0 Z  ~* I% V) [# T
Registry.common$.diags_USER1 = Diags.RUNTIME_OFF;
  a+ B, @! X! \+ h
9 q+ N  D0 D/ l# k- ?/* create a logger instance */' k% C4 _7 C0 R( D
var LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');: P! F  `7 C$ E8 Y$ Z2 \5 A2 b
var loggerBufP = new LoggerBuf.Params();
( ?+ F( G" ]! {& z% K+ x( I, }$ @& DloggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */
/ F) _# c( d4 Z1 YloggerBufP.bufType = LoggerBuf.BufType_FIXED;
1 s* Q; A9 o8 K( ?6 r, q8 P- b& z+ R% q+ w
var appLogger = LoggerBuf.create(loggerBufP);
/ Q- {  t! _2 {% q/ Z1 {2 x9 Q* n- o1 |appLogger.instance.name = "AppLog_Core1";5 b- I- T+ U1 t: U
Defaults.common$.logger = appLogger;5 ?+ {, Y9 y5 U" d' x8 V" E
Memory.defaultHeapSize = 0x8192;   
+ Q5 V; T3 \' b1 g2 f* XIdle.idleFxns[0] = "&LEDStatus";
7 N- D! Q, ~" b9 ECache.initSize.l2Size = Cache.L2Size_32K;" K7 c1 d4 n! k& K

4 M: m  @1 ?. M! p, Z' c, Q
回复 支持 反对

使用道具 举报

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 */
0 S* j6 P! |2 b/ B7 {1 ]' r( Svar HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');  I) A5 p2 }8 a% u; X
var heapMemParams = new HeapMem.Params();
" t' p; z1 p  A4 w/ F9 `( yheapMemParams.size = 0x4000;7 |* G0 [! e# a7 ?! P# D0 Y

; \1 y7 W/ x  i2 t6 X$ _var Memory = xdc.useModule('xdc.runtime.Memory');8 F/ U: w$ Q' E# q7 e( Y) }! b- l# |
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);
+ e9 W+ o- Y1 e1 L8 Q) s' Z8 d9 E1 G+ n% r
我大约calloc  每次共计大小为5K*16bits,& q4 ~; L+ f! P
而默认配置才0x4000、需要改大。
$ w3 D1 I3 a# Y: F6 Z2 A5 `- t7 Y. x. m5 A
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
5#
 楼主| 发表于 2015-10-28 16:14:47 | 只看该作者
/* no rts heap */
5 n) F: T% \! Y) V% ]Program.heap = 0;: }8 l# o$ f  E& s2 c  D% }* I" T
Program.argSize = 100;  /* minimum size */
" _3 W, z3 i- a. LProgram.stack = 0xF000;                   //我改到F000  也不行
回复 支持 反对

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

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

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2026-2-6 13:36 , Processed in 0.047301 second(s), 27 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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