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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2015-9-4 08:33:31 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
创龙工程师你好,我在OMAPL138单独调试DSP程序(使用SYSBIOS)时,在任务中使用calloc函数动态申请内存,用完后free,类似如下结构" q) L7 M8 u; K/ C; l
. ], \. r: k% e7 ^' M
    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //2563 k7 J5 [3 @/ O" `, G  C- j8 `% S8 Y

  R6 ~  ^+ {# Z$ x" O- P0 g其他程序段。。。。。
- p  Z/ ^6 M# N1 s- l
5 N' S/ t  p1 J. y/ Z$ m   free(x_d);
  t5 W! s& f) I! w
# i7 U/ K6 i5 n) N7 l: _% S* _使用DSP侧单独调试功能,验证动态申请没有问题,
8 r! z: s9 x* s' i* s
1 @) v$ R: O, @% D5 o; ~& R/ v但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。
# j1 N: b. p7 F2 v

1 m8 ], v2 F( A* z  i" p' N* s" O2 T. Q/ M3 t( I, |

5 ]" l0 s% d, ?) x3 `0 M3 Q2 U2 w) o& y1 D' x+ a  Z2 h3 i; t
4 ]+ [* t  I6 K' ?

5 j8 H+ F. s8 N  W1 N2 C- W4 F9 @; @" |* U: p2 [

* m: @4 ~$ h0 G, X" }- Z4 C# }
4 u- _  V6 `9 C$ @
) ~( Y2 _+ T: w4 j3 C4 U; K
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2015-9-4 10:29:21 | 只看该作者
补充说明2 d. m1 O0 H0 N% D
我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下, h, [: ^- `9 M8 `/ O) F
(不过疑惑的是,为何单独DSP仿真就没有问题呢?). b4 k9 l1 a2 L) d1 ^8 }) m

' u  t/ O: D' {是不是需要在DSP.CFG中进行配置
6 S& Y1 `$ p  j& \# O我现在的配置为
' B0 t6 f: n0 Z9 y4 r# H4 f# S3 e% J1 S# J1 s3 x
/*, s1 A( D( z% j6 `3 b4 x; M
*  ======== Operating System Configuration ========
* e5 H9 Y0 x$ x0 ^$ W9 g( G */# y4 }6 M! f4 _  }1 ^1 z: ]

+ W9 I9 D/ _; F0 |8 J/* no rts heap */
' q8 b! w% K1 _0 ^% Y0 Q8 RProgram.heap = 0;
  n% E$ C, Y( @% ?8 o- h9 uProgram.argSize = 100;  /* minimum size */4 v/ v  {( B+ Y, ^- V3 W
Program.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大
* F0 {/ H/ r0 N5 n2 T- i! J2 U( F; S$ g! Q5 Q! u/ |* d' _
/* create a default heap */
5 e; \( H' [/ h! Jvar HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');+ Z( O' X) Y& K( j7 `# N, X
var heapMemParams = new HeapMem.Params();
& C% m% D; j  A1 f- p- y+ UheapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大
. B  Y) \8 N2 y) j4 x" I
8 k* ~8 `: Y, P, v4 \
var Memory = xdc.useModule('xdc.runtime.Memory');4 m7 {% }5 ^! i& \5 s
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);- q; l1 Q! j+ p4 f  \; k; f4 f) }

5 p! a- b. m# s3 m/* configure System module */0 P+ \$ B0 \4 \7 L' d" y" B4 b! g
var SysMin = xdc.useModule('xdc.runtime.SysMin');/ b5 M3 w, }- q) E4 o# \
SysMin.bufSize = 0x1000;
$ @! l" A; Y! G! W, j" N% Y- DSysMin.flushAtExit = false;
6 Y1 \9 B* X9 a( Z5 v2 |
9 z8 O5 J* q; k/ c; c1 {9 nvar System = xdc.useModule('xdc.runtime.System');" Y5 o6 F4 a8 n% }: s5 H5 m
System.SupportProxy = SysMin;. b0 N! N1 G$ l8 S+ H

* [! p+ D2 z& f; s- ^' k# J/* configure SysBios to use the lower half of Timer 1 */
+ u7 w# p$ c! i8 dvar Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');2 N4 s5 m- a, E# D
var Clock = xdc.useModule('ti.sysbios.knl.Clock');( ]- F* b1 k' X9 A7 Y" S
Timer.timerSettings[1].master = true;
0 \" B9 H9 S* c) D+ {Timer.defaultHalf = Timer.Half_LOWER;
8 T( C1 n0 F% j1 v! p, UClock.timerId = 1;* ?: F7 g& Y7 T3 s
1 m3 k, v- t& a
' \' k- |" [9 @9 {6 h- h, X
/*
1 A' n0 I8 g. f8 ]7 w; q4 { *  ======== Miscellaneous Configuration ========) k* ^' g5 V: e" G, x) E
*/
* k* E/ `  a& s+ h7 A8 N1 O- a' T" o. \
/* set default diags mask */
/ \' \- y( y. C9 |9 avar Diags = xdc.useModule('xdc.runtime.Diags');" l0 ~6 s& Y, E1 v9 a% C' o% B
var Defaults = xdc.useModule('xdc.runtime.Defaults');
1 T6 V! p5 {9 h4 ?* N* v% j$ ~& H: N+ P" A8 j! {% R
Defaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;, N/ u/ n! J3 g" [" b
Defaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;# b  V8 b& N! W4 W! ^
Defaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;' b. ^" d, S) R4 Y: z6 f
Defaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */
' I, L. W: X4 ?  p* Y6 t- J% kDefaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */, O6 L) O1 P) f/ W2 k
Defaults.common$.diags_STATUS    = Diags.RUNTIME_ON;
$ B) X4 p6 n! s  ~/ VDefaults.common$.diags_USER1     = Diags.ALWAYS_OFF;
/ p5 S; x6 z" k2 n6 pDefaults.common$.diags_USER2     = Diags.ALWAYS_OFF;7 R2 J* A& T( f5 N; k9 g3 @# t
Defaults.common$.diags_USER3     = Diags.ALWAYS_OFF;  ^- t" S; X7 v
Defaults.common$.diags_USER4     = Diags.ALWAYS_OFF;
: v; n' [( n; UDefaults.common$.diags_USER5     = Diags.ALWAYS_OFF;- @( G9 c/ u4 p) B: s# f' P5 e
Defaults.common$.diags_USER6     = Diags.ALWAYS_OFF;2 I& q4 f+ E' A" C# l5 S
Defaults.common$.diags_INFO      = Diags.ALWAYS_OFF;! @" q. P( n5 k; }& y- y6 D8 {6 U
Defaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;
0 j) }  I! U) e
& i) b- h, I7 M- F' t/* override diags mask for selected modules */
4 Z( J/ S" d! _% v" y* k: \xdc.useModule('xdc.runtime.Main');
- S$ s/ h! E8 s* i; tDiags.setMaskMeta(( H: o% ~' e7 {" p. f& R
    "xdc.runtime.Main",
% t$ S4 t9 ^2 ~* V' F6 F1 b    Diags.ENTRY | Diags.EXIT | Diags.INFO,
  v8 k8 T3 ^( o* ~' I, }1 [, B$ g    Diags.RUNTIME_ON! f* v, ]( J' W
);0 {; c% h0 Y; S- F7 a; `

7 l0 `: r6 @/ K; Q* dvar Registry = xdc.useModule('xdc.runtime.Registry');) \9 I0 O/ w: S0 B) R! x8 ^
Registry.common$.diags_ENTRY = Diags.RUNTIME_OFF;
4 A9 o0 |) G: v5 H1 S- D  c. I% ^/ R3 `3 ORegistry.common$.diags_EXIT  = Diags.RUNTIME_OFF;
# d! V; T2 W& k  V2 YRegistry.common$.diags_INFO  = Diags.RUNTIME_OFF;
9 m) @# e! c* TRegistry.common$.diags_USER1 = Diags.RUNTIME_OFF;
1 B) S6 l$ {1 p% A
- Y7 t0 F/ l4 U0 j/* create a logger instance */
6 l) w- _) h! M& Y6 x% Uvar LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');& h# h* h3 b- U2 {- O
var loggerBufP = new LoggerBuf.Params();3 y2 E' M5 o, E0 J& Q* K5 C
loggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory *// k( u0 F) f  q/ H2 u. _' {
loggerBufP.bufType = LoggerBuf.BufType_FIXED;" \/ u9 r# Q0 r8 H3 G0 v% q% P8 C7 o% E

. ?/ M8 L' f: H8 Lvar appLogger = LoggerBuf.create(loggerBufP);
& F# H! ]0 j5 s4 k: x! M0 \appLogger.instance.name = "AppLog_Core1";1 U& T$ b5 h9 B, J. ?5 _) b1 t
Defaults.common$.logger = appLogger;/ a# B- Y, u* ?5 F# f; Q0 I* g& T
Memory.defaultHeapSize = 0x8192;   
7 b/ A! B5 v: g; BIdle.idleFxns[0] = "&LEDStatus";4 l! e- }4 m$ b3 E$ N0 n. f
Cache.initSize.l2Size = Cache.L2Size_32K;* _' h/ K& M; p* u- D
5 e( z! k8 p; n1 W/ k& Y
回复 支持 反对

使用道具 举报

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 */  A* l; y- ^1 G/ E: x
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
7 H2 w4 h- L5 }0 W, ^var heapMemParams = new HeapMem.Params();2 ]% A; [2 {8 g2 E/ w1 a; u; l* T- t
heapMemParams.size = 0x4000;
# i" ?+ d" \9 x) b! @3 ~& u1 Q! k# I& U
var Memory = xdc.useModule('xdc.runtime.Memory');' B5 o6 q  }" c; Z% M8 [
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);' l8 g; J& W9 q5 i. [# E

4 c9 y/ k& ^1 u我大约calloc  每次共计大小为5K*16bits,
3 `5 A7 W3 b: e) k& Q0 r  p, ^而默认配置才0x4000、需要改大。5 f* h( r3 \0 D# y; ]3 Y+ }4 J+ t- {

* l! a. z2 x* S3 K
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
5#
 楼主| 发表于 2015-10-28 16:14:47 | 只看该作者
/* no rts heap */
8 h- }0 X2 T, s7 q. A& gProgram.heap = 0;
; u4 Z- k+ m# W# i- i& l, B9 wProgram.argSize = 100;  /* minimum size */3 c7 C3 a! n3 Z+ \6 T
Program.stack = 0xF000;                   //我改到F000  也不行
回复 支持 反对

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-4-30 10:32 , Processed in 0.041171 second(s), 23 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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