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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2015-9-4 08:33:31 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
创龙工程师你好,我在OMAPL138单独调试DSP程序(使用SYSBIOS)时,在任务中使用calloc函数动态申请内存,用完后free,类似如下结构
3 l% ], q, ?* i8 v# R1 o0 L- {/ v* V" V) c( R& I' ?* k8 y
    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //2562 k, ^+ v' H7 o3 c8 _1 E4 g
: z2 t) T" l! s( O$ n) Q
其他程序段。。。。。
8 ^. _) ^) q% N. K
( L  n- M0 Y" _4 ^   free(x_d);8 g$ a8 A: p  O3 `3 r: b# c- h6 U1 D! f
' g; s6 f/ o( x( k( o5 Q
使用DSP侧单独调试功能,验证动态申请没有问题,
8 T3 q' Y, P& S0 z3 @5 z
6 w8 H* I3 n& ^: p但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。
2 p+ ~2 u6 q4 x, i& l

; d% ]7 O1 z# y6 H6 J( ^$ j
9 M3 m% K. @+ b' U. p5 x' ^, H1 j+ `, Z  [" Y; Z! V
. V7 I9 n9 u/ X, Y8 ]! ~$ N7 m

  A( g) t7 a$ S2 a
9 E: G+ M: M( w$ f1 Z0 m- E7 W/ y( o0 G7 D& K' N
3 I" ~; R3 m6 X' g5 B* V
' ^* L& b2 d5 t3 P$ B  z) ~
6 w" L3 b/ ]; S3 Q/ I9 G
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2015-9-4 10:29:21 | 只看该作者
补充说明
8 M. x2 d& l. |4 R: Y1 q我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下
% K/ g7 x. N% C( z& L5 p(不过疑惑的是,为何单独DSP仿真就没有问题呢?)$ D/ V* N( D/ M% A4 E. F5 B
! ]! c: s4 b2 U; _' A
是不是需要在DSP.CFG中进行配置6 V, e: [" p( ?7 c
我现在的配置为
( f+ Z( s+ H, b: c* |8 `! f) j, U
/ d2 v1 K% [5 U! n8 A+ Q/*
2 [% x9 L' D/ V- s, o' m) z. k *  ======== Operating System Configuration ========( Q. \# I# v0 e' [. S* F! W
*/
$ B* \, V: s- \  I" K5 _4 N  Q! V( j; @& U  @4 i. |* x
/* no rts heap */
1 i  W* u2 Q: z  D3 JProgram.heap = 0;! q$ h: Z1 t2 [9 l% u
Program.argSize = 100;  /* minimum size */
0 ^. d* y3 @3 gProgram.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大
% A# `# P: u4 |( C7 A8 |5 A0 O# B0 p# a% |
/* create a default heap */" G* `0 p! ]" v
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');! C% v; _. a9 n: n8 o" a) \
var heapMemParams = new HeapMem.Params();9 _9 O' p! Y' _# W" ]: t* c
heapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大) V9 ?0 ]& u& W& N/ }
6 {" |& c% Y+ C/ p! t5 g
var Memory = xdc.useModule('xdc.runtime.Memory');; ^# W7 N* i) n  _; t# u/ ^
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);* \3 g) `! d, }) d- I
  D( Z- O7 g- f
/* configure System module */+ c( a9 t  v: q! j. z
var SysMin = xdc.useModule('xdc.runtime.SysMin');' P" L9 w. [! h  D& j$ U7 N- e% `  L
SysMin.bufSize = 0x1000;
) B5 E; x, q* M/ [& ~* l& ^# PSysMin.flushAtExit = false;
" l( g5 h* N9 }2 R
7 w0 b& t! }" }* O& V8 m( Kvar System = xdc.useModule('xdc.runtime.System');2 H( m& k6 e4 g) v4 Q% o
System.SupportProxy = SysMin;- j: G! e: }4 p% B0 M$ N

. ~" z8 n2 \' \- e. q/* configure SysBios to use the lower half of Timer 1 */
. c7 h. t! s% |/ s9 s% Ovar Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');' _0 U+ K5 X. a  Z% M% X
var Clock = xdc.useModule('ti.sysbios.knl.Clock');
  [( ^9 |' p8 @+ |/ {Timer.timerSettings[1].master = true;
7 C$ N0 w+ H5 |- D; L2 O" BTimer.defaultHalf = Timer.Half_LOWER;
* \& ]. ^) d9 AClock.timerId = 1;
2 \" z: z3 |- n1 X! X, v. @
! T- [5 B7 X6 h8 a+ U7 ^+ S
1 L) z) B+ l; a/ a- ~/ }/*
& W3 p3 _4 V$ n2 b  V *  ======== Miscellaneous Configuration ========
% M- V9 N3 Y2 X7 u( S3 G */8 i8 s* J( L0 }2 d8 {
3 S; F" T3 k# K
/* set default diags mask */  H" v& n9 Z/ C7 i2 Q5 u! T
var Diags = xdc.useModule('xdc.runtime.Diags');
  D* i5 N& `' q- n2 bvar Defaults = xdc.useModule('xdc.runtime.Defaults');; ^. y, z1 w" D1 H% o6 \
/ D& H# M9 H! r# ~# @
Defaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;5 j# p/ b: \6 H3 a, `
Defaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;
$ n0 }# {) X6 q7 S* jDefaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;
8 h$ z+ W# N) ?. c$ t) _Defaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */. h# D# R; I) c, J( y
Defaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */
8 a5 C2 X7 N8 g/ o" V9 x$ {2 Z- s  H9 [Defaults.common$.diags_STATUS    = Diags.RUNTIME_ON;- G6 w: J5 j- ]" z
Defaults.common$.diags_USER1     = Diags.ALWAYS_OFF;
* f9 F; M! N3 \, v, E8 L! DDefaults.common$.diags_USER2     = Diags.ALWAYS_OFF;
: p' f6 M; s% |* qDefaults.common$.diags_USER3     = Diags.ALWAYS_OFF;
3 V! p0 |6 \' X7 S2 q1 uDefaults.common$.diags_USER4     = Diags.ALWAYS_OFF;/ y+ {( Q+ A% c4 X7 A4 p+ w0 {; p
Defaults.common$.diags_USER5     = Diags.ALWAYS_OFF;/ Q2 t6 f+ l, ?4 N8 O' d% y
Defaults.common$.diags_USER6     = Diags.ALWAYS_OFF;. [& i2 o& ~3 q8 u9 U8 {: |
Defaults.common$.diags_INFO      = Diags.ALWAYS_OFF;
7 t/ A5 W+ F+ z- i( b. XDefaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;% l, r5 J) f4 I  A4 N+ M

0 f& V1 v4 X. i0 Y2 m/* override diags mask for selected modules */
* w/ W6 n2 z& S7 s( Bxdc.useModule('xdc.runtime.Main');3 W, @! {0 d7 V1 z
Diags.setMaskMeta(
9 n$ e$ z7 N* A9 {" t    "xdc.runtime.Main",
. ^- n0 v( Q0 t! y2 C    Diags.ENTRY | Diags.EXIT | Diags.INFO,8 ~8 C9 D. v$ w9 P5 W6 X
    Diags.RUNTIME_ON. ?0 u: X% R8 \1 j
);
- ?0 P' o! Q' P3 P0 U; d$ }! m
) B, u( n8 d) uvar Registry = xdc.useModule('xdc.runtime.Registry');
0 Z- D/ Q2 Y( C1 b/ [$ @Registry.common$.diags_ENTRY = Diags.RUNTIME_OFF;5 D: X% M' e/ k& Y0 S, @4 Y# t
Registry.common$.diags_EXIT  = Diags.RUNTIME_OFF;4 d: A+ L" N% ?+ L6 O3 L6 l2 w
Registry.common$.diags_INFO  = Diags.RUNTIME_OFF;) y3 J4 V! ~+ q$ Y
Registry.common$.diags_USER1 = Diags.RUNTIME_OFF;
0 \! t0 a; G$ V, k# n, {( h0 d' e/ t9 w7 U9 A2 `
/* create a logger instance */9 w$ Z) g$ o) I8 v
var LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');0 o. Z3 D2 B! [4 x# v: z! v/ D& h
var loggerBufP = new LoggerBuf.Params();
8 `  c& D# V0 rloggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */
8 }2 B9 l9 @2 A. v( ~loggerBufP.bufType = LoggerBuf.BufType_FIXED;
) O: k6 p, p( W6 e  F8 O, Y8 W
0 k) X( ~% p# ^8 s2 ~; {# c  ovar appLogger = LoggerBuf.create(loggerBufP);
/ g& x5 ]& F$ O% W1 mappLogger.instance.name = "AppLog_Core1";
3 M2 B. \8 o2 k3 fDefaults.common$.logger = appLogger;) U7 F$ q7 v) Z; ^0 G( w) N
Memory.defaultHeapSize = 0x8192;   
  R* h- A5 B. F4 q# h$ F; vIdle.idleFxns[0] = "&LEDStatus";
2 e7 _6 ?% e2 e) l# FCache.initSize.l2Size = Cache.L2Size_32K;: [5 h' O' u6 q$ E9 o# j0 `- N
* G$ c& J* M2 z3 u0 e
回复 支持 反对

使用道具 举报

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 */; ]8 h) j" a/ w/ s$ p4 P" I7 F
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');9 U! s1 k* f! \  j
var heapMemParams = new HeapMem.Params();
, L. N0 S) f9 u% y/ zheapMemParams.size = 0x4000;
/ [( e. h3 I. g+ k* s. R: [/ Q$ M& _/ `4 K7 M4 D: ?  j3 O
var Memory = xdc.useModule('xdc.runtime.Memory');3 I3 H, H& b: ^9 Z) w! h5 U
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);
6 _: c* T% z4 L1 f% X3 l% u, J! }. q( c0 c* N  e
我大约calloc  每次共计大小为5K*16bits,
% \; J, B8 S2 I& L6 W3 C而默认配置才0x4000、需要改大。4 }; [" \. C8 f* I

" B! t& t/ [/ k
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
5#
 楼主| 发表于 2015-10-28 16:14:47 | 只看该作者
/* no rts heap */: z" {5 q- N: I( J' ~% `' x
Program.heap = 0;9 ~% r* C* G4 R4 x" q) W7 ]
Program.argSize = 100;  /* minimum size */4 Y1 {/ }8 ~* W" i! L" H# R
Program.stack = 0xF000;                   //我改到F000  也不行
回复 支持 反对

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-12-11 07:10 , Processed in 0.043196 second(s), 23 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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