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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2015-9-4 08:33:31 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
创龙工程师你好,我在OMAPL138单独调试DSP程序(使用SYSBIOS)时,在任务中使用calloc函数动态申请内存,用完后free,类似如下结构
0 O5 c0 v! w+ K$ D) a
# h, v7 m, v6 Z    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //2568 i: U' r* R4 a* D# q6 f7 S  ^

$ k1 V! Z: W+ s0 X- t其他程序段。。。。。
3 w% {: U; {! A* Y  T/ g
( D; y+ j0 M6 D2 t, q   free(x_d);+ r! p+ w! Y) v
2 T6 h- p4 b- ^( `. t( |0 p
使用DSP侧单独调试功能,验证动态申请没有问题,* ?! ~, A# ^' I+ R8 }' I0 p, _

0 l! h5 G# @6 n* W) y# [但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。
  N: T# o! t+ Y+ Y; G- m; c
; \5 L( Z% g% W8 p  m! {

5 Y: b% B7 Q' o) H. R  V$ X6 c9 [5 {8 Z3 P8 [  h6 y( A4 C) n& v2 A" J5 O

3 n. k$ i' F: h+ x: X
2 C( a4 G" U5 p  z$ a: r8 A# z1 o% n) g5 i  y3 }# D4 y' x" Z! d/ f
7 O6 t0 f) ^0 g! x/ _- n8 }0 M$ ~

- V9 Z6 E: A. j+ d3 f& v# l9 W9 G9 E3 s9 \
* [5 P; F* f$ m2 |7 Z( `1 E! v
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2015-9-4 10:29:21 | 只看该作者
补充说明
" [  C( C+ u% }9 `我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下
$ n# B+ Z! r9 l3 {- V9 @4 c' M(不过疑惑的是,为何单独DSP仿真就没有问题呢?)$ b$ p) ]* @- M5 h* \, N& h
4 m8 ?7 {5 |' {+ e% }/ C4 s  `9 T' Q
是不是需要在DSP.CFG中进行配置; H3 m; J5 o- |: x+ q  X
我现在的配置为
  {5 M. v4 T) y& I. {# U' {' c& f8 |8 P. W  ^- Z
/*& I( M2 e5 Y, y- L9 T/ N
*  ======== Operating System Configuration ========) ]4 R1 c2 S! l. ?
*/( a  r3 d5 R  E  H5 h( |9 J. a
) G$ q& K7 D' {7 y+ V, s- b
/* no rts heap */
1 l! j8 i+ E6 n1 G$ k) ^9 I/ BProgram.heap = 0;; `3 `8 n0 Q+ a# H5 T2 X9 w
Program.argSize = 100;  /* minimum size */
' P* k# J5 P# q( _( c6 H; uProgram.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大3 h4 ?$ O7 ^# S, ~* a- c

  y% u0 ]  M, S: n/* create a default heap */
, n: @* @- I/ Nvar HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
; h& N) t* T& A$ r0 b7 J/ l3 Y, Svar heapMemParams = new HeapMem.Params();
. t' ]2 j. n9 y, KheapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大
1 @% g3 A0 C  N" F* b! z5 {. q: S5 ]
5 d1 |. H7 P) K) B0 q+ g2 |
var Memory = xdc.useModule('xdc.runtime.Memory');
. U6 d3 Z) l8 Q* i) E. \" }Memory.defaultHeapInstance = HeapMem.create(heapMemParams);
/ G% }  a( k/ R2 @5 D
4 a3 P) f8 F" @, ?8 p/ Y/* configure System module */
  |0 B7 i0 W8 N- ]2 mvar SysMin = xdc.useModule('xdc.runtime.SysMin');% k8 k1 N5 E( I0 K$ [- _
SysMin.bufSize = 0x1000;# Y; K% t6 `! N; ~" F
SysMin.flushAtExit = false;
* J$ N, I1 g( t
* @/ }6 _. c* Q" c1 N! svar System = xdc.useModule('xdc.runtime.System');
6 }; U  r7 j! N1 dSystem.SupportProxy = SysMin;( M& H, y0 x+ S9 F
; W  d" }% Q/ ^
/* configure SysBios to use the lower half of Timer 1 */
. U3 R# c( }; x1 ivar Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');
7 m; {5 n$ L0 U+ }2 |5 z0 Svar Clock = xdc.useModule('ti.sysbios.knl.Clock');
0 b  a( G2 ]1 l! g3 f: u4 @Timer.timerSettings[1].master = true;# S  N! P6 ]; `  C
Timer.defaultHalf = Timer.Half_LOWER;: b/ K) x" T& Z& f6 u5 c
Clock.timerId = 1;) s5 a! R$ D' e3 e: i- V& N

; {3 N# r/ A2 y* c9 S6 r' R7 y+ Y& i  k3 W9 {# z' @# N, V
/*( A; |: T" F" c; ]  Z+ o4 [' v
*  ======== Miscellaneous Configuration ========# T+ \9 g4 T. q
*/
4 J7 _" d; R# b3 I& k; J8 d( ~# N9 x
' e5 d) M% x2 e8 G( A% K/* set default diags mask */2 e3 h: J6 |7 k& X6 G% d
var Diags = xdc.useModule('xdc.runtime.Diags');" ^7 o) n: ]' |  u  T' h; h
var Defaults = xdc.useModule('xdc.runtime.Defaults');0 s4 r3 Z9 c3 K( E- ?4 s; D

% t3 U, [) K- ~# ]Defaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;
# ^0 z9 D# b& nDefaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;+ F" z7 c- R* r( H( \: W
Defaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;4 N: ^, J; \# a: E* s+ c
Defaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */
# j& ]1 E( Y4 Q7 \Defaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */% t' k/ {5 n  c
Defaults.common$.diags_STATUS    = Diags.RUNTIME_ON;5 t2 E, {; q5 L7 Y+ r' m0 R
Defaults.common$.diags_USER1     = Diags.ALWAYS_OFF;
# C" o6 P3 C0 C: HDefaults.common$.diags_USER2     = Diags.ALWAYS_OFF;
2 E  t6 ^  ~* R% U, m; ODefaults.common$.diags_USER3     = Diags.ALWAYS_OFF;
; q' U( E3 Q- R4 \1 O2 U1 qDefaults.common$.diags_USER4     = Diags.ALWAYS_OFF;% X) Z  p0 \! _0 K
Defaults.common$.diags_USER5     = Diags.ALWAYS_OFF;
8 O2 e0 x* T0 G3 L/ RDefaults.common$.diags_USER6     = Diags.ALWAYS_OFF;; }' e5 E$ T, T! w
Defaults.common$.diags_INFO      = Diags.ALWAYS_OFF;" E2 @3 N% b" B
Defaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;3 _8 e/ y: q0 ^0 X2 W) Q: y
8 J% u2 j3 O# _. d& C
/* override diags mask for selected modules */
8 B; x$ f& P: Fxdc.useModule('xdc.runtime.Main');
6 f, e9 ~# B' t3 C7 I: p" ?Diags.setMaskMeta(( u: V0 D  {2 w* v6 ]- E8 K! S' V
    "xdc.runtime.Main",6 y+ J, t' G) h& x$ r, ~6 W
    Diags.ENTRY | Diags.EXIT | Diags.INFO,' _' n6 d' H. ~
    Diags.RUNTIME_ON
2 ?/ O3 e. u' H0 u. N+ y' |);( H6 m2 Y5 n- p* h1 b
8 x$ v0 w+ ?% P/ J: Y
var Registry = xdc.useModule('xdc.runtime.Registry');9 k. K# ~/ z2 e6 B
Registry.common$.diags_ENTRY = Diags.RUNTIME_OFF;9 [/ d- e( `8 x& v- i' x. N
Registry.common$.diags_EXIT  = Diags.RUNTIME_OFF;/ Y! |' e! c' Z( K4 ]
Registry.common$.diags_INFO  = Diags.RUNTIME_OFF;1 s5 N' R9 o5 f- @5 e$ b5 D
Registry.common$.diags_USER1 = Diags.RUNTIME_OFF;
* g% r2 F' [6 c1 T) f
+ g2 m. t* @* ]/* create a logger instance */( \; Z8 c- |& W! |
var LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');
& G1 z# Y5 i5 L8 P" j$ j' j1 H3 }var loggerBufP = new LoggerBuf.Params();
% D! k5 K; E/ Y+ r& o: BloggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */
3 ]( X- b% W  W( ologgerBufP.bufType = LoggerBuf.BufType_FIXED;: e9 |, T2 }2 Q* P% v% u% `

. j' F- G6 y7 Y9 Lvar appLogger = LoggerBuf.create(loggerBufP);
2 y  _# T* Q" q' P4 t5 F7 |appLogger.instance.name = "AppLog_Core1";
: v1 y( ~2 D+ EDefaults.common$.logger = appLogger;; W; @" _' V! m2 ]4 Y. G% g: F0 g
Memory.defaultHeapSize = 0x8192;    ( X  I% B& V0 i' r. M
Idle.idleFxns[0] = "&LEDStatus";
! Q% e' X. ]2 k) O' B1 r7 sCache.initSize.l2Size = Cache.L2Size_32K;& A" u, b: i# w( w; b- K9 l% s8 T! T
% Y, N, `6 h  P. w
回复 支持 反对

使用道具 举报

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 */
3 `- g' v' i9 Fvar HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');! h( C" f% ?  Q( N- W3 g
var heapMemParams = new HeapMem.Params();
- J/ f8 [/ r6 J% {0 {4 s8 l" SheapMemParams.size = 0x4000;6 d, G" B7 ~& Y/ f" ^9 Z
& A  J8 g* n$ C. R7 p
var Memory = xdc.useModule('xdc.runtime.Memory');4 Q* @% `, [9 B
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);
+ r2 F0 w! {$ N+ b
' @3 D) X- ]. p; f% E/ C我大约calloc  每次共计大小为5K*16bits,2 |' Q7 |/ I* t( G7 U* ~9 N1 C
而默认配置才0x4000、需要改大。) f' {& @4 M, i+ x/ z) @- X0 E6 t

& y6 ]6 }3 |$ a& h7 Q' ~
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
5#
 楼主| 发表于 2015-10-28 16:14:47 | 只看该作者
/* no rts heap */( s& Z" o  L' a5 c9 [! B! \
Program.heap = 0;
! N9 c1 T) `/ F# F$ w- m, G; kProgram.argSize = 100;  /* minimum size */8 w0 J; j( b+ p  w3 j
Program.stack = 0xF000;                   //我改到F000  也不行
回复 支持 反对

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

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

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2026-1-14 05:39 , Processed in 0.041930 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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