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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2015-9-4 08:33:31 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
创龙工程师你好,我在OMAPL138单独调试DSP程序(使用SYSBIOS)时,在任务中使用calloc函数动态申请内存,用完后free,类似如下结构
2 ?9 i% ~  c0 E& a9 \. A
1 a" X2 `0 ?- J8 \+ ^- A5 J, ?6 z/ x    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //256
+ z# a. [. L# A* y+ l$ _+ J. V4 T, q$ e5 e+ _2 G! }
其他程序段。。。。。6 `) M& B9 H+ X+ C

- \* V' B9 U8 D! f; [# j5 ?8 B   free(x_d);8 O+ y5 N2 n; g+ h- a/ s

6 h  [" [" K/ `$ ^7 u: r使用DSP侧单独调试功能,验证动态申请没有问题,
# o6 r7 d" H0 s+ `8 P* x: B) u/ `# x! B" u( i+ I$ g
但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。
( o, N- U6 @7 V5 w5 R
" q1 M# i5 S( L- S. p  d6 Q
4 C4 \7 o" D! K# V' U

3 ?  m% t+ v( A- P0 Z
9 x1 c/ }7 {9 K: U3 m9 m$ ?6 O" m6 }2 y: u+ j3 I! a
& l: B$ C& R" D/ {+ }4 |

  y3 T% y, r! m+ h+ ~" [! Y/ R& G/ o( u2 Y0 o7 p7 \

8 A+ N# K# D5 F# Y# I4 ?9 S2 J7 [/ j/ v/ v  j/ R
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2015-9-4 10:29:21 | 只看该作者
补充说明( L6 e0 l- f+ A" J! H, A
我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下
" L7 u) q$ n& Q( h- Q(不过疑惑的是,为何单独DSP仿真就没有问题呢?)
+ W2 I6 k4 v% L& V1 h

$ }$ _2 b" W( r* M是不是需要在DSP.CFG中进行配置! Z) F2 ?# }3 M5 L1 j
我现在的配置为
. v" H4 k! {& E0 m
+ P6 _. M: ^1 |6 O/*
" H, R# x, x# R *  ======== Operating System Configuration ========
2 w" `8 }/ O7 l1 P  |2 C */- R- t1 h0 H) ^) G, K
: e% x3 K- z- J) `# N) H! }: _1 A
/* no rts heap */
! M. G  C& K: N' p- V# b- c0 y, lProgram.heap = 0;
9 O$ ~4 @! w' k- EProgram.argSize = 100;  /* minimum size */
+ ?  O; S# }6 \" E. IProgram.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大
! P6 Q/ T0 }( p; I& J" q& |* D6 ~
( ?0 T7 I+ O5 ~; j+ R3 I/* create a default heap */
* n  _2 ]* U+ o7 y2 [9 qvar HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
& V, ]$ U1 i0 y" hvar heapMemParams = new HeapMem.Params();
$ R& O) b5 I% O0 @8 ]' nheapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大
3 [; |& J+ k5 c: V: p0 `, J' k; O+ T9 y  T* F. R& b& m
var Memory = xdc.useModule('xdc.runtime.Memory');
" |- Y/ ^+ }/ l0 ]( U9 H/ }4 @* FMemory.defaultHeapInstance = HeapMem.create(heapMemParams);3 e8 a- w0 M* ]  E- p, v+ r. Q
! ?! V2 K' L0 ~' X- i. ]
/* configure System module */
) g4 ?% E! _# M! v4 {! E/ ivar SysMin = xdc.useModule('xdc.runtime.SysMin');8 H6 Q" N" M" D% |2 O8 N/ Q
SysMin.bufSize = 0x1000;( {7 q( x- u1 K( x, B
SysMin.flushAtExit = false;; i' ?' }$ b, w# E) B
5 j- z+ Q. e! P
var System = xdc.useModule('xdc.runtime.System');+ q3 t- ?- a1 A% c
System.SupportProxy = SysMin;
5 S" U7 b, ~# J2 z8 |) T6 q1 L6 q! {* P+ j# u; V$ H& ~1 X% j
/* configure SysBios to use the lower half of Timer 1 */% V& i# [' G5 y) ?$ I; i
var Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');  o0 [7 D" z7 k) f5 s' l  S  A
var Clock = xdc.useModule('ti.sysbios.knl.Clock');7 J- X& M/ m2 X1 _( p! J) G! u& u
Timer.timerSettings[1].master = true;" k1 o' T; {6 K: j
Timer.defaultHalf = Timer.Half_LOWER;
3 e' z. h7 j: a' j. sClock.timerId = 1;
* v  T; K+ Z: Z6 a) {. F0 F9 r5 T/ }" t, g/ |9 W, l  l% C
1 v; r6 R( N# P2 ^
/** l% k3 f$ S  u8 ^( ^
*  ======== Miscellaneous Configuration ========. ?8 V/ \0 j: E. T' ]& }, ~
*/* \+ c- l" [; m- V4 M, b
. _5 |! q% h, _$ i0 H: b
/* set default diags mask */
1 p+ T% p& x% |2 D0 bvar Diags = xdc.useModule('xdc.runtime.Diags');
( B& C2 Z; ?& L* l1 ]6 Dvar Defaults = xdc.useModule('xdc.runtime.Defaults');5 Q0 h1 [' z) J7 m

# h- H3 q% I4 cDefaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;
" K, D- l8 ~$ p4 v9 j6 S, PDefaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;
% z3 b7 d$ X7 ^# e+ X, fDefaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;
7 N  L, Z; Q9 T, a) j' q9 mDefaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */
% f# p# E( S2 M" i/ yDefaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */. s8 \$ O$ ^) h: u9 t  A+ G1 A
Defaults.common$.diags_STATUS    = Diags.RUNTIME_ON;5 c1 p) k7 f) G. W# [$ I7 y# ?
Defaults.common$.diags_USER1     = Diags.ALWAYS_OFF;
8 I: _0 J, ?6 qDefaults.common$.diags_USER2     = Diags.ALWAYS_OFF;
8 y4 V7 a2 t4 a7 W6 FDefaults.common$.diags_USER3     = Diags.ALWAYS_OFF;. D5 A* X4 C8 k) C. J# T. T$ `! Q
Defaults.common$.diags_USER4     = Diags.ALWAYS_OFF;' h0 }. j% T9 P% D9 F) T
Defaults.common$.diags_USER5     = Diags.ALWAYS_OFF;% s. Y2 `# B  e; y+ F+ x
Defaults.common$.diags_USER6     = Diags.ALWAYS_OFF;
% m# a0 `5 l7 d5 N2 P0 mDefaults.common$.diags_INFO      = Diags.ALWAYS_OFF;5 O# P* R! H1 g1 r) \; i, |: p0 O
Defaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;$ X' Z( V4 w% @! l3 O

/ m7 `5 a  O, H6 v& Q# r0 p/* override diags mask for selected modules */
; \5 ^# K6 N- N, j$ d# Kxdc.useModule('xdc.runtime.Main');+ E# ?/ V6 ~) `+ }. N. v+ a, H
Diags.setMaskMeta(
4 B+ ]! `0 g9 p    "xdc.runtime.Main",
$ E, O9 \: {- o) C    Diags.ENTRY | Diags.EXIT | Diags.INFO,# j  i, e5 o8 l( s% H: C- l6 b9 o
    Diags.RUNTIME_ON! q5 F( w& d' C
);% }# e$ `8 E  d1 A& f

0 _, R; a8 O' {1 C5 n7 i. ~8 }var Registry = xdc.useModule('xdc.runtime.Registry');
- \  \( v! z$ w6 l2 R! J6 N/ MRegistry.common$.diags_ENTRY = Diags.RUNTIME_OFF;
& e8 I* C: N8 y' ^! z( uRegistry.common$.diags_EXIT  = Diags.RUNTIME_OFF;
1 Z1 H- H! ?% B& v! N% KRegistry.common$.diags_INFO  = Diags.RUNTIME_OFF;5 `- U5 q# @! q( M: M7 u1 s. t
Registry.common$.diags_USER1 = Diags.RUNTIME_OFF;6 G# `5 v0 M& F/ }" `6 B' }4 Y6 |+ |; ~
( a2 H0 Z" E. W3 l
/* create a logger instance */
. P8 J7 n: R; v) ]. K# l3 y' Pvar LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');
! O8 N; G2 a. ^- p: H. |. R, @var loggerBufP = new LoggerBuf.Params();$ s+ N& O( F: [
loggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */- e5 [8 V( f$ b$ D/ [/ o4 P0 c( b6 A
loggerBufP.bufType = LoggerBuf.BufType_FIXED;
4 T0 d: t0 y; \8 w, t) c8 i& w/ J' h" {
7 ?, R- i% ?9 j( v4 [4 ~% `var appLogger = LoggerBuf.create(loggerBufP);; }! C* f. ^$ K6 _$ }1 y
appLogger.instance.name = "AppLog_Core1";
1 ^* b# B; m, E' C! U  _Defaults.common$.logger = appLogger;
2 i, {( h1 D3 t- j$ t+ J; PMemory.defaultHeapSize = 0x8192;   
, C7 B9 z: y, F% f7 _5 \- rIdle.idleFxns[0] = "&LEDStatus";( R( U' {9 u' ^( d6 T0 b
Cache.initSize.l2Size = Cache.L2Size_32K;
; R  R  C. r: A0 o* d$ t  x2 ~. i9 W& r" c( @+ ~7 j
回复 支持 反对

使用道具 举报

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 */$ y6 N: O$ d' K8 B2 i) C/ A
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
/ L; L. p3 Y. G/ y1 b2 lvar heapMemParams = new HeapMem.Params();
" x! B- a4 F& nheapMemParams.size = 0x4000;
) s. s% O8 u  w0 k3 R
/ T6 O. @9 z: Pvar Memory = xdc.useModule('xdc.runtime.Memory');( T% H2 l9 B1 N3 b, n4 }6 K
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);
2 W5 B. F* ^8 W8 V- H4 V" v; ]% Q2 L. K8 o0 ^: t, h! H: d2 B$ K
我大约calloc  每次共计大小为5K*16bits,6 u' O9 k+ s2 S5 x
而默认配置才0x4000、需要改大。
+ t4 q# z! K' b/ W
& f7 @2 \- q) R
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
5#
 楼主| 发表于 2015-10-28 16:14:47 | 只看该作者
/* no rts heap */
6 f* k6 c3 Q4 ?2 R( dProgram.heap = 0;, Q7 l$ U" p8 r3 V9 n
Program.argSize = 100;  /* minimum size */
0 h4 b6 _3 Z  a  K9 J, t8 n: G  VProgram.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 14:07 , Processed in 0.041352 second(s), 23 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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