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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2015-9-4 08:33:31 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
创龙工程师你好,我在OMAPL138单独调试DSP程序(使用SYSBIOS)时,在任务中使用calloc函数动态申请内存,用完后free,类似如下结构- i4 O0 [5 i& ^: @$ b
8 j: x- j8 r1 _. p" ~& u9 L
    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //2564 Y( q& g# l$ X
+ x" f) G8 M5 Q3 u) F' K/ K
其他程序段。。。。。2 l' w6 _0 V' y

& m; t: e% t" ?! }6 _" h, R2 M   free(x_d);
& T. I" F% O. f+ i% R# H% n$ s# E$ r8 |0 V! I9 R
使用DSP侧单独调试功能,验证动态申请没有问题,
/ F9 k; w' l7 v7 K9 J. ]) p" f  f9 H4 g- Z7 Z; t: d
但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。) S0 n+ y- j& W4 ]
4 ]9 a- I+ p+ S8 Y% O+ q2 ^
0 t* ?" t1 d. ]1 I8 @9 j

) y1 [( M. @7 }7 \, G$ q* ]- B) K% r! _! w
  s$ s: F/ E9 L
6 y* o5 ~- S; ]

$ l5 I; }% p/ J6 p2 |. J& Z) h1 \. X7 X) |1 D& r' K8 j: N
+ Q* c) L  E0 y
4 r1 u7 ?! E7 {* q5 i
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2015-9-4 10:29:21 | 只看该作者
补充说明
0 b. O/ W; p: w1 E1 X我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下$ ]) h6 g3 l5 `1 q
(不过疑惑的是,为何单独DSP仿真就没有问题呢?)
; x5 k' T" z) X' r

4 m3 _4 Y3 s. M0 f* _% t; G是不是需要在DSP.CFG中进行配置
" n2 s6 ~' q$ ~+ o' A) I我现在的配置为
: q" l4 [- A3 A* K  F' z/ Y
  k  q" R0 h) F. D9 X/*0 i6 J' M$ j0 y( P
*  ======== Operating System Configuration ========/ v: g9 H0 C& Z( x) Z
*/- y( p! o5 A# W. ?4 `
0 j. }6 l% ~$ s( f( F- ?+ t! M
/* no rts heap */
0 g2 {* D  O0 L% c" m2 W# C# B; bProgram.heap = 0;
7 q; q- I: n& @# GProgram.argSize = 100;  /* minimum size */
, l, D  u3 h# V9 y* V5 m$ fProgram.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大' g- V2 K% Z8 b8 y* c

8 t% K6 t/ u8 [6 E4 e/* create a default heap */
0 }1 m* ?) C- F- N+ T5 jvar HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');2 t4 C2 V% Q8 e
var heapMemParams = new HeapMem.Params();+ c% t0 W1 M( f& b
heapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大
9 N( O! w/ z3 F4 X. H+ N" G" ~+ Z. G, b" ^2 M
var Memory = xdc.useModule('xdc.runtime.Memory');6 c' |8 F* C) Q! C  q, r
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);3 m% Z( ]2 b+ g: R4 ]0 O4 v

6 E' l, ^4 P" W3 p/* configure System module */
& B: V. L- Y$ U9 ~; Zvar SysMin = xdc.useModule('xdc.runtime.SysMin');
# i/ B1 q- K1 q/ _  b7 R: ISysMin.bufSize = 0x1000;
3 V" b! Q7 e) z- l, j: c& P/ VSysMin.flushAtExit = false;$ ~1 I" ]1 |9 a/ e
/ r: [! ^/ L8 R) L, }5 O
var System = xdc.useModule('xdc.runtime.System');
" {* l9 n1 n2 t* c: D" u6 A! r2 MSystem.SupportProxy = SysMin;
# r, D1 J4 V; V, m% j
9 X' S) ?7 M9 a$ P8 n/* configure SysBios to use the lower half of Timer 1 */
+ W& w+ m. K4 G* s/ }, h1 A( kvar Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');2 A" A+ a) V; n+ D: H
var Clock = xdc.useModule('ti.sysbios.knl.Clock');+ F/ H( I1 o+ t
Timer.timerSettings[1].master = true;7 _3 U9 H, W2 I# \+ [
Timer.defaultHalf = Timer.Half_LOWER;7 |2 s$ j: O" C- O
Clock.timerId = 1;
$ q  l0 e9 E( e
- V7 N- K& m8 K' b# l8 J$ t
* b. \, g5 G6 r9 L- i# I/*
3 s5 n6 `6 s0 g( W *  ======== Miscellaneous Configuration ========
1 I1 B8 V. n6 G */
' U# V/ f9 K9 U+ ?! t9 }. i2 ^$ U$ u9 |7 X9 s
/* set default diags mask *// f1 w1 N& T2 e# [. c  N$ q
var Diags = xdc.useModule('xdc.runtime.Diags');
2 o8 x- O2 G& z9 [2 Bvar Defaults = xdc.useModule('xdc.runtime.Defaults');0 ^4 p6 e) {3 m$ ~
' {: c' |  x# O. y
Defaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;+ o$ m9 f; j) W) J% ^% u
Defaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;: `7 C, t: C& v3 J: ?
Defaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;
% u; h: t) B2 {0 c3 VDefaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */
/ h* t* q) t" d2 uDefaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */
, L5 @# a& q/ X# q1 xDefaults.common$.diags_STATUS    = Diags.RUNTIME_ON;
1 ^; q2 Y1 k# E/ `1 T" QDefaults.common$.diags_USER1     = Diags.ALWAYS_OFF;! Z' m% Q: Z" F( H) Y
Defaults.common$.diags_USER2     = Diags.ALWAYS_OFF;
) t1 k( D+ c" G) K" a- \' d5 JDefaults.common$.diags_USER3     = Diags.ALWAYS_OFF;
3 z9 Y' A( r$ d4 ]8 jDefaults.common$.diags_USER4     = Diags.ALWAYS_OFF;
2 u8 P$ p0 ?3 B; ^Defaults.common$.diags_USER5     = Diags.ALWAYS_OFF;
& n, v( ?3 g6 }/ S2 uDefaults.common$.diags_USER6     = Diags.ALWAYS_OFF;7 r+ r" T7 t6 S% T  {* Z
Defaults.common$.diags_INFO      = Diags.ALWAYS_OFF;
- a) n4 ?/ z% Q7 B( d2 y& b) O5 CDefaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;1 j: u3 u9 K+ y) ~( a
2 X6 S" N3 i% X
/* override diags mask for selected modules */2 D) P& j( W6 t9 _% `( u
xdc.useModule('xdc.runtime.Main');
) K4 R# m! s' P0 O; |3 aDiags.setMaskMeta(
! s; W: T: d0 I4 S8 u+ q    "xdc.runtime.Main",- ?, @# B& O- [2 @) f# l0 F
    Diags.ENTRY | Diags.EXIT | Diags.INFO,
1 K9 ]: x; c  {/ y  V4 ]& l    Diags.RUNTIME_ON
4 N" \: v& Y/ e( j) B);
) t1 y; r7 J* m5 K
" l$ V& G3 q' c! Bvar Registry = xdc.useModule('xdc.runtime.Registry');! w1 ]& e+ j! l5 v: [+ g
Registry.common$.diags_ENTRY = Diags.RUNTIME_OFF;+ _" o/ n8 f. k' n7 f+ T0 S
Registry.common$.diags_EXIT  = Diags.RUNTIME_OFF;! A6 @  |0 S* o; T9 q
Registry.common$.diags_INFO  = Diags.RUNTIME_OFF;
- b# ^$ i3 h9 h- z" ARegistry.common$.diags_USER1 = Diags.RUNTIME_OFF;* Q: [1 C% G( z6 I" V& Z: L

* @8 A+ S4 M' v( h( ?. H( }/* create a logger instance */+ E! a  e9 v6 Y
var LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');
/ z8 _6 v9 ?2 Fvar loggerBufP = new LoggerBuf.Params();
! L0 B0 A& ?( ~" T5 A" b) dloggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */
) T; y8 T7 C5 @3 [5 ~0 [loggerBufP.bufType = LoggerBuf.BufType_FIXED;
- C4 \! [1 u" \* M) v- P
) |1 G0 M2 m, ?3 [5 i# mvar appLogger = LoggerBuf.create(loggerBufP);2 N4 H$ [5 E' a
appLogger.instance.name = "AppLog_Core1";
5 |' E5 {4 |5 H6 tDefaults.common$.logger = appLogger;
. f5 m. E( }, k# {7 kMemory.defaultHeapSize = 0x8192;    0 G5 g6 ], X8 `( M, U
Idle.idleFxns[0] = "&LEDStatus";/ I) X9 N& a2 h1 l: E5 [/ O% b
Cache.initSize.l2Size = Cache.L2Size_32K;) P! F9 d+ `) a5 t6 K
) D5 t$ R$ G2 M% v* 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 */
5 |* a" L1 V, j2 [- Uvar HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
2 p3 {: I& S- _7 P$ Y# @var heapMemParams = new HeapMem.Params();
7 r% M. Z) R: h- @$ Q' {. sheapMemParams.size = 0x4000;) E$ Y- J8 u7 _6 g8 j
3 r7 |! Y" t2 a
var Memory = xdc.useModule('xdc.runtime.Memory');  ?  H+ a: W% |$ y0 j
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);, t" T+ w8 A  [! T. G
$ g! I+ n0 C5 [( c: ^
我大约calloc  每次共计大小为5K*16bits,/ z: M5 S7 B$ L, g
而默认配置才0x4000、需要改大。. _& c' q$ c3 \, f7 ^9 C; _
6 k  ^. V/ A5 }7 \8 @( L5 F
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
5#
 楼主| 发表于 2015-10-28 16:14:47 | 只看该作者
/* no rts heap */
  M7 p7 h( K- u+ {% z: GProgram.heap = 0;0 [8 `* k$ d8 O" r; H: t; |
Program.argSize = 100;  /* minimum size */
; F: X5 U7 U) @3 N0 h- H3 RProgram.stack = 0xF000;                   //我改到F000  也不行
回复 支持 反对

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-12-20 22:01 , Processed in 0.047035 second(s), 23 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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