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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2015-9-4 08:33:31 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
创龙工程师你好,我在OMAPL138单独调试DSP程序(使用SYSBIOS)时,在任务中使用calloc函数动态申请内存,用完后free,类似如下结构
9 O0 W/ u# I) m8 h! d5 M' a3 U/ ~1 S, X6 v; |$ h
    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //2565 H; {# Y8 O; |- A( y8 W. g* [

1 n0 I, Y% {  m/ G) v# Y6 t1 Q3 r其他程序段。。。。。
- T3 ^5 {% D; f' }$ V8 u9 t ) B' g0 j# Y1 {4 b/ ~7 x
   free(x_d);
, f0 J9 w' ?3 G7 Y+ y* }
" q0 b6 ]+ O0 K- s: ]( z使用DSP侧单独调试功能,验证动态申请没有问题,9 Z* {3 @% d+ o# o- W3 @
+ X9 A0 h6 p* ~, l5 t
但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。
5 y7 B6 G! H: P! e" B: x) U
3 u, s) m* s& s. Z

9 C7 Y: A+ D3 l8 F
/ i' i7 H( {4 O' |5 z6 @! }- w
* N0 ~6 r1 r& n9 F: E! v# f  D+ I2 s! v/ @/ g

$ i* ^& R8 s% m
! f6 W1 Z; P8 H( q
, `" i0 }$ V6 C& ]7 K6 Q3 e9 f$ I: j& `( p+ p, \- E. i- _' A( K
9 _8 G8 G6 u* [& l( H( C
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2015-9-4 10:29:21 | 只看该作者
补充说明+ p, t) P% F4 N/ }1 M
我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下
4 d. L/ f' z# O. |" f. u( I(不过疑惑的是,为何单独DSP仿真就没有问题呢?)* s& B* W, o) H, Y6 S

: V, A/ {4 Z$ C% _9 ^7 p3 G是不是需要在DSP.CFG中进行配置8 Z  }  E1 g# E9 h: l7 }
我现在的配置为% F4 X2 _9 C8 ?: Q
2 [- c  s" s, \* E( E
/*$ W' g+ \. s2 Q% C7 \
*  ======== Operating System Configuration ========0 A2 q6 l8 k2 j2 b
*/
+ r( o& A  M8 }  K' i+ l0 s/ l. j) @& X4 M* B7 E) N2 P
/* no rts heap */
9 E+ \. X% ~! l3 k4 ~+ Z. _0 hProgram.heap = 0;
& Z& K3 c6 K% M) L5 WProgram.argSize = 100;  /* minimum size */5 M" x) f! B( T4 \
Program.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大
8 e) Z4 [3 L) S5 N' H
* f+ l' y! I3 f: O; e) R/* create a default heap */4 U0 j/ f2 o& w; Q& F
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
" S) l( N2 ?6 z9 S4 {var heapMemParams = new HeapMem.Params();
$ v3 f  p" Y6 WheapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大
8 J* m6 k* }* k! c! n
3 M7 P* i/ r' k# r
var Memory = xdc.useModule('xdc.runtime.Memory');: S- T, v& m6 b: z
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);
1 Y2 e; p% u  z* R9 ^1 i5 _! I/ |1 d4 m
/* configure System module */, @2 \: g7 Y7 w2 y* I
var SysMin = xdc.useModule('xdc.runtime.SysMin');
7 Q6 t- C/ C" }6 T3 MSysMin.bufSize = 0x1000;& ?# D) j: t8 \+ \4 F; v
SysMin.flushAtExit = false;( f- z- V7 F8 J+ g* H" q  u

( e  b/ |* |" R- G) evar System = xdc.useModule('xdc.runtime.System');' i. `; f1 S  T9 _9 t$ d
System.SupportProxy = SysMin;
; O( U: Z9 Y  q) Y. ~
/ |6 N9 u# j) |* b+ Q/ L2 w& W/* configure SysBios to use the lower half of Timer 1 */
# r7 e' W( p9 G8 [var Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');
# _) V' d: M. I+ C0 d3 ^var Clock = xdc.useModule('ti.sysbios.knl.Clock');
/ P  n) |- ^2 D0 k1 ^4 ]* nTimer.timerSettings[1].master = true;
, {$ U+ z8 C3 X& [$ N1 q! M0 WTimer.defaultHalf = Timer.Half_LOWER;3 W/ j* Q( h  R4 S: p! G5 M
Clock.timerId = 1;. y) s& U1 n" P  t* e

9 o2 j* w8 j4 n' O: N  w
, G* s$ c5 w1 m8 \/*" ~! i/ E  F" o
*  ======== Miscellaneous Configuration ========
3 R5 J/ U* `/ O */' g: [6 O9 t" E) u; M4 ?& e/ P
, u- T) O" R4 f, X$ d) C
/* set default diags mask */! e1 m6 q- S5 q8 W) g% Q5 Y
var Diags = xdc.useModule('xdc.runtime.Diags');* M& Y: M, O1 S
var Defaults = xdc.useModule('xdc.runtime.Defaults');% j& n! @/ P( |7 O& S, X0 A( q
- @. H. z4 c* h& h
Defaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;5 j, M8 r1 C0 T" t) f( a
Defaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;8 b! g' L: \: f$ D: F; [) F, D
Defaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;: A" |! Y: a) e
Defaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */
  _! S# ~! l* q, p1 O: ^6 H# ADefaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */
; ?  v1 b' {% m7 sDefaults.common$.diags_STATUS    = Diags.RUNTIME_ON;1 O" C9 S0 u4 d- V: E% q
Defaults.common$.diags_USER1     = Diags.ALWAYS_OFF;
, I/ i! V" J" XDefaults.common$.diags_USER2     = Diags.ALWAYS_OFF;* R: W* J+ q1 o: H
Defaults.common$.diags_USER3     = Diags.ALWAYS_OFF;
" U- i8 R' g& \4 i" I3 _Defaults.common$.diags_USER4     = Diags.ALWAYS_OFF;% q$ Q8 s- i/ `' A. A1 w6 n
Defaults.common$.diags_USER5     = Diags.ALWAYS_OFF;
+ g/ J( L4 d$ ]7 v7 @Defaults.common$.diags_USER6     = Diags.ALWAYS_OFF;
. w# q( |5 N( K( A/ P9 A2 YDefaults.common$.diags_INFO      = Diags.ALWAYS_OFF;
6 H: v$ R5 c+ e$ V7 N1 LDefaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;
3 H. P, @5 U) w+ Y# r: B; P& G# c- J) X# F) e( n5 B5 o( @* j4 g# q4 H
/* override diags mask for selected modules */
: i& W, I8 ]$ Hxdc.useModule('xdc.runtime.Main');
* ]4 z1 O$ i( ^8 y: bDiags.setMaskMeta(
3 V3 w: W: s' I" ?    "xdc.runtime.Main",
% _# f$ ]1 `. S, m0 `; O1 X    Diags.ENTRY | Diags.EXIT | Diags.INFO,
* N7 i  }& W7 r    Diags.RUNTIME_ON, L* x. B5 |1 d% O2 v9 C
);
8 E: }6 ]9 I# ?5 [" H
) r8 v# {5 B: W+ }var Registry = xdc.useModule('xdc.runtime.Registry');
7 ^  M" M( x" y6 I' E! \Registry.common$.diags_ENTRY = Diags.RUNTIME_OFF;
2 k( ^: p+ T6 b- O# N' f) P" oRegistry.common$.diags_EXIT  = Diags.RUNTIME_OFF;
" D( r; z8 z, u0 ORegistry.common$.diags_INFO  = Diags.RUNTIME_OFF;
) |- s' r  w! P7 i2 g$ R6 h5 pRegistry.common$.diags_USER1 = Diags.RUNTIME_OFF;
: b9 h7 c, o) \! }8 s& B
) r" ]/ x( e+ y/* create a logger instance */
! ^) I2 x% D0 I+ Lvar LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');
. G6 Y" L; g. n* I. evar loggerBufP = new LoggerBuf.Params();
) y( b9 F5 G& R# \loggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */- B- W: t  [8 X- H: _/ A9 f
loggerBufP.bufType = LoggerBuf.BufType_FIXED;
6 f" H- G8 m) k2 J! ^2 W" J# d  L
6 F" C# m* J+ k) O: D& ^) fvar appLogger = LoggerBuf.create(loggerBufP);
0 l- ^) B& a# w: J2 aappLogger.instance.name = "AppLog_Core1";5 a3 p2 `5 B4 ^- k4 ~- F
Defaults.common$.logger = appLogger;
1 X& H% g  h6 S8 G7 kMemory.defaultHeapSize = 0x8192;   
( y( r5 p) j' F1 ~9 CIdle.idleFxns[0] = "&LEDStatus";( H: I+ \; n; _% j; {- Z
Cache.initSize.l2Size = Cache.L2Size_32K;
5 N+ D* L4 E1 [" ]0 D4 O6 b7 D# @2 K7 Y# I
回复 支持 反对

使用道具 举报

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 u7 P: c. z1 x! |- P2 r% ~. Svar HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
: r+ _: y) Z: i. K9 e& c5 t; c; T. nvar heapMemParams = new HeapMem.Params();
  I4 L0 m* y3 f2 Q( K2 R5 P' kheapMemParams.size = 0x4000;( m/ s6 Q9 J& `9 P2 E" ^

- k& P, i$ H" [( w4 W9 nvar Memory = xdc.useModule('xdc.runtime.Memory');$ d- q1 J: V- C, Q: c5 r
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);
# d' X$ d8 b9 d' Y; r! f
) E0 x3 q# S, I! I3 |& O我大约calloc  每次共计大小为5K*16bits,: ^6 V* H+ |  V" O0 `- L! L1 e
而默认配置才0x4000、需要改大。2 a7 T! O9 L% }: ?" W

& N4 O- R# Z; Q. O
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
5#
 楼主| 发表于 2015-10-28 16:14:47 | 只看该作者
/* no rts heap */
( p+ V1 U0 d& x; j2 f& `Program.heap = 0;
" M$ _1 F, R( {1 z! A, J) i9 {Program.argSize = 100;  /* minimum size */
  R3 D7 G1 y2 [  A1 KProgram.stack = 0xF000;                   //我改到F000  也不行
回复 支持 反对

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-12-10 04:48 , Processed in 0.060174 second(s), 23 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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