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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2015-9-4 08:33:31 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
创龙工程师你好,我在OMAPL138单独调试DSP程序(使用SYSBIOS)时,在任务中使用calloc函数动态申请内存,用完后free,类似如下结构
. s" h% Z/ F' j7 d
0 B" Q+ a; W9 |: T4 K* B    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //256
3 _, J) C0 g; ^3 l3 ?  z  \  h; t* ~6 G2 E
其他程序段。。。。。; X1 F9 n- \6 u; V

- w! y8 u0 ^+ E7 b2 W/ X7 ^   free(x_d);& v2 e3 C, P6 f5 n9 t% b* q) D2 h
8 \6 F( q/ g6 f% T8 X% ?
使用DSP侧单独调试功能,验证动态申请没有问题,
8 q+ f0 O4 S# h8 q  P& Q4 S% l5 O, ^- l
但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。
/ ^8 }9 d4 W3 Y6 e
/ K3 u7 |9 s9 t$ u9 h
. G8 Q7 o. ]( n* U4 g0 j* D& M

' u/ D2 T- T# f  l. n8 a8 J) b
& |9 \$ t9 h0 d% H7 p# P  P* @" [

) E. a% {: x2 C6 }4 F
; \2 w1 e: w' b) J+ Z, J. |( {/ I
) l1 x0 w* ^) y! P
/ |. f, t0 ]9 ^' {5 \  u& T0 O& G* Q; ?
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2015-9-4 10:29:21 | 只看该作者
补充说明, P) e2 k6 K0 H" z; j! e
我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下
: m5 `) }+ D; S7 X- `( d) B* C(不过疑惑的是,为何单独DSP仿真就没有问题呢?)
2 m* X+ d# \. V4 q2 _

: i" k6 H& T+ y, y- h9 z是不是需要在DSP.CFG中进行配置3 r" B* R+ f+ G% M7 P: Z
我现在的配置为  H% G% V& V/ b% t$ F5 z8 U

+ m6 j5 u' E, D! u/*
% L; c( t$ a5 F* w3 K *  ======== Operating System Configuration ========
% c% h3 O% Z2 \* z3 s! w */% Z8 x) I/ {; L/ @! x, n

/ ~8 D  }/ g0 u/ R9 d0 e9 k/* no rts heap */
* T/ z8 |8 Y, ~+ m, \3 LProgram.heap = 0;2 m6 R# Q, V' |9 Y9 }6 K8 Y4 u) o9 f" |
Program.argSize = 100;  /* minimum size */6 J. U' o" M( Q" |! K
Program.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大) y' F% ]! b4 D" g5 `. c$ }
$ @  ~& A! {" m3 @7 |& {1 S  N
/* create a default heap */" W! O3 U, C. J; ]5 w1 e
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');3 p3 h6 @0 h6 p$ s$ S
var heapMemParams = new HeapMem.Params();
! A1 \5 I  j6 i2 B; U4 p. CheapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大
7 J9 \$ l1 L# i( Z( ~5 O# ]  A; ~! C6 R4 j5 U; Z8 [
var Memory = xdc.useModule('xdc.runtime.Memory');
9 g0 `$ {$ U  w6 T1 ?: aMemory.defaultHeapInstance = HeapMem.create(heapMemParams);
! W5 C+ d2 c/ ~! W; L: w' P. X+ x! Z% @, I5 J& g+ ~; G  _3 Z
/* configure System module */1 V* y' Z. ~4 o7 v+ d1 d) |; h. ^
var SysMin = xdc.useModule('xdc.runtime.SysMin');& e1 X  R7 r5 D# c
SysMin.bufSize = 0x1000;' Z0 Q6 f: }& X
SysMin.flushAtExit = false;
% l5 I; ?* q( Q  o/ J! M" ?7 k3 X1 Y% n. f) |6 P
var System = xdc.useModule('xdc.runtime.System');5 y, A4 R& Z  l8 R
System.SupportProxy = SysMin;$ d1 o( }0 w6 w7 D/ D& P8 Z8 n6 `2 K% V

$ J) u) V. [2 I7 ^$ Q2 K/* configure SysBios to use the lower half of Timer 1 */
4 G; l+ U% d6 a& V' {7 K& lvar Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');! o2 L, H2 d9 k0 K# f( ^+ s: u
var Clock = xdc.useModule('ti.sysbios.knl.Clock');
' ~9 B: y7 r4 K& G( G$ wTimer.timerSettings[1].master = true;, o! F9 B3 z* E% m
Timer.defaultHalf = Timer.Half_LOWER;
& P1 n; E7 b% Y5 TClock.timerId = 1;( B8 b4 o7 Q3 I" j) D
" D9 }7 u; U$ i# X) B/ ^( ~

# k8 D4 U! {  _& H0 T+ E/*
* k) e; K" p) |7 `& E- u* Z *  ======== Miscellaneous Configuration ========8 @6 n! `! h. ~+ x' f
*/
% C/ I: n* r# C( \! j& r: ?+ G: U6 y7 d1 g  t6 G6 ~& Y
/* set default diags mask */# l, D* I5 ~* i6 g7 d
var Diags = xdc.useModule('xdc.runtime.Diags');# k9 @: V( _5 l  x8 K
var Defaults = xdc.useModule('xdc.runtime.Defaults');
; R/ w) h- _* R- E6 p# f9 t; y3 C% r# Y
Defaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;
8 f0 @$ c2 z* N1 e2 U5 eDefaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;
6 o# f" m6 b/ N* S  g  X" n7 kDefaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;
# R9 _3 S' Y* |Defaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */7 S- a3 J: R/ m4 s% o$ @$ a* W
Defaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */1 X: ~" U2 Y& C8 q6 A# K
Defaults.common$.diags_STATUS    = Diags.RUNTIME_ON;) [/ B% D' l- n3 m  G
Defaults.common$.diags_USER1     = Diags.ALWAYS_OFF;
7 P2 Y6 w* V! G1 `Defaults.common$.diags_USER2     = Diags.ALWAYS_OFF;
: |: t8 m0 ]" w& V! u- C9 E# RDefaults.common$.diags_USER3     = Diags.ALWAYS_OFF;
! W2 e0 D( \3 o7 o- GDefaults.common$.diags_USER4     = Diags.ALWAYS_OFF;
$ n0 d7 }0 f! ^7 d8 m; E( rDefaults.common$.diags_USER5     = Diags.ALWAYS_OFF;
( {: D. H+ I9 iDefaults.common$.diags_USER6     = Diags.ALWAYS_OFF;
3 @- O4 u2 ]/ W. F0 hDefaults.common$.diags_INFO      = Diags.ALWAYS_OFF;% _) h1 ~- F* T2 W4 T
Defaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;* i0 T* ~8 X  o5 c0 I2 {
# O  U% [) y% d& `
/* override diags mask for selected modules */) H! T1 e/ H3 M5 F! g, v- K& r
xdc.useModule('xdc.runtime.Main');: Y- T- b) Y1 q4 [$ \; G; x/ h7 w! e
Diags.setMaskMeta(2 H. x4 D8 d4 B
    "xdc.runtime.Main",
" |- t# b# X7 B8 j7 L" c8 K! b; i    Diags.ENTRY | Diags.EXIT | Diags.INFO,
8 q1 h2 @$ e" N( d' e- j    Diags.RUNTIME_ON
) O' V5 U* e& H( [( i);
( R% Q( ^2 z1 f6 ?# C/ ]- Z: L) w% f4 S: {
var Registry = xdc.useModule('xdc.runtime.Registry');
" ~9 |* ^- q+ h8 R) k6 e% }Registry.common$.diags_ENTRY = Diags.RUNTIME_OFF;
' J! [6 {* `: IRegistry.common$.diags_EXIT  = Diags.RUNTIME_OFF;) d) K! a7 h) f4 s, U, R
Registry.common$.diags_INFO  = Diags.RUNTIME_OFF;
& j" |. {- R' p0 ^! u. c! Q$ FRegistry.common$.diags_USER1 = Diags.RUNTIME_OFF;4 v& }/ a5 ?" a- [4 b- D) I( o

- c/ e8 a3 B% D$ [: Q& o' H+ W/* create a logger instance */
2 q# \7 m( q5 l# @' {  @) D2 Bvar LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');8 Q+ ?) Q) O  d
var loggerBufP = new LoggerBuf.Params();- V+ e* j# o# Q6 v2 @: O* U. `
loggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */: S6 e; A+ f) B6 O# l6 x2 C, z
loggerBufP.bufType = LoggerBuf.BufType_FIXED;
" g0 J0 m- x, x* R- I/ V- ]- |
" b( y3 p3 U- }9 evar appLogger = LoggerBuf.create(loggerBufP);
8 U0 U) ?" n5 BappLogger.instance.name = "AppLog_Core1";
/ {; @. _4 [2 QDefaults.common$.logger = appLogger;
+ M& ~$ U8 K4 ~8 eMemory.defaultHeapSize = 0x8192;   
/ N; [$ y) q; u/ z7 t, ?Idle.idleFxns[0] = "&LEDStatus";
8 G/ N# D- H5 [% I7 F9 k8 }9 @# \# pCache.initSize.l2Size = Cache.L2Size_32K;( l6 @2 w- D1 y  c) n

3 N/ b( K+ x7 U: m
回复 支持 反对

使用道具 举报

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 */
% c$ ~# Y: e3 f7 avar HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');" ?* S! k, @  b+ [8 U
var heapMemParams = new HeapMem.Params();
7 d$ ~' }; o' L4 q3 xheapMemParams.size = 0x4000;0 `+ L6 u0 h  A$ e% t4 ^

9 E2 E1 O8 o4 V: kvar Memory = xdc.useModule('xdc.runtime.Memory');
2 o% O0 d( `0 _4 H. sMemory.defaultHeapInstance = HeapMem.create(heapMemParams);
8 q7 a) E) n" T2 }: b7 ~" K; C" X
7 V+ H1 G5 W4 {. I8 [! i我大约calloc  每次共计大小为5K*16bits,8 B5 A7 `* o6 N6 V' c8 e
而默认配置才0x4000、需要改大。" B: c: v* n" q. |/ N
+ G7 L& T6 X3 G
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
5#
 楼主| 发表于 2015-10-28 16:14:47 | 只看该作者
/* no rts heap *// n9 d9 D& Q8 K0 f- d
Program.heap = 0;: l/ }3 U. Z, T- V; B' U
Program.argSize = 100;  /* minimum size */
4 H* e1 W' i# _) B: c; LProgram.stack = 0xF000;                   //我改到F000  也不行
回复 支持 反对

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-10-16 09:06 , Processed in 0.043109 second(s), 23 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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