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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2015-9-4 08:33:31 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
创龙工程师你好,我在OMAPL138单独调试DSP程序(使用SYSBIOS)时,在任务中使用calloc函数动态申请内存,用完后free,类似如下结构
+ q6 R& M! K; t' z1 \! i7 j! V3 S$ `5 Z
    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //256
9 V8 R, |* j* G: z; X5 b4 \4 S) Z2 `: j& e2 E6 g: H
其他程序段。。。。。
' v! F- A& e5 E/ l 8 ^; f+ E  Y, e) d9 ~( {' E/ ^
   free(x_d);
5 D1 c, p; J; i# C% M8 s# ~6 M! j3 w8 ~# W$ W
使用DSP侧单独调试功能,验证动态申请没有问题,2 X% o" V" N$ O5 b: {9 `

- o/ A; z( L7 Z8 P0 r但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。, i9 M5 c6 H6 H( y8 z% V) z& J9 [5 C  `
* D! N5 Z- ?0 B

, H0 J2 b& @$ V) d* S9 W% k/ g* L0 B: b
5 v6 p6 _% E6 r+ g- _5 v$ I

( Q5 H& k9 ?) p& b* |) b4 w& R! [. a: n
9 _: f$ |! L  @: Z
% H3 H  N' c) |; Q8 f! p3 l: d

7 h" ~* N' ^6 ~9 S2 f
* T6 g; m/ w# y0 Y
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2015-9-4 10:29:21 | 只看该作者
补充说明3 m2 k9 M) u* d
我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下
9 s5 v$ p  q" y0 a(不过疑惑的是,为何单独DSP仿真就没有问题呢?)
  K6 X6 f' X: F! V
7 Z. y2 T! X3 P  _
是不是需要在DSP.CFG中进行配置
6 Q/ w4 w: D) S, E" o$ E我现在的配置为7 o! E+ O7 |# T) T7 I

9 n% ~# @! n7 k% m2 {/*8 l6 p( k# L+ Y! c8 w, V0 b& i
*  ======== Operating System Configuration ========0 e2 ^, d1 A( k5 C" i1 \& R
*/. k5 l, i& M" N" o
% X. S6 C) [" ~% Y3 K0 o5 U# w
/* no rts heap */. x* H" P- ~& Q9 |" ]9 F! ?1 i9 O
Program.heap = 0;
; {# R* d& F8 b2 _/ {. jProgram.argSize = 100;  /* minimum size */2 i4 e! c# `' C" L' p6 _
Program.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大3 Z3 U5 N' I+ k8 _* k' r$ g$ T9 q
* g; s' U0 |6 `: |/ p) Y
/* create a default heap */! n! U+ t  w6 y
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');: i* Q. l& C) H! I, Q& X; ^, O* o
var heapMemParams = new HeapMem.Params();
+ y# D8 \; P& w. a8 ~$ r) dheapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大! W: P9 W+ r. D. a- E- f' y$ O

( ]! L' d( q( R0 ~# e1 b* e$ e
var Memory = xdc.useModule('xdc.runtime.Memory');
& Q/ C# F: p6 E  k1 [' E( `; ZMemory.defaultHeapInstance = HeapMem.create(heapMemParams);
2 l# s/ C. ?& A' j* [3 a* @7 N9 |- s; i  h) M/ n9 g
/* configure System module */2 {6 K8 @, W9 ?* J) M  c7 }
var SysMin = xdc.useModule('xdc.runtime.SysMin');
% l* a0 |2 e# V* r/ V2 eSysMin.bufSize = 0x1000;+ H* i1 z) A9 A5 w9 c/ l& i$ `
SysMin.flushAtExit = false;
3 c* \* ?% m5 k4 i, D/ G! P- i3 z* H# z! H/ ^4 R* x/ Y1 G
var System = xdc.useModule('xdc.runtime.System');
0 E& O( Q+ C. Y; T& P: v4 ZSystem.SupportProxy = SysMin;, V5 W8 t; c+ O! p. i
0 Q0 J1 ^8 F: y1 ]# Q( F
/* configure SysBios to use the lower half of Timer 1 */
$ e+ g) H! F& Jvar Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');
/ g" s; f+ d+ ^3 _* ovar Clock = xdc.useModule('ti.sysbios.knl.Clock');
' ]: k' V# R. }  p0 t' OTimer.timerSettings[1].master = true;
% T2 q- x# [1 T/ _Timer.defaultHalf = Timer.Half_LOWER;
: `6 }$ N0 Z' w3 |& j6 y: jClock.timerId = 1;
" W5 `1 p$ P# `* l, q  l( S7 D
. l3 s% `7 L- ]3 o9 F0 X! S9 f- ]& a7 {% o/ P$ }, z
/*
$ x  q+ h. C& V6 u) ^# f7 P2 \ *  ======== Miscellaneous Configuration ========
1 q0 ]6 K+ m8 \2 g */
/ U" B: j* G" c2 F1 e: {% `
, J$ M9 ^+ I0 x/ ^, X/* set default diags mask */7 ~# x3 a/ P% n* b
var Diags = xdc.useModule('xdc.runtime.Diags');2 k% p7 q: @  G2 T: h/ p
var Defaults = xdc.useModule('xdc.runtime.Defaults');- ~! c9 O' D6 i1 I" c$ r. I

8 [2 a$ O5 ]' X% _* M) k2 VDefaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;
8 A8 i9 Y! y) {( ^Defaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;- R2 ~5 }  o2 g% X4 z! d
Defaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;
: a( d3 h6 h! g2 w' I  kDefaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */
, Q3 s2 Y1 l4 Z& J7 |Defaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */
/ H2 a% \8 T5 Z# `3 `9 y6 F, _$ jDefaults.common$.diags_STATUS    = Diags.RUNTIME_ON;
' t& |9 h8 ^7 |# k" uDefaults.common$.diags_USER1     = Diags.ALWAYS_OFF;
4 o# ?2 e7 P& y& K+ G2 s% sDefaults.common$.diags_USER2     = Diags.ALWAYS_OFF;& ]; b& {) w+ t6 [
Defaults.common$.diags_USER3     = Diags.ALWAYS_OFF;. k- h" u: I/ L) E% I5 A$ M
Defaults.common$.diags_USER4     = Diags.ALWAYS_OFF;- i) ^% t. T0 b( ~9 m4 x
Defaults.common$.diags_USER5     = Diags.ALWAYS_OFF;
4 J& N) X: a9 {$ ?1 K0 }  QDefaults.common$.diags_USER6     = Diags.ALWAYS_OFF;
& |0 h& w  K! A# n  v% z% P) PDefaults.common$.diags_INFO      = Diags.ALWAYS_OFF;2 W5 v# M9 B2 L2 `) T2 z- E+ b! {
Defaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;
" f' P  Y* v+ n6 L5 f* N& x# Q" c: Z+ }; b  @
/* override diags mask for selected modules */
. h7 F& T% ?4 Q4 Zxdc.useModule('xdc.runtime.Main');( {* D  Z& W7 p( |5 [! X
Diags.setMaskMeta(
+ \. A1 S8 H/ B/ R  S9 u) P! w% K    "xdc.runtime.Main",
1 z) l* P4 C! [* T* m    Diags.ENTRY | Diags.EXIT | Diags.INFO,
0 g: A$ [6 p, i! b& o1 F    Diags.RUNTIME_ON
- W# N1 X5 r2 y$ }1 ?& C6 e, c);" X: r. U3 h1 J) Z3 Q

& f, R& R* m6 gvar Registry = xdc.useModule('xdc.runtime.Registry');6 B$ ]/ `, H- T, O# @( p  {3 P
Registry.common$.diags_ENTRY = Diags.RUNTIME_OFF;5 P9 ~) A, x2 m2 L) A( c
Registry.common$.diags_EXIT  = Diags.RUNTIME_OFF;
7 I5 ^9 p) ]: x! T6 H. }0 zRegistry.common$.diags_INFO  = Diags.RUNTIME_OFF;
9 Y: s5 S  Y" ]$ a. d& r  dRegistry.common$.diags_USER1 = Diags.RUNTIME_OFF;
5 Y! S/ r' Z2 G
1 D% v+ I/ P; Z! \/* create a logger instance */
% F( ~* q) u8 n) C5 M' @var LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');
0 u; f5 A2 F+ P2 ]; Yvar loggerBufP = new LoggerBuf.Params();
, F; A' s# P0 F3 Y0 s* @loggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */. l8 R0 k4 |- B" [( Z2 W
loggerBufP.bufType = LoggerBuf.BufType_FIXED;
3 y% N# f7 Z) }0 z9 _' p1 Z0 w; _' Z- v1 _" \7 L0 {) w9 d# l
var appLogger = LoggerBuf.create(loggerBufP);& r& b4 T: w. j- p& B0 i, Y7 }
appLogger.instance.name = "AppLog_Core1";
5 F1 h2 w, w/ k% u, Z. j3 ^, [& QDefaults.common$.logger = appLogger;
  ^" i  ?# K+ Z& U% O0 {! yMemory.defaultHeapSize = 0x8192;   
- q( g- G' o, A; J. J9 q+ RIdle.idleFxns[0] = "&LEDStatus";
( _8 ?6 x; J. q, T3 P, [- @Cache.initSize.l2Size = Cache.L2Size_32K;, s4 `& D1 g) [) Q( r
: ?: W: n9 g$ @8 c
回复 支持 反对

使用道具 举报

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 [1 O' E* o5 t# q" Hvar HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
9 g' D6 t; H  B+ l8 Svar heapMemParams = new HeapMem.Params();
7 w; \* n- |( B. m, B2 ~1 |- v3 ~heapMemParams.size = 0x4000;
6 s, C+ V+ g! n" v) E8 e4 ?" ]3 \9 y
) w' m- y( e4 h: O& \- wvar Memory = xdc.useModule('xdc.runtime.Memory');. ~6 B# K! p. }2 l% l
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);
0 _% J' N$ F. u1 Q2 B/ e3 Q. m) J8 }7 r8 l. a4 i4 s
我大约calloc  每次共计大小为5K*16bits,
9 Z  x. R2 V5 c+ i而默认配置才0x4000、需要改大。: a4 t! u8 z3 a! T! P3 H2 X

. C2 S# w- C+ X) B
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
5#
 楼主| 发表于 2015-10-28 16:14:47 | 只看该作者
/* no rts heap */
5 a, i+ S: ~. B! |. c$ YProgram.heap = 0;2 W8 U  s2 ]. O  U/ p
Program.argSize = 100;  /* minimum size */
' K+ i2 [3 `  |% a6 [" S4 [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-19 12:47 , Processed in 0.044316 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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