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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2015-9-4 08:33:31 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
创龙工程师你好,我在OMAPL138单独调试DSP程序(使用SYSBIOS)时,在任务中使用calloc函数动态申请内存,用完后free,类似如下结构
) j  r5 S6 ^/ e+ F3 W& T1 Q8 d, ~+ A
    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //256% m- {! @: y8 t' H

2 H' m, v0 I0 x; r. m5 }其他程序段。。。。。! w5 y  t  V8 e* I) R& {
& f4 q7 B7 t! J* J+ D- L/ |
   free(x_d);
# {  F/ D8 k- @& F8 M3 L, l3 k$ I9 U( u3 f
使用DSP侧单独调试功能,验证动态申请没有问题,
3 t% H2 O( {( d" v* \/ h; \% M
5 U( }: \+ I/ N. S) C* m+ _但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。
' N0 Q& H1 x0 t, F

# {1 ]: j+ O$ h0 A* t8 o, T! h6 A
" t+ a2 H; A8 e* x, d& R
' k" z" k' v4 i* N. V% e7 u  O; f, d
' t& _+ G5 @: S* H
/ g' l+ T& {/ M2 w: H5 W

. u1 i7 W, ^, H% a- x, G, i
+ b; i! w1 E7 ]
+ }7 Y4 x+ L. d
2 k9 @; @% S. O* ^( K% b
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2015-9-4 10:29:21 | 只看该作者
补充说明
) U* S# K! }7 {2 S! n7 Q我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下2 i  S' P4 z/ ]0 n- u
(不过疑惑的是,为何单独DSP仿真就没有问题呢?)
) I3 R2 t9 r+ _+ F: E$ e
8 D& A; f- c& ?5 Z' q% a* p) m! f
是不是需要在DSP.CFG中进行配置8 d& w, [, ]/ P, Y) h. E; U
我现在的配置为
8 O4 `# G! W/ G6 P0 J
& P4 K; }% B$ a. o8 g$ I/*
4 H3 y1 Y2 m' [0 N/ f3 a *  ======== Operating System Configuration ========
1 `) c% b5 e* n4 n */
: J! ^8 u) k; f3 j, M
4 p+ X  C) ?7 C2 Y/* no rts heap */1 ~3 \" z4 A$ ~9 X7 \
Program.heap = 0;
/ ^  J3 v, ~" p% |! jProgram.argSize = 100;  /* minimum size */
7 g# |+ ?& y: C) E6 ^Program.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大
0 }: I! K- r9 f! b% r  F. ~% }# ?! d% Z: X3 L
/* create a default heap */
( G+ m: g6 N; fvar HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');0 y  W1 D9 H: L3 u
var heapMemParams = new HeapMem.Params();. k2 W+ S: x4 a7 ]3 @
heapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大# b7 S0 R' m" B2 r' A' a$ h
* V  D) H5 Y' z8 a2 S
var Memory = xdc.useModule('xdc.runtime.Memory');1 n9 l2 P- m- c/ Z
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);
! |( W! C+ m- R5 ?
+ N; J& n+ f6 S  \2 `' n/* configure System module */
  ?0 r0 |; z) m8 P/ P8 A) evar SysMin = xdc.useModule('xdc.runtime.SysMin');
7 E. `$ R7 P2 z8 X$ a. @SysMin.bufSize = 0x1000;
  M5 A$ G) F: E' B# n, I8 R2 cSysMin.flushAtExit = false;
' ^  S; X+ y# B
& I1 |+ y/ X: E1 T3 M* kvar System = xdc.useModule('xdc.runtime.System');* a$ q% q& ?. h/ d* G' B
System.SupportProxy = SysMin;
, f; Y2 X% b0 M' d
/ }5 a- A; F2 D8 b" R/* configure SysBios to use the lower half of Timer 1 */
8 i6 G# \8 h; l) qvar Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');
5 I( o+ Y2 S, x1 ~' Y# xvar Clock = xdc.useModule('ti.sysbios.knl.Clock');7 s# W+ m* h, r9 ^) e/ V7 D$ v
Timer.timerSettings[1].master = true;
9 W& G* G& s& k7 ~# J0 Z! YTimer.defaultHalf = Timer.Half_LOWER;
8 J$ V5 C" B; `Clock.timerId = 1;- ]- A8 ?" J# g) K# G. v( F9 U  v; W: p

4 \, P5 j* g+ v  J8 b% B; F7 Q. l3 A& \; O) i
/*
0 U! M3 V0 ~/ Z7 l *  ======== Miscellaneous Configuration ========
# Y% ~# ]' V1 f( ~. n: e/ D1 t */6 ]5 P% P$ h$ p3 c; W. l) ~
+ ]) ?5 ]. |/ R
/* set default diags mask */6 c8 z) H' K8 Q$ t. x
var Diags = xdc.useModule('xdc.runtime.Diags');; n, @  O6 z/ j% t1 o$ H
var Defaults = xdc.useModule('xdc.runtime.Defaults');- W4 y' A* y& T" [* U2 a4 M
  I' m  c' m2 d% i9 g& X4 @8 d
Defaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;6 h; v) i# @, \% \' h, u! @
Defaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;
' K! k) I9 I( x% c# JDefaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;
9 u8 j' `/ B4 {" Z3 R7 dDefaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */
4 U* C2 M; t! t* I4 M' J6 iDefaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */) `  `5 _: q# w5 T  c
Defaults.common$.diags_STATUS    = Diags.RUNTIME_ON;
( H/ B. [+ j4 u$ P/ \8 jDefaults.common$.diags_USER1     = Diags.ALWAYS_OFF;
' t6 r, y" A; v, q, i; h( QDefaults.common$.diags_USER2     = Diags.ALWAYS_OFF;/ A5 J) y: V8 Z1 q
Defaults.common$.diags_USER3     = Diags.ALWAYS_OFF;; r7 S4 _& k6 N; z
Defaults.common$.diags_USER4     = Diags.ALWAYS_OFF;
8 ]; ?" _& M& U  t" [! V, Q- Y3 c; G' fDefaults.common$.diags_USER5     = Diags.ALWAYS_OFF;
9 k% D& o6 A" P# I& p% ^Defaults.common$.diags_USER6     = Diags.ALWAYS_OFF;, a8 l9 C; m" f# Y5 b
Defaults.common$.diags_INFO      = Diags.ALWAYS_OFF;
- `4 O3 u7 R0 `9 {  M0 P. {Defaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;
2 f; B1 s' ~2 H3 _" Q" F4 h& M, `$ Z
7 `* W4 o; t! n1 z- r0 ^, v/ Q# d/* override diags mask for selected modules */4 u  \. i2 p0 U
xdc.useModule('xdc.runtime.Main');- `: u% `5 O# A0 A' Q; J8 T$ V
Diags.setMaskMeta(
3 |4 @% a- u" h6 N    "xdc.runtime.Main",
$ y8 x; L) P( X" R/ j    Diags.ENTRY | Diags.EXIT | Diags.INFO,
8 q9 D- ]5 b& z; q# M) E    Diags.RUNTIME_ON4 ^1 j% M; P8 P& F4 R
);; e. F2 _$ y& M) S) P! q
; {/ G1 {$ M6 H/ [$ _
var Registry = xdc.useModule('xdc.runtime.Registry');
2 A/ R: b+ J( \8 U; G7 v6 l9 ~Registry.common$.diags_ENTRY = Diags.RUNTIME_OFF;, R4 X6 D; i* m- [7 A5 g
Registry.common$.diags_EXIT  = Diags.RUNTIME_OFF;2 U2 i7 s; u& l( ~# k- T! f; ?
Registry.common$.diags_INFO  = Diags.RUNTIME_OFF;
6 H) A5 m- K: O! o& JRegistry.common$.diags_USER1 = Diags.RUNTIME_OFF;% D) [* z5 w1 m# z6 K: n
7 L# ]1 _3 c6 v& b7 B5 p: p% h9 c& }6 r# b
/* create a logger instance */( P- n; F  B8 R
var LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');$ B3 S! b9 r9 h. N- ^$ o9 s- d4 @
var loggerBufP = new LoggerBuf.Params();" [) z$ c) Y2 Q) \
loggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */- n+ u/ q; e1 \; H9 E
loggerBufP.bufType = LoggerBuf.BufType_FIXED;
5 X. h: f) ^9 E& q# ^# w* ]( F* e( E
var appLogger = LoggerBuf.create(loggerBufP);1 C5 E5 E" y' V
appLogger.instance.name = "AppLog_Core1";' n+ v1 c) z7 {6 X5 \, M' u
Defaults.common$.logger = appLogger;; q4 F" t" T2 C  ?
Memory.defaultHeapSize = 0x8192;   
2 G# A/ L2 r: ]& ]$ pIdle.idleFxns[0] = "&LEDStatus";
$ O0 i3 j* b& L9 Z6 WCache.initSize.l2Size = Cache.L2Size_32K;6 f* Q0 k8 m4 {- d3 _
. Y2 t& g! `4 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 */: i7 z0 F( c% X$ Q
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');1 A" S) R0 r: s
var heapMemParams = new HeapMem.Params();
) X4 n* M4 D1 M0 zheapMemParams.size = 0x4000;
1 Y8 H$ A- f) X# S
7 W* x" v# }; T. l* v1 evar Memory = xdc.useModule('xdc.runtime.Memory');2 d4 m& \. O6 h* k) r1 V$ n8 `
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);( y0 E& v* ~- r  R+ m* m# @4 Y

" |, B  w% T# `8 S1 K我大约calloc  每次共计大小为5K*16bits,, ?+ N. G2 Q3 h4 e$ q0 T+ n5 `
而默认配置才0x4000、需要改大。
8 D- _1 F$ w& w' z* Z6 o$ J
' U/ [; u" D' X8 c0 D; [8 S( U9 i# |
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
5#
 楼主| 发表于 2015-10-28 16:14:47 | 只看该作者
/* no rts heap */
, E7 U# @8 p8 Y: j* h  |Program.heap = 0;" n5 f6 F7 k1 e' V9 r
Program.argSize = 100;  /* minimum size *// U! k" D: z+ |& P6 U7 ?1 U
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-17 02:01 , Processed in 0.071155 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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