关于OMAPL138在SYSBIOS下DSP侧动态申请内存问题 - OMAP-L138 - 嵌入式开发者社区 - 51ele.net
设为首页收藏本站
点击跳转“创龙科技服务通”

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

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

) {6 ], X( N3 ]    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //256
- T) ]9 d. c. h: I$ I7 o, W
- g0 A( o( k2 t; y: ~其他程序段。。。。。5 k) p( o5 S" D8 t/ N# X

( p' B3 u: o2 w) G   free(x_d);1 L5 n, U2 ~; w

0 \* T$ R+ u5 o% R1 n使用DSP侧单独调试功能,验证动态申请没有问题,9 ?: k8 ~& P. c% p
- p, d! W) Q! U+ g
但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。+ v( @2 u) M( ?0 T

" w3 \+ @: U2 ^
/ v) U0 |, J5 h2 v8 t% q5 h
! q0 w2 z# h/ a
% Z% s8 o! r6 _) @- q" k0 D
0 F- G2 ]: a1 Y$ X; e1 o9 k" D1 b/ e7 h0 z& p* ~
+ f7 g& z! M$ U0 p

9 \% W' H4 P: c0 ]. G' ~$ Q5 F1 M9 B1 D% }
& k) k6 g& ?/ S' h, J. r
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2015-9-4 10:29:21 | 只看该作者
补充说明
$ A" ^5 P. Z3 y' S我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下: ?# i1 X3 }* T, r& s5 D8 x
(不过疑惑的是,为何单独DSP仿真就没有问题呢?)
/ h% G9 S& s$ L) _
8 e+ g# ?6 I: _& h
是不是需要在DSP.CFG中进行配置
1 B+ o+ S- @! I, M. ^( X我现在的配置为) W/ W$ Z& a+ w3 w

' J& ~4 Z  |5 \/*
# ^9 ?" v' F& `. k/ ?$ R *  ======== Operating System Configuration ========
& G# [- H0 r; g& V2 m *// d1 g) N9 C2 f2 o. E

! t+ M2 c& ^) P+ B" C" x# h/* no rts heap */3 j8 N. t! R% u$ c
Program.heap = 0;* r) ?) E" y+ g; v1 {
Program.argSize = 100;  /* minimum size */
) M$ e; v8 z! {Program.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大
! k0 K1 `1 w! T& V! s2 g0 O2 N/ G& C  ^9 p
/* create a default heap */9 F+ P8 w! \/ b$ F2 z8 y' w
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
/ S$ v$ K2 e6 c! G$ B% z. Nvar heapMemParams = new HeapMem.Params();5 F9 v4 h8 f8 C
heapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大6 ~( L# ^+ X/ p- B

: o- l6 q9 p- n! u% l& q& p
var Memory = xdc.useModule('xdc.runtime.Memory');6 h4 n+ j% {0 |/ y; ^4 }7 \
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);, t0 f6 f1 J* g7 m' L. [- }

6 f. j2 u. C8 H' ^7 E/* configure System module */
: ]- [4 l, _1 a1 O) Jvar SysMin = xdc.useModule('xdc.runtime.SysMin');  I! ~, `$ @0 s" M
SysMin.bufSize = 0x1000;
9 c# s' q) Y' L5 f1 lSysMin.flushAtExit = false;
+ G# w' i8 F, B/ t: Q" M& i7 {  }9 `# I& i
var System = xdc.useModule('xdc.runtime.System');
4 F' {# a2 d( b, {/ G3 xSystem.SupportProxy = SysMin;
2 v! {7 l" @* O( r7 F& U+ R
! ^- k+ r! `7 R8 A( ?/* configure SysBios to use the lower half of Timer 1 */
3 s6 Q; [" Q: |/ ^& e( i; Z; yvar Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');/ a3 @+ B3 V- n
var Clock = xdc.useModule('ti.sysbios.knl.Clock');) T  M4 K5 b8 U4 b; v3 d$ j& Y% F
Timer.timerSettings[1].master = true;
5 h  U% v* h% j' Y7 ?3 K( A- cTimer.defaultHalf = Timer.Half_LOWER;5 b- G4 ^" w7 x( l* h  b" [( `' C
Clock.timerId = 1;! u: d* e7 Z( k6 @1 X# j) g

& ]1 g- P- m8 Q6 q  W! R- A) r
/*$ m3 g; @/ H$ f! _# p
*  ======== Miscellaneous Configuration ========4 X9 \9 ~% N7 z% _2 @
*/
4 Y+ v: R. n4 T  }  y. w
" k& p- d! \$ }( U/* set default diags mask */3 O" K9 K* d  w# m3 G9 ?, W
var Diags = xdc.useModule('xdc.runtime.Diags');; ~1 m/ m8 P- l' `$ [
var Defaults = xdc.useModule('xdc.runtime.Defaults');
6 C! m" Q; W. `+ Y% U/ x  l- ~, w4 P, ?1 X9 z$ B
Defaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;" E, u/ w, }( U! P$ ^' @1 c
Defaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;
& n2 r+ c. G! F  \Defaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;- K: p; a- z6 [- M( b
Defaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */% L: `% j: c- B
Defaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */$ G! x1 Y8 J+ L) Y- t
Defaults.common$.diags_STATUS    = Diags.RUNTIME_ON;/ |8 T; h2 |, u4 F
Defaults.common$.diags_USER1     = Diags.ALWAYS_OFF;
3 a2 h& _1 }2 m* GDefaults.common$.diags_USER2     = Diags.ALWAYS_OFF;) X! T" k* N/ `2 S: S7 l
Defaults.common$.diags_USER3     = Diags.ALWAYS_OFF;
! Z/ ]( V+ f  L/ ]2 gDefaults.common$.diags_USER4     = Diags.ALWAYS_OFF;
# O( B  U5 c2 H# O/ t6 t& X0 G1 J2 I5 PDefaults.common$.diags_USER5     = Diags.ALWAYS_OFF;. U# o) q4 M& a4 ?2 t
Defaults.common$.diags_USER6     = Diags.ALWAYS_OFF;
$ b3 K1 U; [* W# ]+ zDefaults.common$.diags_INFO      = Diags.ALWAYS_OFF;
, Y- {3 W6 _8 ZDefaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;
6 ?- `- g6 A1 G7 v
# E& D4 Z5 a. V# e: [/* override diags mask for selected modules */
: S$ D6 Q( M# |. nxdc.useModule('xdc.runtime.Main');
; W0 c0 D3 z, {" p1 ?Diags.setMaskMeta(0 u" \2 Z  f% \' ?8 ]9 U8 D
    "xdc.runtime.Main",- _; `& [% v& c+ N: C( a2 Y
    Diags.ENTRY | Diags.EXIT | Diags.INFO,/ k5 m2 n/ b$ T8 L' y
    Diags.RUNTIME_ON
3 i) T. T& ~" k( z);
, M0 c* N1 }1 z0 L" E
) L$ Z2 L1 u2 h$ f2 w9 tvar Registry = xdc.useModule('xdc.runtime.Registry');, G4 ^8 M1 {# z, `/ G  o
Registry.common$.diags_ENTRY = Diags.RUNTIME_OFF;
  f4 o% E* q; Q2 p8 Z7 n; QRegistry.common$.diags_EXIT  = Diags.RUNTIME_OFF;
: W0 I8 ?0 f  w" X0 E2 GRegistry.common$.diags_INFO  = Diags.RUNTIME_OFF;
( [4 }  Y" k% x( b  ]* E7 O: TRegistry.common$.diags_USER1 = Diags.RUNTIME_OFF;
6 R# |% n3 b7 ~
3 T. {9 H+ {: k" p/* create a logger instance */
) D# m9 R2 o' l1 B5 w0 {var LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');
' _. {; f- B( l7 K9 g1 t  X, gvar loggerBufP = new LoggerBuf.Params();! ]( x+ t  _* ^1 l
loggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */
: V0 Y6 C9 @! ~6 ~% jloggerBufP.bufType = LoggerBuf.BufType_FIXED;
, ?( s: [4 N- b5 }0 ]8 l! \( B; D  P
+ X3 p: `5 B% W6 \/ w8 Dvar appLogger = LoggerBuf.create(loggerBufP);$ D+ _; Z' R- q$ D$ A) \4 T! F
appLogger.instance.name = "AppLog_Core1";. I$ W! i3 x$ ]$ d( f# X* R2 y; t, s
Defaults.common$.logger = appLogger;& [. I( g! I" T. V8 n/ g; u6 y& B
Memory.defaultHeapSize = 0x8192;   
; [& H4 C4 r5 TIdle.idleFxns[0] = "&LEDStatus";
5 l1 ]6 h8 D1 I7 [Cache.initSize.l2Size = Cache.L2Size_32K;6 i& i( w# ^- z& ^6 R/ q$ O! d* Y
# @) d. B( D$ T4 U+ ~. R6 u, s
回复 支持 反对

使用道具 举报

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 */# M* A- s6 U! y5 T" w+ b* P
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
& {% ]" ?' r4 H. bvar heapMemParams = new HeapMem.Params();
/ d. C& S4 u4 s, {. {8 UheapMemParams.size = 0x4000;% Y- t  i0 l' w1 J, {, \$ l
8 s0 g) A. X2 q: M
var Memory = xdc.useModule('xdc.runtime.Memory');
# I5 B/ x7 u6 f. JMemory.defaultHeapInstance = HeapMem.create(heapMemParams);5 p7 X4 r: [9 j9 I
2 C! Q. y) e& ?8 x$ d) |" G
我大约calloc  每次共计大小为5K*16bits,
, n" ?4 g3 \6 {& }! h0 h而默认配置才0x4000、需要改大。
2 @0 f+ K& m7 U! S$ b& O: ~- x3 u" U2 ~
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
5#
 楼主| 发表于 2015-10-28 16:14:47 | 只看该作者
/* no rts heap */
# ?# N& R1 _; h1 o6 CProgram.heap = 0;- o6 Y1 a1 X4 s8 P8 Q4 ^% j
Program.argSize = 100;  /* minimum size */
$ j( J: ]! {6 {( E/ X) n% aProgram.stack = 0xF000;                   //我改到F000  也不行
回复 支持 反对

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

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

使用道具 举报

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

本版积分规则

点击跳转“创龙科技服务通”

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

GMT+8, 2026-3-7 10:25 , Processed in 0.046772 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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