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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2015-9-4 08:33:31 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
创龙工程师你好,我在OMAPL138单独调试DSP程序(使用SYSBIOS)时,在任务中使用calloc函数动态申请内存,用完后free,类似如下结构
( Y5 B0 D# S7 x6 f  i; v! @7 L
4 p  s2 ?- V: p& w7 M7 A1 h    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //256
5 K) i7 `" u% x3 @
% b" p1 u- o' W7 F- G其他程序段。。。。。/ x7 j+ m* E& w' W8 `

7 O' N* ]3 g$ C   free(x_d);
* c9 j4 a! N; y8 J6 u' b9 l0 M  j. J% j6 I# u
使用DSP侧单独调试功能,验证动态申请没有问题,9 u/ M, x) M( H* K( H
3 i6 @5 l* ^0 Q* Q9 m: H
但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。
/ @& u$ K7 H) |! _. C
. \# o5 l! k% G" J1 ^1 E; ?

5 S- v& N0 l: K, h( t$ C) _$ I+ W6 @! p  `* q# c* h/ h  \$ ]6 ?
# K2 P3 D! y+ ^
( g$ r: t& n6 L5 y+ R  k
2 ~8 M% x  W& b6 ^7 J
* z  w& U# e5 f" |# f

* T  k3 |# Z. h, l; W3 m( {9 G
+ \) F6 H- \/ Q9 O) V2 l
7 E( |, j/ i; g9 N5 e
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2015-9-4 10:29:21 | 只看该作者
补充说明1 U2 k1 W4 K. a! Z9 }
我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下
% ^" ~: l# q, z* F' L: g6 A/ B% c1 y(不过疑惑的是,为何单独DSP仿真就没有问题呢?)
+ i& Q) g8 b) r2 g9 e

6 t: M4 z: {7 {+ ^$ o! D9 T是不是需要在DSP.CFG中进行配置- u% n! n. k5 J% {, E
我现在的配置为* @2 i% ?! {5 ^/ {# ]8 Z
) E. M5 D8 j# I- F0 u# N
/*
$ X' d$ h9 U& ? *  ======== Operating System Configuration ========/ m& ]* D3 I. v1 N
*/( `& n: e1 ~4 r+ I" v6 b
% i3 V3 e! V# v( g
/* no rts heap */5 }7 g5 k  o. B* B4 Z
Program.heap = 0;9 N6 B6 i! Q" Y- v$ B
Program.argSize = 100;  /* minimum size */
# j1 d8 \- c  rProgram.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大, X9 V5 [& A: z  M" @( W

" Z7 O! _" G6 e- R" Y" {4 l- M/* create a default heap */
, t4 A5 f( B/ Q: |3 L+ ^var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
. N, l0 B' }8 \& dvar heapMemParams = new HeapMem.Params();  x3 i( a& L/ ~, a% `
heapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大
: H. r/ m) ]3 W" z
+ V; A) |* Y# d/ v  n
var Memory = xdc.useModule('xdc.runtime.Memory');
' x9 R# s% z! i; R1 L7 M2 H  RMemory.defaultHeapInstance = HeapMem.create(heapMemParams);
" i, x' G' \; n% h# w3 }
' V- _- }! L" W! K8 j( E, [; i) o6 L7 X/* configure System module */7 ]: x# k. v! ~' ~9 R6 m5 W
var SysMin = xdc.useModule('xdc.runtime.SysMin');. p2 T5 X! |5 U4 r$ ^* l8 k
SysMin.bufSize = 0x1000;
: i( }4 i9 X$ ?% ~# wSysMin.flushAtExit = false;& P% ?6 E3 K; L8 d) z- |5 ^
9 _) I+ _5 F5 L! Y' y3 B7 E
var System = xdc.useModule('xdc.runtime.System');& u. f9 A2 \+ r8 I5 ~
System.SupportProxy = SysMin;
; E5 |6 G4 G8 r/ T, q% G, G/ E+ n4 R; ]) s
/* configure SysBios to use the lower half of Timer 1 */2 Y9 d% c% g/ Y+ a. r9 o- Z
var Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');
8 `" N& T5 h3 ?- J$ ~' N; A( rvar Clock = xdc.useModule('ti.sysbios.knl.Clock');
( N; r3 p2 l! ^Timer.timerSettings[1].master = true;
. ]- t2 K) `5 l  `Timer.defaultHalf = Timer.Half_LOWER;0 a( K8 d3 |" `* s: y/ W
Clock.timerId = 1;# v# i+ I! v* G, c/ }# y% W& l
. E4 T: G2 J  o* t( D/ ]

( L1 Q  J9 _2 C1 U0 E/*. J* \5 d; c: w, Z3 I3 l1 _
*  ======== Miscellaneous Configuration ========
1 G! A5 s* ?7 Y% K0 x */; o; o1 ?4 I$ m0 ?- h3 G  p2 C+ Y
+ k, R  l3 l8 f3 B+ L0 T; P, p
/* set default diags mask */% ^( i. m2 N* A# x( B
var Diags = xdc.useModule('xdc.runtime.Diags');
" v( }5 r; M8 M) Z$ S6 H3 ]4 qvar Defaults = xdc.useModule('xdc.runtime.Defaults');
( o$ x! o6 p9 _# q4 ]$ ~: O# }) [6 P6 n- s( t
Defaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;( \) `. H' P8 g! A
Defaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;
9 W/ d  c; j9 [Defaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;6 v6 y6 F9 T( w* V
Defaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */
; A. Y6 h7 V) T' z5 tDefaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */7 F( K0 |( g) U$ \  y
Defaults.common$.diags_STATUS    = Diags.RUNTIME_ON;( \9 P, m. _! j1 ^8 t! M
Defaults.common$.diags_USER1     = Diags.ALWAYS_OFF;
0 Y8 z% a8 D0 g" u. F$ |5 WDefaults.common$.diags_USER2     = Diags.ALWAYS_OFF;
+ ^! J+ Q/ p: O2 s$ I' ADefaults.common$.diags_USER3     = Diags.ALWAYS_OFF;
- I, n# `& N7 nDefaults.common$.diags_USER4     = Diags.ALWAYS_OFF;. {8 ]4 y: L: n5 H  N
Defaults.common$.diags_USER5     = Diags.ALWAYS_OFF;; H! e5 @/ w. F# J
Defaults.common$.diags_USER6     = Diags.ALWAYS_OFF;
+ R, Y+ {9 _6 F# o8 {Defaults.common$.diags_INFO      = Diags.ALWAYS_OFF;
: h/ u0 X, r; c0 xDefaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;7 R  e2 `3 ^! S/ i% Q# ^8 ^

' x( G( A4 _3 p& |4 |/* override diags mask for selected modules */  k& v4 W! C+ [! v
xdc.useModule('xdc.runtime.Main');
+ E; c/ ]9 ^0 ?  QDiags.setMaskMeta(
! r7 a/ |9 E* B: g( D    "xdc.runtime.Main",8 V* U8 J/ f7 P+ ]6 E. l' E
    Diags.ENTRY | Diags.EXIT | Diags.INFO,
2 A) h0 ]( k4 ^+ G9 m& J    Diags.RUNTIME_ON, B: P* i( i3 ?, _2 }/ ^+ R
);
: E- {+ N: c* K% S. C- @! T) H% V5 u, Y
var Registry = xdc.useModule('xdc.runtime.Registry');/ ]( L% R+ A) C. n0 x6 e
Registry.common$.diags_ENTRY = Diags.RUNTIME_OFF;7 t1 u3 K! a% u- G2 M7 t+ I/ B
Registry.common$.diags_EXIT  = Diags.RUNTIME_OFF;7 u  T0 I6 l; V& p6 ?
Registry.common$.diags_INFO  = Diags.RUNTIME_OFF;
+ q# D+ ~& B7 xRegistry.common$.diags_USER1 = Diags.RUNTIME_OFF;
9 k- n" v) _( R' d4 l7 c. S% z6 x+ K0 e0 j+ m) ~  b
/* create a logger instance */7 q% F9 M- z  \9 a3 D
var LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');
9 W! I8 `! t/ [7 Cvar loggerBufP = new LoggerBuf.Params();
- _. N; D5 J) p9 c; `2 MloggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */) c) Q* P( L8 L& {" A
loggerBufP.bufType = LoggerBuf.BufType_FIXED;5 q+ {+ O5 `' u" m# `

2 O8 t' g. }# }/ @: _var appLogger = LoggerBuf.create(loggerBufP);8 q5 L) y* F( `2 G" L9 q, F7 ^
appLogger.instance.name = "AppLog_Core1";
4 w# d, i. t+ q! LDefaults.common$.logger = appLogger;
6 X2 X& N- \& t/ \9 b. x" ]Memory.defaultHeapSize = 0x8192;   
) l5 N# ?" U/ S0 y4 G0 i# d- ?Idle.idleFxns[0] = "&LEDStatus";
. o: _* F9 {: @* kCache.initSize.l2Size = Cache.L2Size_32K;
1 G- H# c) [+ L  ^0 C4 |$ e2 Q, a+ {7 r. h, e# x1 }' ~! }( h
回复 支持 反对

使用道具 举报

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 */+ P$ A' j! V9 |; _& }  j. y/ b
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
$ ?: B; b" F; Cvar heapMemParams = new HeapMem.Params();5 F+ D6 q& H( H& n
heapMemParams.size = 0x4000;( H9 L4 `& M0 S, i3 m( H

& ]% v" c' X! R! b( o9 v5 T) c: yvar Memory = xdc.useModule('xdc.runtime.Memory');" I) j1 \8 G8 U2 f
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);( q) T$ ?/ t1 [9 k' o* z

- a/ @2 K7 S: e  n我大约calloc  每次共计大小为5K*16bits,
) x/ x% o" H8 @" n0 h' O而默认配置才0x4000、需要改大。
/ @$ f7 Q' L: o
+ P3 b7 L# O8 q6 E5 Q  ?
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
5#
 楼主| 发表于 2015-10-28 16:14:47 | 只看该作者
/* no rts heap */. z% g/ Q: o$ L* p0 x
Program.heap = 0;/ V9 ?8 ?' c' L, x
Program.argSize = 100;  /* minimum size */
, \$ Y0 @/ A) E! T; r  WProgram.stack = 0xF000;                   //我改到F000  也不行
回复 支持 反对

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-11-13 11:16 , Processed in 0.042496 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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