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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2015-9-4 08:33:31 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
创龙工程师你好,我在OMAPL138单独调试DSP程序(使用SYSBIOS)时,在任务中使用calloc函数动态申请内存,用完后free,类似如下结构
; Y+ s. Z& m) W, ]5 p7 g& `- p2 e9 ~. Z
    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //256$ u  \. r! @. `& G+ i: f# f" c

9 Y1 d4 A- l6 ?# p其他程序段。。。。。
3 ]. L% d% ^0 ?- }/ g+ w; ? % `* ?$ B* I! B7 `6 n( z1 H# n
   free(x_d);
5 y/ C3 E1 n. Q6 j  j/ Z5 M0 N& e. M, E  `1 F
使用DSP侧单独调试功能,验证动态申请没有问题,
; X$ Q% V- S1 u8 u
/ Q3 Y5 M* ]% ^- g但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。2 h3 s3 P& m1 _9 T" s. Q
5 @* X" a: _# O6 [% K$ e

, L- P  ?: [6 t  |: K8 m2 h: o
7 R3 ~( z5 m5 v- p
& e) [9 }; K0 J6 Q
" g: y8 U9 Z# ]+ l+ a) k2 e9 O( S. s3 N

3 v0 P* d  m/ U: e& q& p! N6 n; C( |' D4 u- ?! g0 A( b& j

& y' J' S/ a' b/ A( T# }! R0 _) r( _0 N' \) X. z5 c' R, E
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2015-9-4 10:29:21 | 只看该作者
补充说明2 g9 x1 K& A" \8 x! Z0 j1 Y
我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下
6 {5 h2 W3 r7 [1 C/ f6 W' Y% n(不过疑惑的是,为何单独DSP仿真就没有问题呢?)0 Z+ b  v6 G1 c' f' P9 m0 Z+ i, }
: P7 b& k  S) X3 r: n5 j1 b. t
是不是需要在DSP.CFG中进行配置& X. ?" H8 i% ~! e
我现在的配置为1 _  d1 j+ C: z6 t
9 S/ e8 e/ E* b1 u
/*& y. [+ {; L. L) I6 m
*  ======== Operating System Configuration ========2 }' ?2 s, d- x* v" C- ~
*/
. m. t* V2 h+ X8 E6 b5 \5 B: F) k3 L; |, n, v7 m) r2 @0 g3 R4 j, V: e- g
/* no rts heap */6 `# e, l, d& Y; H) k
Program.heap = 0;# Y3 b9 [( `: I5 }% S" x+ e! L
Program.argSize = 100;  /* minimum size */
7 k4 j& I1 h" {6 J' h% }  QProgram.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大0 f! S4 [% c2 L/ ?+ l$ m

3 ]0 G$ l; E2 Y; _& `: p/* create a default heap */+ e& u7 l0 Y. V& R/ {
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');; S: D6 C2 v  w( {3 W$ ?' O3 [
var heapMemParams = new HeapMem.Params();0 H' t  \$ G/ V7 Y+ g
heapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大
7 l/ f8 i8 u/ k5 l, H2 D+ z
  @, [* R4 y& F. N5 F
var Memory = xdc.useModule('xdc.runtime.Memory');& A1 f: A! b( ^+ P( s6 W
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);/ i) h1 e! z# b; ~+ O
; Y( u8 S; A1 v& U! e
/* configure System module */
* _  {% o: C) T% Y7 fvar SysMin = xdc.useModule('xdc.runtime.SysMin');
' t& M" R$ P3 q8 I0 t% W0 ^SysMin.bufSize = 0x1000;
3 q! k: B% H$ R1 u8 y! MSysMin.flushAtExit = false;; H1 w: v3 |. c: f3 `

2 O' T! E2 E$ n& D" Dvar System = xdc.useModule('xdc.runtime.System');
8 |* L; X& d! b0 g& K  mSystem.SupportProxy = SysMin;
! ~+ F. z: _% z3 i/ y8 S7 q- v  j- k7 q, [; Q
/* configure SysBios to use the lower half of Timer 1 */8 Y, N# u' ?" e/ q
var Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');
7 [: N! x) K/ _8 I- Yvar Clock = xdc.useModule('ti.sysbios.knl.Clock');; A5 k0 g) ]* u6 i' R4 \! |
Timer.timerSettings[1].master = true;; n7 ?2 o& g) J# p$ a7 U
Timer.defaultHalf = Timer.Half_LOWER;) J# |. m, g+ Y0 {* I
Clock.timerId = 1;
5 L1 a6 I) s  p' v  Y/ ]/ H3 m6 v/ S2 N

3 A( ~4 U  p) V7 ~9 |7 E3 b  T/*
1 |2 k. }  A+ ^: \% o *  ======== Miscellaneous Configuration ========9 B) R" }! C! }) y
*/' Y0 J  R2 u5 Z, t
4 A9 f1 V5 `( L- I7 J% L
/* set default diags mask */( V3 c6 D5 R: r6 r0 f5 s, q
var Diags = xdc.useModule('xdc.runtime.Diags');/ d1 C( u( k" W" H+ w3 O( I6 g
var Defaults = xdc.useModule('xdc.runtime.Defaults');
4 f3 ~. ~  T5 Z( f) c# f* k- R2 L2 H
; `4 U0 X" x# o5 U& ODefaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;, b+ Y! D3 V3 w+ k7 B8 ^! R/ O
Defaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;0 D: ]7 G$ ^7 w* p
Defaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;# }& M- b7 @: U) H2 Y9 H* _
Defaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */
7 w& P: \7 o2 {( V+ mDefaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */, j8 Q2 c* f8 B" ]
Defaults.common$.diags_STATUS    = Diags.RUNTIME_ON;+ W" f4 n1 f* N  ?8 j! A
Defaults.common$.diags_USER1     = Diags.ALWAYS_OFF;
' v' I) y' o* j0 U! L( |  F: m* F" QDefaults.common$.diags_USER2     = Diags.ALWAYS_OFF;4 g  t( G# W# n: e
Defaults.common$.diags_USER3     = Diags.ALWAYS_OFF;
1 R- Q+ M4 u0 s3 BDefaults.common$.diags_USER4     = Diags.ALWAYS_OFF;1 G+ d' J7 j0 S6 u4 {  L
Defaults.common$.diags_USER5     = Diags.ALWAYS_OFF;
' \. S, p# G$ O; y: XDefaults.common$.diags_USER6     = Diags.ALWAYS_OFF;
! P8 V5 @5 X6 b, N( TDefaults.common$.diags_INFO      = Diags.ALWAYS_OFF;- F; }9 o+ N* |6 h7 N% [
Defaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;
: ]: ], q1 e4 [
2 X# g' _* m% y) t6 B( H* m/* override diags mask for selected modules */
3 Y% J" p: Y8 r; U3 gxdc.useModule('xdc.runtime.Main');! j8 q# E  o& J- w
Diags.setMaskMeta(
2 X9 C  R- f6 B8 @: U( w1 c4 e" [    "xdc.runtime.Main",9 Z& M' U9 g- I3 j% o
    Diags.ENTRY | Diags.EXIT | Diags.INFO,
" \$ i% _; ], s7 t/ S    Diags.RUNTIME_ON+ ^/ v% f5 e+ |; A8 j0 }8 w' O' N
);. p3 C2 t/ H( \4 I' J
" L6 s$ P5 O1 a
var Registry = xdc.useModule('xdc.runtime.Registry');% [# A' g# Q$ c; u+ M( i2 B
Registry.common$.diags_ENTRY = Diags.RUNTIME_OFF;' m/ |3 @' K/ A$ H, B4 L$ E
Registry.common$.diags_EXIT  = Diags.RUNTIME_OFF;
6 w; n* ~$ x- {- VRegistry.common$.diags_INFO  = Diags.RUNTIME_OFF;
* w* ^( O: Y" s3 S- ?8 a) ?* |Registry.common$.diags_USER1 = Diags.RUNTIME_OFF;8 J3 X- T( @  I  n4 T$ C, K& y/ `5 a+ T- d

  ^8 W' p8 Q3 \' d4 g/* create a logger instance */
; Y( ?3 b; K' D9 w3 Q1 fvar LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');
) F& m. t7 _% Y8 v; \$ x+ Dvar loggerBufP = new LoggerBuf.Params();; k! R% E6 Z+ s5 {  l2 a
loggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */
' E6 o1 x6 o( f: j/ Q' k' u; b' c+ \loggerBufP.bufType = LoggerBuf.BufType_FIXED;' ~7 l  [: i4 t1 f$ I) K

: }$ W" Y7 E: Z) ~5 P# mvar appLogger = LoggerBuf.create(loggerBufP);
* M6 K* b8 E8 W  u8 KappLogger.instance.name = "AppLog_Core1";; E! p, a" z8 }# w1 i% _# Q
Defaults.common$.logger = appLogger;( F( q" w) o& z8 u3 Q
Memory.defaultHeapSize = 0x8192;   
# q( h) U. T: V( bIdle.idleFxns[0] = "&LEDStatus";4 W5 C& k8 }9 R7 x
Cache.initSize.l2Size = Cache.L2Size_32K;
* m5 T: S- j- }  }( T% I  Q6 s) m
回复 支持 反对

使用道具 举报

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 */7 p- M2 O5 i+ p6 x  C# b/ h, \
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');5 x; e0 `7 u# \
var heapMemParams = new HeapMem.Params();
+ g4 ]# e- W* J3 W7 [# |heapMemParams.size = 0x4000;+ Z6 ?/ r5 _" U. J6 g% V
2 e' a+ y( Y- _: ]3 d1 D  |" @, D
var Memory = xdc.useModule('xdc.runtime.Memory');
0 i* V: w" a; dMemory.defaultHeapInstance = HeapMem.create(heapMemParams);) o" ^0 I6 c% l9 o+ j. _6 P

7 n# @/ S; R9 K# x/ \2 x+ I9 A, _我大约calloc  每次共计大小为5K*16bits,
. P) \: @2 R8 M- o; ^( Z而默认配置才0x4000、需要改大。& P5 V& O* V  S5 A6 y" v# w

( R5 ?5 l4 P% T6 x8 g
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
5#
 楼主| 发表于 2015-10-28 16:14:47 | 只看该作者
/* no rts heap */8 r0 E0 r" X7 g) N& g6 u
Program.heap = 0;
4 R5 V, h" n+ H; f$ e* X# jProgram.argSize = 100;  /* minimum size */5 d$ e4 h1 _2 u) J: t8 s, _* ]7 L
Program.stack = 0xF000;                   //我改到F000  也不行
回复 支持 反对

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-6-16 08:19 , Processed in 0.038815 second(s), 23 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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