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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2015-9-4 08:33:31 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
创龙工程师你好,我在OMAPL138单独调试DSP程序(使用SYSBIOS)时,在任务中使用calloc函数动态申请内存,用完后free,类似如下结构5 I0 O, H$ w' V1 d. t0 P8 F

; i) T# V0 F: G  [* z    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //256
- y, |6 Z; r- l7 V
  O( z" K' Z- M9 J( u3 m其他程序段。。。。。
1 _/ S% D4 W. [  X
0 M7 L# m5 J! `   free(x_d);
, u  ?" y/ t$ X) g, _* j! N8 Q& m1 w7 B6 a+ T
使用DSP侧单独调试功能,验证动态申请没有问题,
* J) m1 h1 D! x$ ^2 e. h, S8 S6 M; J' V
但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。! O+ N3 h3 F) t; G- Z/ |+ O3 q6 e
. z2 Z+ F8 A4 j, K- D
' }1 M, B0 C7 I( J' H3 B
& Z, I, O% s1 w. D% k

& a8 `* t( @1 ?0 Q- W' D" }( m; }# t3 L- z4 X0 p6 G
# e) Y$ H# k. E% d2 H' K

, [4 O1 L, j$ f4 B1 u$ o
" G8 j1 r6 F/ `( v! ]* W
) x3 x3 o  @% j$ [! z. C, X
% V* h1 j% A: T/ M7 d$ @  c+ P8 ^
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2015-9-4 10:29:21 | 只看该作者
补充说明
' [/ Q0 a: [, A5 a3 |; J7 L2 E我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下
9 h8 w4 s0 u/ u(不过疑惑的是,为何单独DSP仿真就没有问题呢?). a5 o0 x7 h7 x/ D( W6 T

( x' ^5 N' T) u- Q, b是不是需要在DSP.CFG中进行配置
$ }: f) y7 Z+ T6 f9 K我现在的配置为
% O1 b" }' \& D0 \) ]
8 {0 b& k/ b& B* G9 Z- C9 Y/*) J% ^% q/ [; r& i4 \# I
*  ======== Operating System Configuration ========( K8 |' l. ?4 ]: D' h% Y, T0 z
*/
( ?; F8 P* x0 l$ P3 a! \
# m. I+ p8 n- S& J/* no rts heap */
8 D  ]9 _  ^' M9 N" V' E2 I' s. XProgram.heap = 0;0 D, e& u- P2 T2 S
Program.argSize = 100;  /* minimum size */# ^3 a+ h0 ~% C5 U
Program.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大
2 ?+ o; ?7 D. P2 R3 }( }/ R% o, m8 }$ Z4 Z' S3 E. P; `4 ~
/* create a default heap */
/ R3 Y2 m" f; V3 m9 Wvar HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');/ J- ^. ?: J9 ~
var heapMemParams = new HeapMem.Params();
/ D" Y+ p8 ~: _' ?* u; h/ B+ ^heapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大1 g3 G1 m" b% y5 ^
& i0 o: d0 r8 |# F9 e
var Memory = xdc.useModule('xdc.runtime.Memory');
# P8 k$ m: i9 WMemory.defaultHeapInstance = HeapMem.create(heapMemParams);
! A% u1 C1 y# f$ f6 r* U, G/ c* c; ?2 _! T4 ?
/* configure System module */% C  L, O$ F+ g" l* ?4 v
var SysMin = xdc.useModule('xdc.runtime.SysMin');1 r3 T) l% {% a& N& @; K2 x* A
SysMin.bufSize = 0x1000;' n) @8 i, v  M7 y. Q+ ^' d
SysMin.flushAtExit = false;4 r. J3 ]1 y: c; D, `

* p% Y+ _, u! O$ y* k. ?, g( `' r! Kvar System = xdc.useModule('xdc.runtime.System');
' ~- I* t8 K4 `1 o: n' ^System.SupportProxy = SysMin;. k7 q; {7 Q1 g; X3 e" n& j

7 o/ f$ i* P6 q0 n3 z4 X/* configure SysBios to use the lower half of Timer 1 */* i+ N7 N5 }  I# e- J/ _) \) V
var Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');
, ^% x) E6 E/ x( p2 d; r8 Wvar Clock = xdc.useModule('ti.sysbios.knl.Clock');
) g$ a7 P- p" _1 w; sTimer.timerSettings[1].master = true;# Y# L7 {0 ]3 y& s& B0 K
Timer.defaultHalf = Timer.Half_LOWER;9 n2 _% A' y" v6 ?2 s
Clock.timerId = 1;: M2 _& ^2 T# D

+ G3 Y4 _0 E4 M+ J; A1 ^, V* B3 z% j3 [4 J
/*
- g& Z, e" |1 b& l, Q! l0 B- c *  ======== Miscellaneous Configuration ========
9 A0 ]: Q  O' Z% @* M" |* V */
# J+ k8 [/ e/ A  z0 W# X; u% @7 Q) t; \; W- y  v5 A  g
/* set default diags mask */$ i% O% E( N( Y1 a3 @0 A
var Diags = xdc.useModule('xdc.runtime.Diags');2 P0 C, A# p, k" v3 p2 S1 A
var Defaults = xdc.useModule('xdc.runtime.Defaults');: P/ f, ~1 I% ?* F% b
! t: q9 Z0 x: o: m  A- k$ `) o
Defaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;
7 l4 O8 z4 v% J/ }5 }Defaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;# Z5 ?$ Z: O# g# S2 f1 p
Defaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;
. L# Y" M5 r: v  L) VDefaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */
& [: G8 [/ x6 y0 h' [0 }! GDefaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */2 |+ Y3 ^1 \" e: P) k$ \
Defaults.common$.diags_STATUS    = Diags.RUNTIME_ON;7 h7 f# k0 E% n1 S+ y$ h
Defaults.common$.diags_USER1     = Diags.ALWAYS_OFF;0 h4 Y% N) s' B* n* [4 z" e
Defaults.common$.diags_USER2     = Diags.ALWAYS_OFF;
7 |: d: ^' g* ]3 R' X. N* fDefaults.common$.diags_USER3     = Diags.ALWAYS_OFF;
! @( D2 E% M0 wDefaults.common$.diags_USER4     = Diags.ALWAYS_OFF;
4 V1 b; C. A( V- j$ P) _0 vDefaults.common$.diags_USER5     = Diags.ALWAYS_OFF;5 h! \. W1 r2 z' g4 ?' k; i
Defaults.common$.diags_USER6     = Diags.ALWAYS_OFF;5 C: G! f7 o: U
Defaults.common$.diags_INFO      = Diags.ALWAYS_OFF;
3 I4 P. W' n- k" H9 m, W* YDefaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;" X* |' {  M. [) R/ H2 {7 _# f
2 {) Q1 p1 j, N7 r7 W1 F
/* override diags mask for selected modules */
+ J7 ?( M2 J; P) |/ m# i! X* kxdc.useModule('xdc.runtime.Main');
$ y+ `* A, S. G$ X  G0 [. j  U% MDiags.setMaskMeta(" F+ `. |% N7 q& }8 s( ]$ h
    "xdc.runtime.Main",
# R, q! {7 L5 ~2 y. p- v7 V    Diags.ENTRY | Diags.EXIT | Diags.INFO,* e% b/ F& ~# ?9 I
    Diags.RUNTIME_ON
- B+ A% _7 S# J4 v);
+ q9 l3 [5 k+ ]- a6 _1 g* V/ Y3 x3 B1 U
var Registry = xdc.useModule('xdc.runtime.Registry');' O  a7 R; h/ b0 _
Registry.common$.diags_ENTRY = Diags.RUNTIME_OFF;& }" K8 Y2 z7 M2 Z5 k
Registry.common$.diags_EXIT  = Diags.RUNTIME_OFF;
/ m1 R7 H6 y9 c3 E: K+ U7 FRegistry.common$.diags_INFO  = Diags.RUNTIME_OFF;( u& X# ]5 h9 o) \& p" }
Registry.common$.diags_USER1 = Diags.RUNTIME_OFF;
( E0 k) ~" M1 ^* H5 J' ^8 V" Z
' h' P. V- y1 j" Y; R- E+ i: P/* create a logger instance */& D% r3 q. @! ?! `
var LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');# O% E8 j# G0 v9 a
var loggerBufP = new LoggerBuf.Params();
% _/ R: D% |- l0 m( c, OloggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */- P$ u$ r2 p) Z" K9 B
loggerBufP.bufType = LoggerBuf.BufType_FIXED;, l( s4 D6 `4 \( c
; F' f- m/ I7 t3 P# H2 N
var appLogger = LoggerBuf.create(loggerBufP);* q* W% m- h3 M% {' j
appLogger.instance.name = "AppLog_Core1";" q* y9 |0 H& D  ^& |+ i& v
Defaults.common$.logger = appLogger;
7 |* Q) q5 l/ x# y3 OMemory.defaultHeapSize = 0x8192;   
5 W, {5 s+ _$ o8 a) J# Q6 ?, dIdle.idleFxns[0] = "&LEDStatus";: @/ Z4 g$ h0 m3 I& N  J8 R  y
Cache.initSize.l2Size = Cache.L2Size_32K;, C$ P5 P& |! W# |" {, `; `

1 V- V8 q6 X+ G1 p* f/ p) I& _, C
回复 支持 反对

使用道具 举报

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 */6 V% [$ s- U/ H/ {
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
6 _$ k, N  |6 [+ r7 Svar heapMemParams = new HeapMem.Params();
. G3 j5 V" y9 m* }, Q0 b! }& cheapMemParams.size = 0x4000;! `; P/ ^: @1 G( |+ W0 @
3 v$ V, Z2 l$ S) ]& ]! ^5 c
var Memory = xdc.useModule('xdc.runtime.Memory');% ^+ c( M# ^! a- g- _
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);/ h; ~9 J' B: ?/ |& S

: S" T4 }! x7 x我大约calloc  每次共计大小为5K*16bits,6 h# B" u0 _1 f- `
而默认配置才0x4000、需要改大。, g+ `! F1 Y( o* ?  }

3 o" M' o7 E# F- |0 l' O( N
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
5#
 楼主| 发表于 2015-10-28 16:14:47 | 只看该作者
/* no rts heap */! @! @' B" z" J) {$ R* s
Program.heap = 0;& d8 z8 }+ }, y
Program.argSize = 100;  /* minimum size */: C! I- t% i/ r0 D# x! M! q8 y
Program.stack = 0xF000;                   //我改到F000  也不行
回复 支持 反对

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

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

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2026-2-12 20:10 , Processed in 0.043166 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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