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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2015-9-4 08:33:31 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
创龙工程师你好,我在OMAPL138单独调试DSP程序(使用SYSBIOS)时,在任务中使用calloc函数动态申请内存,用完后free,类似如下结构
9 o; Y7 q- p  L" U1 X
: C& j9 w( @+ W" Y* \! v7 F$ I1 s2 M    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //256
! w  L2 O: X' Z/ k' K
) g6 o' w: z2 M7 K5 d3 ?' P其他程序段。。。。。
) o2 u% I" I2 |1 Z7 r
) |) v* h9 _3 ?8 N   free(x_d);' @, H% s( C8 Y7 ~
# o" g8 ~4 p, Z
使用DSP侧单独调试功能,验证动态申请没有问题,
/ G. j% u$ X0 R0 E' Y+ s* H' j/ {
% }' B' A4 U1 _* X4 O1 M7 f: y但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。
/ R6 c+ x4 a% R

' b" C' \6 A& _/ O$ r$ H, V4 Y# [3 }6 l8 {- l

! i  D2 H6 M/ p; U; ]/ P
' W% ^/ Z5 {7 h) Z
. L, j4 S" j3 @- ]% N( }2 ^
0 g: [, c" M* B9 z/ g& a& l- N+ w
* ?- h& p- z$ H* J% P
. `6 q( U4 d0 Y' b1 ^' O- z' q5 R* ]6 I& D9 ^7 j

; s3 J* J* X! V9 {: P( V* t2 d7 Z
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2015-9-4 10:29:21 | 只看该作者
补充说明
$ X1 t  F/ o2 w) ^" X我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下. B# u; F3 Q5 a% ?
(不过疑惑的是,为何单独DSP仿真就没有问题呢?). q/ X$ s* {. c- n' [& @
8 `. @2 y+ v1 k2 ]1 B# U
是不是需要在DSP.CFG中进行配置7 O, r' O: ^- A: M0 R9 ?* O9 G" G' u
我现在的配置为
) I. \6 G, _8 S9 V  ]: k
! ^/ _  \% I4 Y% A1 J' f/*
( v6 q3 X5 _. I* | *  ======== Operating System Configuration ========3 ~7 P1 z% |. F- P
*/
0 t% V, O* i( @: P8 I
1 S$ m1 q* x& {& o/* no rts heap */
0 P' A" D" D# z0 s) V$ u1 }6 pProgram.heap = 0;6 A* o6 j& b- E  s; b8 X
Program.argSize = 100;  /* minimum size */
1 j2 l9 m, ^" dProgram.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大7 k4 [: P# }' \. A! p. C% s) R
/ F3 T1 N  E) [( `& a1 R
/* create a default heap */
' h- h9 B9 L7 q, d; Avar HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
5 ^7 [) d; x9 p) M) @  p9 Kvar heapMemParams = new HeapMem.Params();
! h. v7 W8 O2 gheapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大
) @- y+ _1 f6 I, v. o% t
# i( s+ k) N  k/ c; e
var Memory = xdc.useModule('xdc.runtime.Memory');4 q5 T! b" o1 r1 S) H4 s
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);  f  x9 Q2 e2 i! X

6 F) n1 A% Z7 ?$ S1 a2 [/* configure System module */
$ w7 F( K" U) B5 i% @' Z* Mvar SysMin = xdc.useModule('xdc.runtime.SysMin');
- r; c1 j9 B% SSysMin.bufSize = 0x1000;6 k. j- a) r  ^6 r( x
SysMin.flushAtExit = false;
1 l# \0 l: a- V7 J
: V0 U1 ~; R; U/ I5 w  \8 |7 ^4 Kvar System = xdc.useModule('xdc.runtime.System');+ Q! u4 _! i5 d$ l
System.SupportProxy = SysMin;
. Y' _7 A- h3 S8 L! G4 O; I1 R# J3 H4 ^2 X, Z/ D) ?7 O
/* configure SysBios to use the lower half of Timer 1 */* h. O( K: J, N% Z+ ?1 j; U
var Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');
: A" i% d% H& v; uvar Clock = xdc.useModule('ti.sysbios.knl.Clock');
$ H' I( H* G8 J& |Timer.timerSettings[1].master = true;
* K9 H0 W1 B# C' W! jTimer.defaultHalf = Timer.Half_LOWER;6 y# Z% {' n7 _; _, T) g% Q: a, P
Clock.timerId = 1;
- v1 ]! t' @* \# j3 F" j4 d
5 J1 G/ |$ w2 X% B# W: I5 t3 J9 {
4 T+ V# I) m, T& n; n8 m! Q/*8 J* K8 m7 Y8 e* u
*  ======== Miscellaneous Configuration ========
: Q$ Z9 P2 l3 V" m* } */# D$ c# J0 G8 G+ x  m9 l9 L

+ c" a1 O% \2 ]" n/* set default diags mask */) Q' _: o/ p! I' l" g. q7 w
var Diags = xdc.useModule('xdc.runtime.Diags');
5 r& r6 x' |: ^  \' q$ R# |+ evar Defaults = xdc.useModule('xdc.runtime.Defaults');
! D1 d, H9 k) i) e2 i5 `3 k" B4 g
$ Z8 w* T$ N8 R; h* zDefaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;. i. j* R" N! l4 z8 t9 z" ?, Y
Defaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;
( X  m8 L. ]4 }% U6 n5 E& @Defaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;4 f# j. |2 x+ }0 [, X. z) ~
Defaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */$ \: g! L3 K8 c7 z8 Z
Defaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */
; P+ }( |0 R6 b7 q7 {. a) ~/ nDefaults.common$.diags_STATUS    = Diags.RUNTIME_ON;
: }; ^% f( _, l4 _+ q0 C" m  }: ~Defaults.common$.diags_USER1     = Diags.ALWAYS_OFF;
# G+ G6 F1 [3 P+ pDefaults.common$.diags_USER2     = Diags.ALWAYS_OFF;
( G5 j  f+ @# a% e3 wDefaults.common$.diags_USER3     = Diags.ALWAYS_OFF;# A  G. D% m4 u2 H$ N' }
Defaults.common$.diags_USER4     = Diags.ALWAYS_OFF;
. @# L% p% s; P+ M- yDefaults.common$.diags_USER5     = Diags.ALWAYS_OFF;
9 g4 ~* I; m" eDefaults.common$.diags_USER6     = Diags.ALWAYS_OFF;; _  N9 Y  \+ m
Defaults.common$.diags_INFO      = Diags.ALWAYS_OFF;! p% d; X1 a4 ^1 h; R' F0 F
Defaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;7 w0 V7 b- R, u/ Q+ e

) o6 M2 H3 J1 u  U/* override diags mask for selected modules */5 M0 `7 E9 \0 y( s% H; j
xdc.useModule('xdc.runtime.Main');
: B5 k4 B4 o; M8 P* ADiags.setMaskMeta($ d* K* s' M$ F7 A- m# C# f
    "xdc.runtime.Main",
( F3 r/ o4 |% s0 R    Diags.ENTRY | Diags.EXIT | Diags.INFO,
9 R2 z, C3 ?( x) j  F- _' Q    Diags.RUNTIME_ON4 M0 K, U5 C- [+ t
);
6 j% e+ |, N! ~) b8 }# D* \3 ]/ w1 k6 B3 x
var Registry = xdc.useModule('xdc.runtime.Registry');: q8 A' j( H( e8 `4 h  N
Registry.common$.diags_ENTRY = Diags.RUNTIME_OFF;! h0 O. y. D) h- U6 S
Registry.common$.diags_EXIT  = Diags.RUNTIME_OFF;# s, O4 J, ]3 d
Registry.common$.diags_INFO  = Diags.RUNTIME_OFF;
/ Q& ^8 E) }) r4 b1 p3 gRegistry.common$.diags_USER1 = Diags.RUNTIME_OFF;( L% k0 ?" R5 d1 O
9 V- C0 q: G* r* G
/* create a logger instance */
7 _3 X+ y: @2 W& W& tvar LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');6 K( w7 V1 h% }7 c3 p9 |3 ^6 @- ^
var loggerBufP = new LoggerBuf.Params();
# e5 l9 v% u2 [' Y( nloggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */
- j( H! q8 D6 T% w! ]8 S: J3 [loggerBufP.bufType = LoggerBuf.BufType_FIXED;+ p  F) ~* i6 l9 Y: D4 B, I

- y. ^+ j- f& `! N- J8 uvar appLogger = LoggerBuf.create(loggerBufP);
* g( L/ z: g: W4 }appLogger.instance.name = "AppLog_Core1";
% ]/ Z% S) x0 i/ n1 I- A; Q7 cDefaults.common$.logger = appLogger;/ v) R( u+ b& v8 x; ]7 x
Memory.defaultHeapSize = 0x8192;    & I% d, O) m, n& `" H6 H2 z
Idle.idleFxns[0] = "&LEDStatus";# {! K( R  Q. z
Cache.initSize.l2Size = Cache.L2Size_32K;7 g. q' `2 p9 H# S+ h
3 e' v4 V- j; M' @1 A4 J" L# x
回复 支持 反对

使用道具 举报

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 *// }" x! E6 x* u1 h7 f3 ~* |/ _7 {: J
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');/ x8 T5 _0 k7 t! z8 ^
var heapMemParams = new HeapMem.Params();
2 W! u- s4 T# i+ V3 A! eheapMemParams.size = 0x4000;1 E4 X( h3 P0 [' L
( t- a+ ~4 p" m- T
var Memory = xdc.useModule('xdc.runtime.Memory');1 }8 b8 \! r- x
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);
+ ^( j8 _' s) V# G, \( u$ ~4 Q0 I3 ]  z/ g7 a
我大约calloc  每次共计大小为5K*16bits,1 ]& N9 `6 Z8 ^0 N* q' b' y0 J/ X
而默认配置才0x4000、需要改大。
: c$ o* N- M, q4 p6 G' D
/ z. {- s( O: O! W0 M1 L. H" t/ e
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
5#
 楼主| 发表于 2015-10-28 16:14:47 | 只看该作者
/* no rts heap */$ a; f' y% i: D
Program.heap = 0;( B& Z2 u# o( n1 W
Program.argSize = 100;  /* minimum size */# d8 ]7 S' \6 b7 n
Program.stack = 0xF000;                   //我改到F000  也不行
回复 支持 反对

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-12-22 21:13 , Processed in 0.040194 second(s), 23 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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