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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2015-9-4 08:33:31 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
创龙工程师你好,我在OMAPL138单独调试DSP程序(使用SYSBIOS)时,在任务中使用calloc函数动态申请内存,用完后free,类似如下结构
5 `% Z0 m6 E! v( N+ x/ D4 r8 K4 o; i0 N! C( z/ P$ K% c) D2 W. L
    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //256+ y2 y, d, M: P$ ?- \# ]
4 Z8 Y0 H  j* S1 y- V, _
其他程序段。。。。。
5 m: r. p+ M3 d/ I% Q* l8 ~7 d$ a+ a
' q" _6 P2 D7 w1 Z5 c( K+ g+ b   free(x_d);
. Q  o  k5 a9 d4 s* G7 x: U" o& E, ^3 e$ y. @8 Q( f  P$ h
使用DSP侧单独调试功能,验证动态申请没有问题,1 R% \8 O4 ]7 Q3 F8 ]5 j' j
0 V* Y: Z1 P6 Q0 [( ~4 j
但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。) ?+ r  r, V+ [7 k3 M% S3 S
# `3 c2 o& v) j  ^: X  Z

, f  f/ c! A3 Y+ s
' x( K* c* l+ n  W" j+ v! i. F, S9 j- o

" K7 h$ f7 v3 i1 S5 x+ |& }8 q
2 K- b: s! I8 I2 T! I5 k
5 u: Y) M7 M/ X( N' C/ C3 O: r: w* q* R  X, }$ H9 e3 t0 ?) d

2 e' L8 j0 G6 i* m" `& s. z0 S2 v
- v5 }% v) E1 @' T
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2015-9-4 10:29:21 | 只看该作者
补充说明
3 h# H/ n+ H" v我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下
1 M0 b6 [) M( E! q2 ]+ t4 s  J- V(不过疑惑的是,为何单独DSP仿真就没有问题呢?)
) |# h) [6 C2 \5 `' \- X
0 f2 K7 m  [$ C: C- J6 S
是不是需要在DSP.CFG中进行配置
3 H; R5 G) W: d3 y8 t3 R0 ^我现在的配置为: d+ f. A8 J/ i
) t# x( C9 @( n" X, R
/*6 p' S8 o& i9 {8 C3 k" {/ @7 {
*  ======== Operating System Configuration ========
$ b* _, T5 z! A; x */
0 B1 e+ U; \- R, @
: `6 X; G/ H0 Y) N1 J/* no rts heap */: w# V* A& X' b' z+ {2 g- J1 ^
Program.heap = 0;
! F8 J6 R% Q' O8 `7 ]& m2 xProgram.argSize = 100;  /* minimum size */
: D7 V8 u5 T8 j+ }% |1 e! bProgram.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大
* a: ]7 X4 @9 W
6 W+ N$ n& W: e: {/* create a default heap */- \6 M& z+ ?6 R% ~. `
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
1 T/ G# Z& v5 x% q9 lvar heapMemParams = new HeapMem.Params();
+ W: J6 T" D* K4 eheapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大- `: H: E" k1 i

# v9 k2 [) B+ }0 {0 U7 o2 }: w
var Memory = xdc.useModule('xdc.runtime.Memory');
0 D1 T) }! O" Q  `# R8 @* KMemory.defaultHeapInstance = HeapMem.create(heapMemParams);
; z& ?8 A$ y/ \; K7 z& H2 z! p. ~+ r
/* configure System module */
  S% ?, [- ?, q2 \: t1 ~var SysMin = xdc.useModule('xdc.runtime.SysMin');8 p: Q! i' U, l& @- g% a) x0 L
SysMin.bufSize = 0x1000;# i$ G6 W0 X$ J% [* q8 a( E
SysMin.flushAtExit = false;
" g3 K/ I9 q5 J' }. i
: s+ l& V, Q0 q6 H$ nvar System = xdc.useModule('xdc.runtime.System');" I6 b& K( b# i9 U5 M) ^8 D
System.SupportProxy = SysMin;2 Z& Y- Q+ n# i+ }# N& U3 z/ C
/ @; d  |6 x( v; F1 \% E6 s1 h
/* configure SysBios to use the lower half of Timer 1 */
3 t% \* M6 v4 D" Y6 Pvar Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');
) g9 v4 T- U. H5 Zvar Clock = xdc.useModule('ti.sysbios.knl.Clock');
/ O9 t1 H0 B9 A% }9 ATimer.timerSettings[1].master = true;3 h+ d2 s4 b: d! N& T
Timer.defaultHalf = Timer.Half_LOWER;: f' V0 d. g1 I; l5 ~
Clock.timerId = 1;- w+ u2 ]* l$ [) f- w7 k  T
* G! T" Q& G2 h

! T. M) m$ b" P/ X  [' [/*
" O! z( Y' x. W( C6 V/ N' C *  ======== Miscellaneous Configuration ========2 S) \& K6 d$ L4 k2 O
*/( C: O* K. Z2 y: s8 w

7 A' `0 s  d* Z3 g3 k6 w$ [4 V/* set default diags mask */; n* J) d: }0 @! [; B# h
var Diags = xdc.useModule('xdc.runtime.Diags');
4 b; f  P. e! a5 ?5 vvar Defaults = xdc.useModule('xdc.runtime.Defaults');: g0 B. [! s  W$ G! [0 @* I/ [
' |7 g7 T8 `& ~( ~5 t- ~! K  o+ F( w
Defaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;
2 d% O7 C- `8 q( aDefaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;; z! ^# x( t1 r& O9 D0 R6 F
Defaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;
  R9 G/ k, l3 J# Z; x3 L3 }4 `Defaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */4 K0 P; |8 g4 n$ ?% P
Defaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */0 e% G+ T& j+ u$ u( y/ W+ m1 l
Defaults.common$.diags_STATUS    = Diags.RUNTIME_ON;
0 N; c; Y# n5 V$ g) q3 {' s" EDefaults.common$.diags_USER1     = Diags.ALWAYS_OFF;
9 ~& c1 D( J& m( q% h5 ]Defaults.common$.diags_USER2     = Diags.ALWAYS_OFF;- G5 @# A: L8 S' G' K/ v  i
Defaults.common$.diags_USER3     = Diags.ALWAYS_OFF;" p7 f" i" {3 X6 w
Defaults.common$.diags_USER4     = Diags.ALWAYS_OFF;3 [& A( U5 u+ B$ p* S$ b2 k
Defaults.common$.diags_USER5     = Diags.ALWAYS_OFF;  l2 q+ L9 e: d0 Y/ c" o
Defaults.common$.diags_USER6     = Diags.ALWAYS_OFF;& g" q; O4 i% R
Defaults.common$.diags_INFO      = Diags.ALWAYS_OFF;
: G8 }) W. g$ M& J2 K! r* M3 oDefaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;* n7 ?5 z4 C% y' F. q

0 W# R  q. j! L/* override diags mask for selected modules */
) v9 n0 Q. i# L/ cxdc.useModule('xdc.runtime.Main');
+ F) n6 C. z/ kDiags.setMaskMeta(& f' [& ]7 j+ [5 c' ?
    "xdc.runtime.Main",+ [, W% n* u/ P. H, _
    Diags.ENTRY | Diags.EXIT | Diags.INFO,
7 F( ^+ E9 O! h7 l    Diags.RUNTIME_ON+ f8 I. f. p0 Q; u6 x" a( y
);+ Z. [  m* {0 m# n  u9 U: ~

2 X8 [# l# O; R  i  z1 Ivar Registry = xdc.useModule('xdc.runtime.Registry');' U  Z) M) a; S
Registry.common$.diags_ENTRY = Diags.RUNTIME_OFF;
* @3 I. j4 Q* S! J' W1 A9 ZRegistry.common$.diags_EXIT  = Diags.RUNTIME_OFF;
& }4 M: k$ n% [, w# q$ B+ W  e: lRegistry.common$.diags_INFO  = Diags.RUNTIME_OFF;
; A8 R7 Z- i& T* Z* JRegistry.common$.diags_USER1 = Diags.RUNTIME_OFF;
/ l" |" ^# J+ g4 i; S6 {# _& v1 i/ T9 K# x( x% n
/* create a logger instance */" \) a- t4 v$ d" R# Q& W2 ]. V
var LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');& v# ~8 `0 g; P" `/ e$ a
var loggerBufP = new LoggerBuf.Params();0 N9 s! A1 b6 {& }$ i
loggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */7 u6 _9 p* W! i( q$ g; F
loggerBufP.bufType = LoggerBuf.BufType_FIXED;5 o' N. `. F" i2 }6 M+ ~1 t6 h
8 J/ `* j* Y! [5 j
var appLogger = LoggerBuf.create(loggerBufP);* N& ^# e. |+ H2 _* {
appLogger.instance.name = "AppLog_Core1";  D7 {* }! c* G' S6 M
Defaults.common$.logger = appLogger;! {2 z4 Z; q9 k$ v1 `* P8 K7 k! A
Memory.defaultHeapSize = 0x8192;   
. B7 [$ `! E1 U/ C, v. aIdle.idleFxns[0] = "&LEDStatus";
' }2 A$ ?1 A, }  UCache.initSize.l2Size = Cache.L2Size_32K;3 C; Z3 |; Z" \# J1 T$ f$ R0 f2 q7 n

3 t, _! _# G/ L
回复 支持 反对

使用道具 举报

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/ Z/ Q- A* j( T- s8 e5 I
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
6 n$ n# X( y  }& J/ mvar heapMemParams = new HeapMem.Params();
7 E' [6 |( o0 G( z, [% A& ~- J8 kheapMemParams.size = 0x4000;, r# B* Q% _1 Y( B; M* S
% V7 t' F& p7 _; ?* v6 k3 b" w
var Memory = xdc.useModule('xdc.runtime.Memory');6 D5 L: s& D: w* }3 C  B& o" D# ]& `, R
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);
( o% ^" e  V! K9 g2 J/ X* k  A1 ~- ~% I& Z- f- P& Q7 O
我大约calloc  每次共计大小为5K*16bits,
( {9 y% o0 I$ D( {3 ^# Z" K% }而默认配置才0x4000、需要改大。) `# d  u- G  T6 a& z
! E$ B0 z+ v, B- ?* d/ O
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
5#
 楼主| 发表于 2015-10-28 16:14:47 | 只看该作者
/* no rts heap */
! X1 ?2 D# ]0 U' h7 Y6 C* HProgram.heap = 0;7 ]/ {0 H# T: x* b7 [
Program.argSize = 100;  /* minimum size */% R4 U$ F9 k$ w* a
Program.stack = 0xF000;                   //我改到F000  也不行
回复 支持 反对

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-12-11 23:15 , Processed in 0.040678 second(s), 23 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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