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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2015-9-4 08:33:31 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
创龙工程师你好,我在OMAPL138单独调试DSP程序(使用SYSBIOS)时,在任务中使用calloc函数动态申请内存,用完后free,类似如下结构
* Y/ Q, e9 u, h7 g1 ?) B2 j; [1 @" h$ g# L& l
    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //2563 {8 |( O6 y$ p( ?
% i8 S! K9 ?- s9 J% M
其他程序段。。。。。0 g: C: X+ f; W

2 [! f. Q0 C9 j8 `% _. ~   free(x_d);
& v; K9 |! R, _- d' q  E2 P* J6 d  ^
使用DSP侧单独调试功能,验证动态申请没有问题,
4 S4 `! ~  \/ Q# U
$ T' C" _% M! B: }+ I但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。
: H: w. \6 v& _
  x0 J! Z9 L, W7 \1 O( [

& P5 |% x% q; E9 ]. U- X4 z% F4 `7 [* u& |+ u4 _1 l9 u
/ P) i. n% c- R0 y) L4 ?$ C

! A5 v9 ^+ M% G1 O
7 y. F- e( P5 r  ^6 Q* q" F4 `
( p/ G4 a! [$ h1 _4 W  \) [' a8 c

1 w2 n8 d; R4 [8 T! r2 {' U' U# J) n. l5 f" _0 D
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2015-9-4 10:29:21 | 只看该作者
补充说明5 ~9 t  p. t% j0 H# K  x4 N9 ^8 W
我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下) ~8 p5 u$ x# D5 _) B$ |4 m' R% b
(不过疑惑的是,为何单独DSP仿真就没有问题呢?)/ C0 O* |  _8 H6 k2 d4 ^& G
- E; N/ l% I; U% j$ _
是不是需要在DSP.CFG中进行配置- p) o/ a- s2 [  M
我现在的配置为
* g; Y/ @7 K( \- r- b
" R0 s( `! Z" d( v$ U0 N6 r! F/*5 ?2 @: J( ^3 {& M
*  ======== Operating System Configuration ========
- R. X' T$ O4 W9 H' V$ }2 s( [ */
9 @' d( @4 y- o0 ^6 x* I- j6 o+ O7 O
/* no rts heap */5 h" Q4 a/ a* b0 a
Program.heap = 0;
7 ]& a+ i5 D6 s+ GProgram.argSize = 100;  /* minimum size */+ V0 z5 f/ E8 h; d0 f& j9 ~
Program.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大
2 \( `. f! J& M7 N( H
/ R: W0 S* A: O) r0 ]/* create a default heap */4 U8 w/ p' x0 a" o
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');# i* H7 m8 g. i' T9 i: T5 T$ P
var heapMemParams = new HeapMem.Params();
: s/ k5 x& Y1 _# M$ s# B- B3 Y8 }heapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大
+ o3 ?9 N6 n) c1 @
" |8 k- m' H" Y% }  ?# C
var Memory = xdc.useModule('xdc.runtime.Memory');" n( w! G, ^$ W0 @( a
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);+ h# R1 B  u; @  Q! w# v) I

: e' Y; ?! U- b3 Q* B* l& g/* configure System module */" p5 K! n- z) \6 q9 Y0 N$ @" U
var SysMin = xdc.useModule('xdc.runtime.SysMin');
/ t6 K# r6 _7 b9 QSysMin.bufSize = 0x1000;
: d0 m6 Q$ }6 S# [; _& ]1 H* b6 F3 qSysMin.flushAtExit = false;
. I) h( g$ N  \; f' c" ^
' W% K6 K) C, e7 Q7 gvar System = xdc.useModule('xdc.runtime.System');
. }) g  O) c# L% {System.SupportProxy = SysMin;
/ C% f* E8 X; ~- `% y6 E
7 V# u$ S: j  u+ X! n/* configure SysBios to use the lower half of Timer 1 */. j0 m. v' m5 e+ {4 `
var Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');
% ?+ p- S6 q) x# y1 P8 Z, Fvar Clock = xdc.useModule('ti.sysbios.knl.Clock');
0 ~+ }% l5 a- q$ ^4 _6 T) K2 `Timer.timerSettings[1].master = true;8 N4 H" _. r1 z! N7 E
Timer.defaultHalf = Timer.Half_LOWER;
. X( i/ ^; A1 y" I/ o0 lClock.timerId = 1;. c: u( K; I% C! t- V7 E: X

$ a7 O3 C  a, a" z: S7 R) D/ `% p5 n, l
/*; w2 {* t# g: a
*  ======== Miscellaneous Configuration ========
3 ^, D3 @8 X% ^3 d7 P* _9 b! J+ Q */2 o4 q1 S- k5 q* X0 l) H

8 _! t6 x- C  J9 V' E/* set default diags mask */
( O' {# }; f$ F5 |' w" z5 Bvar Diags = xdc.useModule('xdc.runtime.Diags');
4 O; P' a& m6 o6 l$ ivar Defaults = xdc.useModule('xdc.runtime.Defaults');
# Z2 ]9 j4 W" z) l+ P- W: b  O
$ {% G8 @1 O. K: s' tDefaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;" F) V- a5 F( s, b6 m  ~
Defaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;
4 `4 y8 q& K* P2 Z3 k3 GDefaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;
) O0 S' y$ k+ S+ ~7 IDefaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */
' C  W, K4 U- ~4 \Defaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */
7 m! M0 E7 d6 x  Z% `Defaults.common$.diags_STATUS    = Diags.RUNTIME_ON;
8 T) C) A" o: W: ~Defaults.common$.diags_USER1     = Diags.ALWAYS_OFF;
* s# y# ~8 ~9 j8 ^1 m. rDefaults.common$.diags_USER2     = Diags.ALWAYS_OFF;1 }7 ?3 Z: L& j
Defaults.common$.diags_USER3     = Diags.ALWAYS_OFF;8 g% p. {( H8 q4 P4 [1 x/ y, v9 U
Defaults.common$.diags_USER4     = Diags.ALWAYS_OFF;
, V* \3 S+ |$ k: NDefaults.common$.diags_USER5     = Diags.ALWAYS_OFF;% ~# C4 l+ \. a) N# a
Defaults.common$.diags_USER6     = Diags.ALWAYS_OFF;; z- V/ a9 u; ], E! U
Defaults.common$.diags_INFO      = Diags.ALWAYS_OFF;
+ ]% V  O& z/ \; ~Defaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;# W$ W, }0 ^4 v+ q
. t, w$ T, B# E- k$ V
/* override diags mask for selected modules */5 ]9 r% \* I8 I+ ]- _
xdc.useModule('xdc.runtime.Main');2 U$ h- l) Q% s+ @
Diags.setMaskMeta(
( G8 g/ s$ P/ O& H  ~    "xdc.runtime.Main",9 B2 `/ t% A/ L* H6 C' y# f! x
    Diags.ENTRY | Diags.EXIT | Diags.INFO,3 x$ r$ `  y) |: u. ?2 L
    Diags.RUNTIME_ON, Q" K- S+ G1 i- ]7 D/ S3 }$ _
);1 `$ F' a& N; o9 I
2 h) y2 F9 p0 X$ ]
var Registry = xdc.useModule('xdc.runtime.Registry');
1 E& ~: v& Y6 l  V! o3 h9 wRegistry.common$.diags_ENTRY = Diags.RUNTIME_OFF;
7 b9 {4 A) U7 c1 C+ fRegistry.common$.diags_EXIT  = Diags.RUNTIME_OFF;
  C+ \" |; f! w! B1 _4 j& `Registry.common$.diags_INFO  = Diags.RUNTIME_OFF;2 S. _, ?1 R. x% s+ @
Registry.common$.diags_USER1 = Diags.RUNTIME_OFF;1 r) g, S  P( }% G  w% X0 ~

' N4 n" m" P4 w' D4 s8 }6 M/* create a logger instance */
# e0 P) M+ A1 ~$ Evar LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');
8 k$ a6 l2 O. ]( R" y$ f# p: Cvar loggerBufP = new LoggerBuf.Params();9 Y0 I  t" }# i) X$ q! ^
loggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */
% t; i- G* [% k! t8 m1 bloggerBufP.bufType = LoggerBuf.BufType_FIXED;
+ g! O, P4 u3 N/ ?* j/ N# O; h
4 C6 A1 F! d' u( D; ~var appLogger = LoggerBuf.create(loggerBufP);/ J5 }: Z$ y" m+ _; F! T
appLogger.instance.name = "AppLog_Core1";
4 Z4 t" X4 f" [( \  _3 r& z/ XDefaults.common$.logger = appLogger;
" U( v6 ]/ m6 m9 qMemory.defaultHeapSize = 0x8192;   
! l8 J: c  w9 J% b+ UIdle.idleFxns[0] = "&LEDStatus";/ ^# [; o: x: V+ C
Cache.initSize.l2Size = Cache.L2Size_32K;8 F3 v, q* }  G# c+ V/ ?

9 p3 p* \2 H2 T! B/ o' N( v
回复 支持 反对

使用道具 举报

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 */
/ e4 C3 q! Z* Q( H* q" `var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
$ g2 }) e& ]. }: q9 pvar heapMemParams = new HeapMem.Params();7 z. Z' v, Y' c  R, A
heapMemParams.size = 0x4000;7 l9 P9 F( b: e' \- J$ R* K
  c/ p) d; U$ L( \; ?; ?
var Memory = xdc.useModule('xdc.runtime.Memory');6 k1 W/ j' ~: q1 p! E
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);& h" ]/ B: \6 _2 G, L9 W2 W
9 {. @  i0 _9 o! r; T$ r
我大约calloc  每次共计大小为5K*16bits,
: J  s, U/ G7 v6 @6 U而默认配置才0x4000、需要改大。$ U" S- ~: q' `2 R# A* x
$ Y0 Q' P7 h4 a6 F4 o
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
5#
 楼主| 发表于 2015-10-28 16:14:47 | 只看该作者
/* no rts heap */
8 H6 G$ K0 \! LProgram.heap = 0;4 w! s8 O" O! W
Program.argSize = 100;  /* minimum size */9 O% \( H4 s& K# m! q  O& J
Program.stack = 0xF000;                   //我改到F000  也不行
回复 支持 反对

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

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

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2026-2-28 02:51 , Processed in 0.041850 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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