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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

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

8 j# F8 c* U1 e  a. I    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //2561 W: ?! i4 b( D6 g0 G2 }! S
: X( e# l6 O- i' m* g) E# L
其他程序段。。。。。: N$ o$ f/ o9 A' J5 A, A: e, V

3 b7 f! q: n' F% x% X/ \   free(x_d);1 X$ v* B) j% H! q1 {. s
; T1 j$ |0 x0 c* l
使用DSP侧单独调试功能,验证动态申请没有问题,
' {( T3 O6 u$ _$ {/ O3 P( x. p
! }0 B. x0 `7 c3 J# A8 E但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。" o3 [6 P. h/ k4 L7 y, `6 `% A
% U" N+ u4 x! |, h( R2 v

5 F+ A9 P4 E( r0 X
  ^* D7 ^' o  o! @. [3 n0 Q, r
$ L& F, e$ d+ S& U3 a9 X) l- ^# K! \6 k7 G$ C
, z3 h' G7 {" ~

+ w  [' o! a6 ]8 J/ R: Z/ k9 X2 i$ r8 r, `+ m9 b, r2 J9 k+ P

  I7 h( t! n5 V+ F# f4 I+ f% X9 ?- s. F) e2 x3 t4 [0 i# K
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2015-9-4 10:29:21 | 只看该作者
补充说明& b3 D: d6 @! v3 \; r. v" l, A
我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下7 Y/ H6 q9 w5 m
(不过疑惑的是,为何单独DSP仿真就没有问题呢?)
0 b) p3 x% r: D* A" C& t  U
4 R- O5 A, ^/ n+ \
是不是需要在DSP.CFG中进行配置, U" o: E  i! A4 ]$ E
我现在的配置为8 w) Z$ A) ]( ?# g/ m9 S) j
6 z' X4 j( Y& L; J6 |
/*7 b2 y. ^  e5 q& B9 n
*  ======== Operating System Configuration ========9 |  x; u! {2 \/ l
*/
' L3 l6 t% W0 F2 h  ~$ w6 F* b0 |
/* no rts heap */+ q- a  B: f: u& N& r! t( e
Program.heap = 0;0 D. B  z3 g4 G/ V" j* B
Program.argSize = 100;  /* minimum size */
) V# C8 w! G' d* @Program.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大
- F/ z, R# y3 c+ q+ `2 e
) Q' f: ]8 l( Y8 c/* create a default heap */
% S% |3 A$ M9 p9 R+ B4 Pvar HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');) G; ^1 B( d4 r# J' o+ B4 [9 U( x
var heapMemParams = new HeapMem.Params();
5 H$ o: W: h3 }4 ?4 R5 }heapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大
& {! n5 L* X5 H2 e" x6 r2 A2 d6 U
' v( |. r$ R3 g3 `* e
var Memory = xdc.useModule('xdc.runtime.Memory');
) r6 C$ ^2 A4 _: l% @5 S; {. xMemory.defaultHeapInstance = HeapMem.create(heapMemParams);
; S/ }; k  z8 @+ ]2 u6 @) a1 Q3 g7 l7 h
/* configure System module */7 T3 w$ b% \) l8 V$ @" i5 K. A
var SysMin = xdc.useModule('xdc.runtime.SysMin');
; [% `3 B2 l9 \: \SysMin.bufSize = 0x1000;! Q4 R+ @: q) Z! e6 i* ?
SysMin.flushAtExit = false;
; H  [5 U, M" W# m
- u5 A7 e( v9 qvar System = xdc.useModule('xdc.runtime.System');
) N& Z! T  k8 z: wSystem.SupportProxy = SysMin;
! L' C3 N  m2 a" g4 H( t2 ]) p2 p6 k- r. y3 c8 y4 }
/* configure SysBios to use the lower half of Timer 1 */
3 K( a# `$ ^6 w: N6 u5 H; ovar Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');; n6 @& P' H. f6 A4 I
var Clock = xdc.useModule('ti.sysbios.knl.Clock');( V. X# O0 [! Y& Q+ d7 U( q( C
Timer.timerSettings[1].master = true;, d4 U: R' Z$ N# ~  J& {* [8 C
Timer.defaultHalf = Timer.Half_LOWER;! `+ l. W, u/ b: v+ f& N  q
Clock.timerId = 1;
8 @& D+ o5 e: o8 N! q: @4 I. B. s' `1 ~- l& c

. y4 `6 @( [5 r& U9 a/*1 `8 w4 n7 u0 @+ B) |* L
*  ======== Miscellaneous Configuration ========5 W/ N9 U8 T+ g' U
*/0 r* e$ o( C% W; B# g: p* e# C

5 E1 ]4 q( R4 F& ?$ l, P/ m' s/* set default diags mask */( L+ l9 d5 U3 M* Y& I
var Diags = xdc.useModule('xdc.runtime.Diags');) z& S5 w$ f) v# l
var Defaults = xdc.useModule('xdc.runtime.Defaults');" x2 D7 ?$ B) V( ~& L
- {9 t% z3 e% F; E% s2 F
Defaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;
; x4 L2 c8 A: t8 ZDefaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;: ?( E8 F3 R9 a  m; N; p1 K
Defaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;  I$ S! c* g2 G% X% {  I
Defaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */
, s& S# J2 z1 w, S; K# V; TDefaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */
5 S9 ?2 i% R$ ]- MDefaults.common$.diags_STATUS    = Diags.RUNTIME_ON;
; H5 q! g! d" _" x/ HDefaults.common$.diags_USER1     = Diags.ALWAYS_OFF;
: V0 }3 T* K1 ]) D0 T; A# V; LDefaults.common$.diags_USER2     = Diags.ALWAYS_OFF;) n2 W) ]: T; w
Defaults.common$.diags_USER3     = Diags.ALWAYS_OFF;6 Y# S" t. z" `+ b7 o! |; d/ S2 ?
Defaults.common$.diags_USER4     = Diags.ALWAYS_OFF;
8 G  L" j, I* K+ O) ~) t% Y( XDefaults.common$.diags_USER5     = Diags.ALWAYS_OFF;& {3 q/ `1 u2 b+ I, l- l
Defaults.common$.diags_USER6     = Diags.ALWAYS_OFF;2 [/ O, d0 Z7 C. w  K# P) a
Defaults.common$.diags_INFO      = Diags.ALWAYS_OFF;
1 o# }# V+ T0 L( u  {( {. CDefaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;
+ W5 v! s! l3 R& B5 E; Z7 _
% [% Y3 O& j4 [7 r1 I0 c/* override diags mask for selected modules */
! w& k8 v# \7 W5 q) W' ?* ~  u: y: dxdc.useModule('xdc.runtime.Main');
* w2 T7 [6 X3 U2 sDiags.setMaskMeta(5 s  m% L# @5 ?* {& _
    "xdc.runtime.Main",
& \1 Y1 m. Q' ~. n    Diags.ENTRY | Diags.EXIT | Diags.INFO,, |& a% g5 G; R! e; H$ S) J
    Diags.RUNTIME_ON
) t: i# F, c+ X+ h* L! y0 R);
5 F- S5 ?& M" z2 p% m# g+ A
& ^' l7 {2 b4 r. R& ~2 a. \' y. S) _9 avar Registry = xdc.useModule('xdc.runtime.Registry');$ J+ f+ e. K: j& p* }5 i  h3 ~8 z, N) W
Registry.common$.diags_ENTRY = Diags.RUNTIME_OFF;0 h  u) o. a4 O6 z4 \; _
Registry.common$.diags_EXIT  = Diags.RUNTIME_OFF;; B' T4 }+ U/ i- M# t: T7 z) o7 s
Registry.common$.diags_INFO  = Diags.RUNTIME_OFF;8 h9 d6 O# O' [& P/ T
Registry.common$.diags_USER1 = Diags.RUNTIME_OFF;
- e1 e) T1 T9 C1 H- \/ P; j3 G0 E, B9 o3 ~
/* create a logger instance */7 W, a; K9 ]4 J8 |/ w3 i1 l: s0 ?0 E4 J
var LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');. m1 w, k2 A7 R4 {, r. X: T" w- I
var loggerBufP = new LoggerBuf.Params();0 |; k" e, m8 J, V8 v! C) r
loggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */% m2 L5 y) @3 M1 q" Y; P
loggerBufP.bufType = LoggerBuf.BufType_FIXED;' S# s( ^. L! R0 d
8 |- s5 Y6 n  r5 k8 e
var appLogger = LoggerBuf.create(loggerBufP);6 l. r! G# S! b  `
appLogger.instance.name = "AppLog_Core1";0 {& D$ j/ Y. F* w0 @& X
Defaults.common$.logger = appLogger;
0 T+ e# W* k5 W1 CMemory.defaultHeapSize = 0x8192;   
; Z7 T9 n2 U3 uIdle.idleFxns[0] = "&LEDStatus";
/ U( g+ s0 _% }, e# l& q+ \" |# tCache.initSize.l2Size = Cache.L2Size_32K;
, d: `. b' _) E% @( W: O. z4 }" k6 \. }- ^- H. 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 */! S9 T% L; Q% A$ Y! s
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');  G. G- H! G7 }1 i3 ]
var heapMemParams = new HeapMem.Params();
0 k3 ?% q4 A3 E  V0 z& CheapMemParams.size = 0x4000;$ g* C. v6 `4 a2 @

" p2 N, {: c6 q. ?var Memory = xdc.useModule('xdc.runtime.Memory');
  y* T' C0 e( o" f) _Memory.defaultHeapInstance = HeapMem.create(heapMemParams);
1 P+ g# w, a! r/ B) W6 R" h, K0 W' P* I2 [, s" m
我大约calloc  每次共计大小为5K*16bits,+ ~& ?  b" l! E7 G' a) j8 m
而默认配置才0x4000、需要改大。
+ e% ~# C8 [# r7 Z. |
' F$ Y8 _4 s3 i$ s
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
5#
 楼主| 发表于 2015-10-28 16:14:47 | 只看该作者
/* no rts heap */
5 F' ]/ `3 D2 d- o4 KProgram.heap = 0;" B: U5 S: q: c
Program.argSize = 100;  /* minimum size */
) H* h7 U+ U6 ^9 i+ c2 AProgram.stack = 0xF000;                   //我改到F000  也不行
回复 支持 反对

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

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

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2026-3-20 06:06 , Processed in 0.052163 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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