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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

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

; K3 D* l) v8 W" }% D2 e    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //256
' j1 b  F8 ?/ m2 E- S* u. ]
- `5 g1 l# |7 m6 d其他程序段。。。。。
* `+ ?' O4 Q4 I- M9 O' y! t
1 m  Y5 U1 |; v9 [& e1 z5 Z   free(x_d);
+ u& y' Q) J( n6 x3 w$ L5 r; W, g+ G4 {  o8 f8 i
使用DSP侧单独调试功能,验证动态申请没有问题,
* X+ E( P" d) b) r2 B0 N% W0 P: E0 s( ^$ B$ R2 A* ~
但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。! N. O. H- U1 J6 [$ R9 Z$ V
' s- g7 u/ V. B5 U
  ~! i! j8 S3 m( Z

4 I( ]  ~# @+ n& F/ ?6 G
; z% F/ ?8 G) P
2 w; W+ E  |6 L2 {% y# T  l1 [: |3 O* {3 H  }6 M
  f' _6 E: ^: b8 ^& Y. H$ L: _
" F  O$ ]; c: q: o6 p. J

, F0 d  u  s  ^+ u# S, g& k0 F  i1 G  J' k( ~
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2015-9-4 10:29:21 | 只看该作者
补充说明1 K6 w. s' z6 F# P
我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下
& \2 x# B2 |4 n: `$ w+ Y! r" |6 ?8 y(不过疑惑的是,为何单独DSP仿真就没有问题呢?)7 S7 o  W1 d$ R" `8 U9 z
, p. L5 B7 U/ `% e) Z6 w3 i
是不是需要在DSP.CFG中进行配置8 d7 J$ x1 `" y& K
我现在的配置为- s; S5 u( T, v2 B$ g! s
, K+ U7 l! D! t0 c# p/ o& \$ q
/*
/ G  H  h* ?* `% I/ x9 t *  ======== Operating System Configuration ========2 L) W+ Q1 A9 c( Z% \. U0 R7 x. Z9 E
*/* a+ z; E* _; O7 Y; i9 i

, u5 t6 y$ D* s) Q& e/* no rts heap */3 R4 j& E5 e% z" b3 N- [
Program.heap = 0;
7 _% b* x. Y1 n2 fProgram.argSize = 100;  /* minimum size */
) L5 T8 v4 N) i  oProgram.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大9 @: A( n$ b2 ~8 j5 K

8 g7 L/ z) t& Z7 `' D- S/* create a default heap */+ b% p2 o( Y; Y& @0 o. X' m7 d5 e1 H
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
/ z, E- F2 p: Y1 @% [, d; [var heapMemParams = new HeapMem.Params();" _0 l! w: p+ M5 ^, ~
heapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大, ]$ ]! i0 b, o/ J

6 M& j! W. s% G; X
var Memory = xdc.useModule('xdc.runtime.Memory');
! \( D. g: {7 Y+ t5 D0 v+ t/ T4 yMemory.defaultHeapInstance = HeapMem.create(heapMemParams);# u! y6 l$ j" N+ t9 ~0 @8 q1 F

9 ?' f0 a: X7 D+ s/* configure System module */
3 o- V) S) s- y: G. G( Y$ o" W* Avar SysMin = xdc.useModule('xdc.runtime.SysMin');0 r- _! t* O7 n2 ~
SysMin.bufSize = 0x1000;
3 ^; O2 L7 N2 q& \' M8 hSysMin.flushAtExit = false;! k' q6 u$ b$ }# H$ W! O$ a

" L, q$ F8 ^; Q$ G# uvar System = xdc.useModule('xdc.runtime.System');# _; o* X' P% h8 a
System.SupportProxy = SysMin;& o! ]7 x& q% l7 z$ L+ G
1 H" g7 C4 W4 i! K# D
/* configure SysBios to use the lower half of Timer 1 */- C* x  o' s% r4 y* K
var Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');
. \/ ^7 \0 w2 C! V' bvar Clock = xdc.useModule('ti.sysbios.knl.Clock');
! s/ `1 w& t( K$ v& QTimer.timerSettings[1].master = true;0 O+ N, d+ [- b( _
Timer.defaultHalf = Timer.Half_LOWER;
$ @: F7 V$ ~/ |2 zClock.timerId = 1;
4 J  C# _( m" n* t  U9 l" y- o1 Z& `4 `3 }# H
, ]8 ?0 U# e. y  i4 h# k1 h# J
/*' |' Y3 C* a+ u: I8 U- H: j  L
*  ======== Miscellaneous Configuration ========% o" D- H2 f* x# Q/ w
*/
2 d6 C& s! ]' j/ L# y/ S6 v$ E
5 G6 e* T0 G& D/* set default diags mask */
% v3 G( h  g" L' Rvar Diags = xdc.useModule('xdc.runtime.Diags');* `( _: m( i+ M5 M, j
var Defaults = xdc.useModule('xdc.runtime.Defaults');6 g2 _( V& V& N& }2 u! k) S" u+ i
3 q6 J( u7 A/ n- d, G$ V: I0 R7 t
Defaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;
3 r* P  O! g. Q. f% `/ |2 aDefaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;
5 p& i7 W9 m1 Y+ h. V/ u  `Defaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;
' }* h& b# F2 A) y8 xDefaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */
7 N0 o! t: q) n8 b* j: {Defaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */
( O) ?6 \0 H* EDefaults.common$.diags_STATUS    = Diags.RUNTIME_ON;) V4 {  j9 g, q
Defaults.common$.diags_USER1     = Diags.ALWAYS_OFF;
  }/ T& R" T3 t2 `. YDefaults.common$.diags_USER2     = Diags.ALWAYS_OFF;
$ F; [- ?) Z* UDefaults.common$.diags_USER3     = Diags.ALWAYS_OFF;# q7 m/ u- [! G6 Y; S4 o1 \
Defaults.common$.diags_USER4     = Diags.ALWAYS_OFF;! Y& `) P' }7 a6 t; A9 H( e
Defaults.common$.diags_USER5     = Diags.ALWAYS_OFF;
9 u- K/ V5 I* Y5 {; K" H! V6 NDefaults.common$.diags_USER6     = Diags.ALWAYS_OFF;
: q4 T5 ~5 P6 ?/ ?Defaults.common$.diags_INFO      = Diags.ALWAYS_OFF;/ S0 S" s# @6 c) [
Defaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;
. y& }9 B4 r0 F4 b, q- ]! g
4 J; N6 b( Q$ t: G+ f/* override diags mask for selected modules */. D6 ]4 h! ~3 i7 j( v
xdc.useModule('xdc.runtime.Main');! O! Z3 a1 x, z; w. L/ K; t; `
Diags.setMaskMeta(: b7 C& h4 q5 V5 d% X" s! |
    "xdc.runtime.Main",9 W1 B# A/ D* \. g% m" x0 K$ x& ^
    Diags.ENTRY | Diags.EXIT | Diags.INFO,
+ z2 o) q8 T8 G: Z* a. w: L% F    Diags.RUNTIME_ON+ j5 K2 z! c$ }, B  ^5 d
);
, L2 |. Z0 O) i0 ?  R) {2 a0 P0 X* w( {  t* F! I
var Registry = xdc.useModule('xdc.runtime.Registry');
( F" x1 G4 G* \7 sRegistry.common$.diags_ENTRY = Diags.RUNTIME_OFF;0 z: s  Y- b; r5 f' J4 P
Registry.common$.diags_EXIT  = Diags.RUNTIME_OFF;
  A2 U  Z7 ]( h5 QRegistry.common$.diags_INFO  = Diags.RUNTIME_OFF;
* y2 e) j3 A! i! _# b" ERegistry.common$.diags_USER1 = Diags.RUNTIME_OFF;8 x  i' G8 w* H& W

* }6 {: L" ]5 _* f3 A8 ]8 C/* create a logger instance */
6 J5 P  C) d1 A9 ]% Lvar LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');& `& w% B# e3 U% X0 C! q. }
var loggerBufP = new LoggerBuf.Params();
5 Z4 }$ \7 B3 F8 Y2 f- R0 V0 g+ EloggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */
9 Q- L! C2 J; y0 F. xloggerBufP.bufType = LoggerBuf.BufType_FIXED;/ y6 `; e5 `6 y6 @0 J6 }
1 w# D) u% E: I
var appLogger = LoggerBuf.create(loggerBufP);; r" @' V" m3 E7 _& k8 X
appLogger.instance.name = "AppLog_Core1";
! A0 F7 z7 _1 uDefaults.common$.logger = appLogger;3 |" [" v/ O! u6 C3 w. O
Memory.defaultHeapSize = 0x8192;    - F& I7 e/ n! D
Idle.idleFxns[0] = "&LEDStatus";
% L& X7 `4 @: ]  h6 x" q* b+ QCache.initSize.l2Size = Cache.L2Size_32K;
% @7 D1 R0 R2 Z4 k8 N
# b8 K) _7 Z7 ?) 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 */) F& y# A# c* z; L& D( N  w3 ?
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
6 g9 k( f0 D( F8 C* e, Lvar heapMemParams = new HeapMem.Params();+ ^  t. J) ?7 z
heapMemParams.size = 0x4000;
/ a8 L% `6 m* i' x# ?  R3 d, E
var Memory = xdc.useModule('xdc.runtime.Memory');
( H2 d8 n! \$ `Memory.defaultHeapInstance = HeapMem.create(heapMemParams);  Q" T1 [8 H1 g9 u" R; W& o' q9 U; ~# ]

! j) Z. O, B3 D% Z- w& o, q. H我大约calloc  每次共计大小为5K*16bits,- Y/ p; U+ b4 J* T
而默认配置才0x4000、需要改大。
6 Z3 L- t4 H: d, R* ]
3 Z1 j- y( z7 k  y. f
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
5#
 楼主| 发表于 2015-10-28 16:14:47 | 只看该作者
/* no rts heap */
: `( i0 O( \, q$ pProgram.heap = 0;
6 c; C4 E9 S1 iProgram.argSize = 100;  /* minimum size */
- y6 e- W4 I/ g) D2 g/ jProgram.stack = 0xF000;                   //我改到F000  也不行
回复 支持 反对

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

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

使用道具 举报

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

本版积分规则


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

GMT+8, 2026-1-12 20:59 , Processed in 0.046309 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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