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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2015-9-4 08:33:31 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
创龙工程师你好,我在OMAPL138单独调试DSP程序(使用SYSBIOS)时,在任务中使用calloc函数动态申请内存,用完后free,类似如下结构
) X# _! T) Z/ F+ Z
" [3 L5 _3 R) W/ q    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //256( W: e5 ?9 P" Q
% _' K; e' P( Y' ?' r# q- J
其他程序段。。。。。! r2 A6 z( Z! Y  h

  V# m) t7 G2 D  X' Q: B   free(x_d);1 |$ D* `* h# Y8 R
' _: {) a% u& g2 k. ]6 _
使用DSP侧单独调试功能,验证动态申请没有问题,, _! ?4 Y+ j7 n  e  i' h$ S: r$ Y0 h
+ `) V' U; M0 L5 s2 f2 x
但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。- f5 g" n, d; H7 A% u% ~4 }
- s5 m/ o; b. @; ?' z- A( D/ K: O

  h  i  K$ J% c) w5 p  G! U$ U. p7 e( s* X* J  @5 |% ]( J
  N% A* U. u) j! C4 H9 e. q
6 z0 S9 `  ], {! f* p- `: ]

5 p3 `+ X4 y3 s. b- g. ^& W, R# L& N. r  I1 X

1 o6 d  S3 a* G' b- }4 L
( A9 I$ T( ~2 T' w
% X2 m6 P3 r1 E! F$ g# u+ i* I
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2015-9-4 10:29:21 | 只看该作者
补充说明
: p5 y6 C1 }8 ~3 H: N4 d+ t我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下
. E7 K# J  `- R$ f$ h$ r(不过疑惑的是,为何单独DSP仿真就没有问题呢?)2 L1 Q, [" t, O3 O$ k! T

; |$ X+ Q; q8 [- @是不是需要在DSP.CFG中进行配置
5 n3 ^2 g% ~( w我现在的配置为; g: ~6 X) @" A4 r' e' U; }# D2 s
' b4 r7 I$ B/ M; D
/*
$ W! A0 X; i/ A. k. m% _. h# _( e *  ======== Operating System Configuration ========
5 B4 O- x9 {$ j) S. @4 I */
( B8 D2 H4 l% E$ u" F# Z1 A5 a0 A8 h- ?3 u
/* no rts heap */. U$ A9 ?8 w% y. n3 h, l
Program.heap = 0;
+ a- _1 {% ~9 e2 Y  i$ sProgram.argSize = 100;  /* minimum size */! T' e& o0 ]7 i, n+ U! Y# u0 M. M5 c) C
Program.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大5 O% R1 y  w/ @" K7 D, C7 ^9 w' [
7 \, [" @+ `/ f9 [; K
/* create a default heap */# N9 s. _# n/ R0 D+ u4 _3 {# p
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
4 f" x; s0 I: y. qvar heapMemParams = new HeapMem.Params();  @* \  Q; K/ v( \) V% l
heapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大
0 z, @5 ]1 D$ N/ o9 f- S& t, K
) I8 C* U6 L; H& R/ @, b# {7 Y
var Memory = xdc.useModule('xdc.runtime.Memory');4 }9 T8 L9 [8 h8 j' J: F' T
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);
& m) ?6 w+ k1 ?" e8 p; d; K: F8 \* m4 @6 M- N: m* n
/* configure System module */0 i  V# i; N* S5 p& e( J6 V* g% u4 L
var SysMin = xdc.useModule('xdc.runtime.SysMin');! i% n6 n7 N8 i* C+ X% |7 j" G. D
SysMin.bufSize = 0x1000;/ D/ T2 S+ S8 ]; d
SysMin.flushAtExit = false;
6 J# h) c+ Q& Z8 i- D& E6 B8 l2 J) D
2 x- \- S( L" r4 [4 Y% [var System = xdc.useModule('xdc.runtime.System');4 e! C! O  G. Y1 s6 l
System.SupportProxy = SysMin;
9 o7 s. J" w+ O8 [( T* U8 v7 d& n; Y2 e' R8 T: \: |
/* configure SysBios to use the lower half of Timer 1 */
) `) @, {/ Q/ j$ `( Hvar Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');
& Z2 V: S9 N- bvar Clock = xdc.useModule('ti.sysbios.knl.Clock');7 U+ O" F1 S& o
Timer.timerSettings[1].master = true;" Z; {  L6 F* N4 b" d
Timer.defaultHalf = Timer.Half_LOWER;% b, a: y& U# X! @; \/ ]( o6 e  w
Clock.timerId = 1;' c1 N/ d" _' U9 T& G
5 C  `" S8 V* S& S0 S

' E  S% ^& e5 h6 e/*2 C: n0 U% Y) u  c  [
*  ======== Miscellaneous Configuration ========
" n# P. V1 M3 Q( T7 T */- @$ G& u/ B" O/ _6 Q( W
! Q4 O& s( h/ x7 ^7 V: C. K  X
/* set default diags mask */
6 f, d2 E2 V( E8 A# ?) r5 Nvar Diags = xdc.useModule('xdc.runtime.Diags');
: `" r+ z! u: Gvar Defaults = xdc.useModule('xdc.runtime.Defaults');/ p1 X) b% W  p  \

9 Q6 Q, c% d" V" p7 kDefaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;: p1 i3 S% Z, l% K' A) }
Defaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;
* o! o$ }- [9 A! U  P+ NDefaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;
3 _( b  X2 [6 x" l* JDefaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */# ~1 V; ?9 _! u" e
Defaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */
) C( b2 u% F. D8 kDefaults.common$.diags_STATUS    = Diags.RUNTIME_ON;
" X+ l) v+ B. }. I0 XDefaults.common$.diags_USER1     = Diags.ALWAYS_OFF;
. Y8 @/ |$ B* PDefaults.common$.diags_USER2     = Diags.ALWAYS_OFF;
3 d0 K1 M% F" D. O/ bDefaults.common$.diags_USER3     = Diags.ALWAYS_OFF;
$ ^# ]  n7 ~6 }  R7 `Defaults.common$.diags_USER4     = Diags.ALWAYS_OFF;
1 P& o0 u- E  G! N* YDefaults.common$.diags_USER5     = Diags.ALWAYS_OFF;0 y& G: i, g/ A0 z9 o0 h
Defaults.common$.diags_USER6     = Diags.ALWAYS_OFF;% v. m6 l5 F- \/ Z0 \
Defaults.common$.diags_INFO      = Diags.ALWAYS_OFF;/ x$ Z3 S7 Y. h$ H  a  ?
Defaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;. f8 \, Q) s' w6 e6 H. f2 R
6 j& `9 B1 h, k3 x+ H5 n# Q. u
/* override diags mask for selected modules */
$ W( p( h9 g/ Sxdc.useModule('xdc.runtime.Main');
2 m9 [5 h9 F# x9 t* b7 Q; _Diags.setMaskMeta(; U/ O; n; E! |. \2 g1 R; t" ~
    "xdc.runtime.Main",9 L) S4 U3 ?- P/ y9 A0 g
    Diags.ENTRY | Diags.EXIT | Diags.INFO,
  K5 Q9 u) V6 [8 G( n9 D$ j4 s    Diags.RUNTIME_ON
' \9 l- E4 p) y8 z. L$ N, b);
3 g4 O0 C+ }! j7 I( U3 [+ [3 p: H
" ?5 z% }6 |, yvar Registry = xdc.useModule('xdc.runtime.Registry');
- U% ~4 P3 n- c/ eRegistry.common$.diags_ENTRY = Diags.RUNTIME_OFF;
! x# c9 f  e( }/ {8 SRegistry.common$.diags_EXIT  = Diags.RUNTIME_OFF;
- ^7 v4 H2 k7 v, g9 Z* \Registry.common$.diags_INFO  = Diags.RUNTIME_OFF;
- {! B) W& ?  z2 F1 k* A# X: TRegistry.common$.diags_USER1 = Diags.RUNTIME_OFF;' F: Q! [/ F2 w" E9 Z/ I9 o

( B9 A7 m6 E% A/ B1 O/* create a logger instance */
) B) C; q. H- t& ?" g. y- _var LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');- Y0 k# ^; K- l
var loggerBufP = new LoggerBuf.Params();
% k' s& `, |! E8 F: S) R4 b/ \) yloggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */  P2 P7 X: b! M2 X4 H6 x2 H9 S1 j
loggerBufP.bufType = LoggerBuf.BufType_FIXED;9 S+ _) @) u. l9 A# w
# x3 ]) s- H1 A+ |, i% s3 v
var appLogger = LoggerBuf.create(loggerBufP);  g9 H: g/ B4 J$ E4 O, v8 y8 @. k
appLogger.instance.name = "AppLog_Core1";
' `; W, I) T$ X" m2 zDefaults.common$.logger = appLogger;
8 g+ O! |* ]1 a/ E+ c; L% O9 ]; BMemory.defaultHeapSize = 0x8192;   
2 {! I0 n; o/ ~) |$ \0 ZIdle.idleFxns[0] = "&LEDStatus";
: U3 c) g6 Y& ^- o; I* jCache.initSize.l2Size = Cache.L2Size_32K;, c8 q+ F: j! o& k* X) L# k7 o
0 p  P! M7 `$ ]& O: u4 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 */
# o# L/ k1 M! {: k2 c  e( d' }var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');' p) w# T- D$ T- g; y
var heapMemParams = new HeapMem.Params();2 U- \# {9 Q5 _9 f! s/ ?; W
heapMemParams.size = 0x4000;
+ M* A& Y) N3 \2 f
; F. Q! H% C3 G3 x% \7 Evar Memory = xdc.useModule('xdc.runtime.Memory');
: _5 m$ z) N9 W' xMemory.defaultHeapInstance = HeapMem.create(heapMemParams);
) M* O9 Q7 p/ R1 l+ V  l
, w' W3 O- z3 w+ o; V" `6 L我大约calloc  每次共计大小为5K*16bits,
  n) X* G1 M) n+ z而默认配置才0x4000、需要改大。
5 b* P2 q- {# |9 A4 h8 Q+ O! [6 D! ?
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
5#
 楼主| 发表于 2015-10-28 16:14:47 | 只看该作者
/* no rts heap */7 w1 e* ?, ?- i. p3 p
Program.heap = 0;
. i' m4 v1 ^, ^Program.argSize = 100;  /* minimum size */. O; v% j9 b$ v( x
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-1 04:56 , Processed in 0.044106 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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