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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2015-9-4 08:33:31 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
创龙工程师你好,我在OMAPL138单独调试DSP程序(使用SYSBIOS)时,在任务中使用calloc函数动态申请内存,用完后free,类似如下结构( {$ ^# O% I6 _# e" ?) y( `
+ l! x( w6 n& p- J1 [" U( a
    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //256; Q! L. J# p. ]5 y/ q
, r+ `, u7 {4 j7 J! E; D& W. h
其他程序段。。。。。
. j/ j& V1 e1 {3 ?& z; X ) }% u; T" Y1 Q+ a% `7 w/ y
   free(x_d);
# B& |/ K) P  a  U9 q7 r1 Y) Q$ n2 Y) ^
使用DSP侧单独调试功能,验证动态申请没有问题,+ p2 m0 l' X5 n7 Y' x/ }

) D8 r- }1 `5 E  P3 s" c' z6 D! i( O但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。
! I  t5 p" c7 I; l& k& L
/ u' _9 A4 I: Z1 F& R/ F6 W, j+ i
, F' A# _' s$ \$ O+ T5 U

0 A8 ]6 e( o* d! q  m* y' `# M& a
) p5 n% d9 ]/ I" f1 q5 W2 n/ x- N6 Z4 ~/ [

: K- T* q2 `; E$ ^# g5 v' J
+ @- l" K1 ^2 F& s5 u8 y
- M% e8 X$ M3 j0 P
# c8 r2 K1 m' g% I! @, A3 x
2 z1 R* b# G9 P$ `) s" g
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2015-9-4 10:29:21 | 只看该作者
补充说明1 X4 d2 E" w) q% A0 |
我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下
: P: M. \- V* N+ _(不过疑惑的是,为何单独DSP仿真就没有问题呢?)
7 Q( t  ], P0 h$ l5 Y

/ m) J7 A) z2 [7 k3 d& p是不是需要在DSP.CFG中进行配置9 T) C1 V& j7 o1 j% Z: J
我现在的配置为
3 k: G  j. G1 P& X7 n
0 {" X1 x+ N; S) n/*, j) x# i+ d4 Z/ z1 _
*  ======== Operating System Configuration ========4 Q; f8 m# [6 [
*/
6 ^1 d) M5 O- u1 a, C, [
& g* w, y0 B4 z* O/* no rts heap */
( \  V1 P" X; V' X7 _Program.heap = 0;/ N) n$ M; e, N  r
Program.argSize = 100;  /* minimum size */) m1 t3 x, Y8 W% o7 ]: Y
Program.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大
: b' ]; x2 J8 `9 x4 r* B3 _$ Q+ r' r: S5 p# t7 L
/* create a default heap */- p. O5 J" v7 ^! u* @
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
% p$ C# E9 V' m( `var heapMemParams = new HeapMem.Params();- N$ K% G' ?3 q
heapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大. a. C5 e$ x; m# E! x* B
1 a0 J# {# g- o$ ]
var Memory = xdc.useModule('xdc.runtime.Memory');: D) B3 S, l  p
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);
" B, w& q4 Q! C( i9 A
3 R; l  k% r, ~/* configure System module */6 |0 W8 p* z  v/ l
var SysMin = xdc.useModule('xdc.runtime.SysMin');
8 m5 W  V' k# c3 PSysMin.bufSize = 0x1000;
4 \- P' W' v, R9 d; NSysMin.flushAtExit = false;
! W+ d; A% C$ v7 F1 F. C$ c
- I1 P8 A! e7 r0 K% J- ^var System = xdc.useModule('xdc.runtime.System');
1 I/ n0 }/ _+ o1 n8 n" N& QSystem.SupportProxy = SysMin;" z) N, `2 |6 o1 E, w0 s! ?
% f8 J! ?  [' n
/* configure SysBios to use the lower half of Timer 1 */
- c& x1 {7 ]" \) A$ a( C; ]  u8 P( yvar Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');
+ O: E4 |- M; e6 Qvar Clock = xdc.useModule('ti.sysbios.knl.Clock');; X3 @$ [7 D0 `" h1 r9 u7 m" q
Timer.timerSettings[1].master = true;) d( h1 h2 `8 @, {
Timer.defaultHalf = Timer.Half_LOWER;/ E3 q( }0 N+ }7 g
Clock.timerId = 1;
7 D8 \& ~9 i6 A9 V8 O
* u" `6 L3 D4 f* p* k" ]/ r* L* F8 K+ H. C# \; _8 t& O
/*# n' V) p6 Q4 Y" k3 `9 r4 D
*  ======== Miscellaneous Configuration ========7 o4 l7 r! Z* a' T
*/
& \* J/ K& n4 Q( V: x. D; q4 ~6 O, m* R2 k& c: C
/* set default diags mask */4 b) V! O# l' d6 H6 `
var Diags = xdc.useModule('xdc.runtime.Diags');* O9 i. b( d4 W/ q5 j% t) l
var Defaults = xdc.useModule('xdc.runtime.Defaults');3 l' {  `/ J2 \3 T9 ~" T* t( I" G
9 t9 H8 `" g( V& ~
Defaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;
4 ^% F3 z( d9 V8 P) oDefaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;; Q; C6 ~& o; @4 P7 ]5 x# `
Defaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;
. |- B! t8 G; L. M) f; sDefaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */
  A( c/ F5 Y2 G. s5 N" H; dDefaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */+ h  j% M3 ~- j* W( C- x4 ~, ]: j
Defaults.common$.diags_STATUS    = Diags.RUNTIME_ON;5 P+ E! q4 @% y% m; j0 e/ H6 I
Defaults.common$.diags_USER1     = Diags.ALWAYS_OFF;) R0 V" l7 Y; K+ |4 _% Z- J% V
Defaults.common$.diags_USER2     = Diags.ALWAYS_OFF;
7 U5 `' l5 I0 H4 dDefaults.common$.diags_USER3     = Diags.ALWAYS_OFF;
  e( Y. c3 Q# l, u8 f0 F2 _Defaults.common$.diags_USER4     = Diags.ALWAYS_OFF;: e: p- k7 }" C6 P, f( H& X$ Z
Defaults.common$.diags_USER5     = Diags.ALWAYS_OFF;5 F3 W  N+ b5 v5 u( d
Defaults.common$.diags_USER6     = Diags.ALWAYS_OFF;
( ?- [9 {, q* WDefaults.common$.diags_INFO      = Diags.ALWAYS_OFF;3 X- Y& J5 V) C/ v
Defaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;$ W3 T/ O& z6 v5 r5 f
6 N$ ?/ q& W3 R! a
/* override diags mask for selected modules */2 i7 t$ D' Q. r
xdc.useModule('xdc.runtime.Main');
! j( c# w. G% E8 T' R+ J9 R) DDiags.setMaskMeta(  C1 c7 @$ j' \& `" W! g
    "xdc.runtime.Main",. i+ B. `6 ^. k& i5 L
    Diags.ENTRY | Diags.EXIT | Diags.INFO,# i: m7 \: t2 F$ Z1 M4 ^" V3 U
    Diags.RUNTIME_ON, w2 b; m9 ^4 `' u5 v5 |! [: K8 Q
);. ~- ~% G7 k/ V2 l- b
$ Y2 J6 |9 ~- U$ i4 g; V; l% u5 j
var Registry = xdc.useModule('xdc.runtime.Registry');% S3 [9 A9 D9 e8 H; _/ a
Registry.common$.diags_ENTRY = Diags.RUNTIME_OFF;
5 b+ Z5 ~7 J; X  e/ p5 m: cRegistry.common$.diags_EXIT  = Diags.RUNTIME_OFF;
. T" Z" N% ?7 B# I6 Q# ?6 qRegistry.common$.diags_INFO  = Diags.RUNTIME_OFF;
; a1 V/ l9 q) y3 Q$ }6 {Registry.common$.diags_USER1 = Diags.RUNTIME_OFF;
! Z# {1 D$ k8 w9 x9 O# h5 V) s" W' j
6 u& S9 p1 u; ^- u4 t2 K/* create a logger instance */+ b4 x. c  Q% V9 K6 a. v
var LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');# u7 M/ o4 g! X4 h" M2 [6 K
var loggerBufP = new LoggerBuf.Params();% ?- w* e  p  t* f9 {5 h
loggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */
  t6 F  ^  T8 M- Y7 DloggerBufP.bufType = LoggerBuf.BufType_FIXED;
( z2 ?# ?. O: E; h: |% w0 I2 [2 i3 j2 D* e
var appLogger = LoggerBuf.create(loggerBufP);: I1 J' \7 y, i& Z8 A& C5 z
appLogger.instance.name = "AppLog_Core1";
- a5 g* ]2 ~: O) fDefaults.common$.logger = appLogger;
4 j0 A. u' N. h9 X* pMemory.defaultHeapSize = 0x8192;   
& N  q/ n  g8 u, t+ r/ hIdle.idleFxns[0] = "&LEDStatus";
/ u' `1 }2 v( m! m& yCache.initSize.l2Size = Cache.L2Size_32K;/ c3 |% T/ t8 r- p7 y7 }

2 @" C; ~2 E7 ]& p7 O2 U/ I, V3 Q2 K
回复 支持 反对

使用道具 举报

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 */
1 Y! r5 O0 j" Q0 y# j9 B% Yvar HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
# @2 X5 a' d$ {2 _( Vvar heapMemParams = new HeapMem.Params();% D7 {+ k  e: h' Q) j
heapMemParams.size = 0x4000;: y7 G( ^& n3 d3 V

! i9 i: w( {# a. H# ~7 \var Memory = xdc.useModule('xdc.runtime.Memory');
" ?# A' J6 l: W6 c  IMemory.defaultHeapInstance = HeapMem.create(heapMemParams);! i2 j( t" C1 x8 c( k
. U9 w& Z3 q3 b9 p( q
我大约calloc  每次共计大小为5K*16bits,
8 W" ?/ k1 U! A; A而默认配置才0x4000、需要改大。* k' k. j4 L0 ]! K8 j' I' a5 x
5 S" l' J* D, m( X. E$ O
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
5#
 楼主| 发表于 2015-10-28 16:14:47 | 只看该作者
/* no rts heap */
" b; ]$ G5 x1 X/ g8 ~( j3 tProgram.heap = 0;
4 q% `2 {" c) ~+ }, NProgram.argSize = 100;  /* minimum size */* z* i' A" w' O
Program.stack = 0xF000;                   //我改到F000  也不行
回复 支持 反对

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

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

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2026-3-12 11:07 , Processed in 0.042201 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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