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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2015-9-4 08:33:31 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
创龙工程师你好,我在OMAPL138单独调试DSP程序(使用SYSBIOS)时,在任务中使用calloc函数动态申请内存,用完后free,类似如下结构
. B8 g& Y0 S4 `- D1 e, `" w* T1 l2 q& z" W: K+ X# o; I
    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //256
$ I! z3 B7 q7 k# Q) |( V
3 i+ r' I) [" F; ?3 j+ I! S其他程序段。。。。。4 {' B" S# u! K9 @8 e

  ^4 q5 p: j. `8 |) l; x+ R* Y% ], c; P   free(x_d);& i2 y6 W, ~* P/ A" r
8 O* q. F" G9 X3 l
使用DSP侧单独调试功能,验证动态申请没有问题,% [- W( ]% p% E$ `! Z
$ O) v! p8 ?$ W- c6 W
但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。' W: T. I% s; e" F

) ~- X* |) p' @3 _. _1 X4 M; x
9 u4 x, Z" ]# V) f
/ W* {5 f* w9 H. q& c7 Q8 F% Z5 g" ]4 j, H& H! S( w) C
8 w$ c' m+ `- @% N& H

2 K% Z! x# Y9 S' I" O& q! i4 A5 N5 F! J& @/ x; c0 k) ^

, K7 {5 D( f, L0 G( z; L9 E( m4 _* b9 {) r6 X

- k/ `8 ^9 }3 @
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2015-9-4 10:29:21 | 只看该作者
补充说明( L) f( q% s/ l
我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下7 m3 Z6 d3 e9 Z( P. |1 h
(不过疑惑的是,为何单独DSP仿真就没有问题呢?)$ s) ~8 y7 w" k' ?
7 y* H1 p9 l% l: x5 ?5 }6 H3 m
是不是需要在DSP.CFG中进行配置8 Q9 G  a( k0 h$ }6 H8 }
我现在的配置为
5 r& j2 F0 h/ }/ i$ q" u+ a5 e0 `0 \+ R. [
/*) G" |! s) k( _* X# a% o
*  ======== Operating System Configuration ========
3 e$ Q# v7 x) |0 g  ^ */
7 L& e4 D% x4 p  F3 F6 I
3 P, d9 _- E% `/ o/ H/* no rts heap */" y8 J- W, L8 ]7 z
Program.heap = 0;
, T9 L: X/ M1 {( H$ ~Program.argSize = 100;  /* minimum size */* I& g1 z# _; {1 [
Program.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大
& H2 Q. t$ Q, T/ v, }; Q
9 q9 m3 S3 ~+ [4 D: v/* create a default heap */
8 C7 ^7 Y+ i5 cvar HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');2 D$ K! V+ W9 h/ `8 c2 O
var heapMemParams = new HeapMem.Params();7 T7 Q6 S" B, Q: }
heapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大/ E) }' k/ o- y% e) p
, E: _9 W) a4 ^. W2 o; ^, g# W
var Memory = xdc.useModule('xdc.runtime.Memory');: {1 B7 W6 ]- ?4 G/ G
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);
, t$ R% I/ L  n" r( u) V
. M7 D5 x; R. s5 A8 \  P4 |/* configure System module */
) Z2 I0 H" _6 q2 c) @var SysMin = xdc.useModule('xdc.runtime.SysMin');
: Z" ~9 {5 j  K, S1 g- MSysMin.bufSize = 0x1000;0 f0 y2 X- [2 K% I  I( e
SysMin.flushAtExit = false;
9 f7 a. j; o& ~$ x8 f+ ?5 y+ k8 a" c* |
var System = xdc.useModule('xdc.runtime.System');
* \6 D# x  M+ ^. a2 e* eSystem.SupportProxy = SysMin;8 {, x5 R% Q3 _) h* G7 d! A9 d

. d9 T6 S  m' T/ \( h' _: _/* configure SysBios to use the lower half of Timer 1 */
5 S* F6 }6 C+ W0 y& _, I* W4 F( C" \var Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');
# c: Q6 O8 q; ^8 W/ D7 Jvar Clock = xdc.useModule('ti.sysbios.knl.Clock');) Y" K' G1 V2 a6 |: L! H
Timer.timerSettings[1].master = true;
2 ^; B1 P, r. q$ Q% dTimer.defaultHalf = Timer.Half_LOWER;
, t  O$ n1 c% c6 R' SClock.timerId = 1;4 ]  ], m5 D- S& M

: l6 ]+ _; n, W5 N; @  o/ V( V
, p! Z4 W$ h3 ]1 K# a: ]2 S7 L/*
0 d! Y( c& H+ O *  ======== Miscellaneous Configuration ========
7 r* E" J: Z. \( _ */
3 f6 |8 a5 M7 ], H( O+ s  ]5 |: R; Z( d8 k! r4 _( r* x  V& H
/* set default diags mask */
1 X3 B4 h; [  Q6 W, T! _. ]var Diags = xdc.useModule('xdc.runtime.Diags');
- g1 h# A8 G( Avar Defaults = xdc.useModule('xdc.runtime.Defaults');* K- e; r% }9 b- f& F8 B# t

5 N- H. A( @; S+ U+ {" \Defaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;1 u" p& ]/ l- |# @% A5 ]
Defaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;2 I& B6 E. a3 L0 [) W
Defaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;
9 E' W1 q: I( N! `Defaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */  v' T' Y' ~; u
Defaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */
7 |! o0 e0 t2 E* g( JDefaults.common$.diags_STATUS    = Diags.RUNTIME_ON;
) i& H+ R1 S& \- a. N- ^Defaults.common$.diags_USER1     = Diags.ALWAYS_OFF;
4 o, [$ Z) Z  M6 Z& }% o$ V: ?) m6 ^! ADefaults.common$.diags_USER2     = Diags.ALWAYS_OFF;0 Q) r4 Q4 N2 E- r" ~2 M
Defaults.common$.diags_USER3     = Diags.ALWAYS_OFF;( I; g: f0 @1 U9 n% F
Defaults.common$.diags_USER4     = Diags.ALWAYS_OFF;  u7 u- r  s: V* d8 g  R2 T! M* [
Defaults.common$.diags_USER5     = Diags.ALWAYS_OFF;
+ {, j) F5 O4 W# p! T$ F0 D1 i/ z; }Defaults.common$.diags_USER6     = Diags.ALWAYS_OFF;* F& t6 H/ O9 i, q; N
Defaults.common$.diags_INFO      = Diags.ALWAYS_OFF;1 @$ \; R# E0 K' H  F+ `
Defaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;: F8 {2 ]# Q0 X' K/ ]$ }6 b3 J
: w! \4 E1 ?  |. R
/* override diags mask for selected modules */( _2 U& T6 o" T. Y5 F" C
xdc.useModule('xdc.runtime.Main');
5 e$ q. S4 ]& `5 i7 A% E9 o9 BDiags.setMaskMeta(2 M1 h+ D; H9 v8 X
    "xdc.runtime.Main",+ i$ l( y$ H  R$ l3 a
    Diags.ENTRY | Diags.EXIT | Diags.INFO,7 Z# P+ e" Y9 D4 Y- N& L
    Diags.RUNTIME_ON; ]' p: n9 x- h! e' v
);
- @( U/ d* K5 {7 Z3 o4 Y3 u( r4 S$ `, }: U4 c$ @
var Registry = xdc.useModule('xdc.runtime.Registry');0 K& E4 Q& U) `5 k4 R( f
Registry.common$.diags_ENTRY = Diags.RUNTIME_OFF;1 M  a) A" G0 ~. [
Registry.common$.diags_EXIT  = Diags.RUNTIME_OFF;
/ \' v2 B4 ^8 t' o- {: ~2 p( uRegistry.common$.diags_INFO  = Diags.RUNTIME_OFF;
, q( V% n$ F; ]" s+ R6 jRegistry.common$.diags_USER1 = Diags.RUNTIME_OFF;
, ^. [" ^7 a' z" f/ H4 C# W" y* a- [2 `3 k* q3 z  }" a+ h
/* create a logger instance */
4 c1 I1 Z7 k' R+ s: b" ]2 K* @: e2 Yvar LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');+ B) Q% Q' s6 ^% m8 S, a
var loggerBufP = new LoggerBuf.Params();
, a- s8 s+ p: A  C* E2 U/ gloggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */! I5 q0 d& Z2 s: g
loggerBufP.bufType = LoggerBuf.BufType_FIXED;# G2 E- `9 z, ^* E: A: }1 i, j1 R
3 n& c7 }' r9 ?+ |% C4 g3 A1 T
var appLogger = LoggerBuf.create(loggerBufP);
  g$ z0 d! ]  G8 cappLogger.instance.name = "AppLog_Core1";  r, D7 a1 a1 ]* W0 D; y
Defaults.common$.logger = appLogger;
8 A2 Q8 ?4 q6 s' A) q/ ~9 _1 e3 r% FMemory.defaultHeapSize = 0x8192;    ! J/ g) @3 ^1 v4 f/ w
Idle.idleFxns[0] = "&LEDStatus";
, n0 m% @9 i+ Z5 A2 h6 PCache.initSize.l2Size = Cache.L2Size_32K;+ p* N# ~: S, ^! N, P' X' P/ N
& T6 W! r/ j, o/ g4 l
回复 支持 反对

使用道具 举报

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 */. y" {% C+ {& x) }' M3 Y
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
6 p# J& @; m, j/ v. V2 ~" Zvar heapMemParams = new HeapMem.Params();  q+ v( {5 I+ G5 `/ N$ H( O5 T' O
heapMemParams.size = 0x4000;
' ^3 h* [4 t. n# `; ~
8 L3 A+ S1 s4 u# Ovar Memory = xdc.useModule('xdc.runtime.Memory');
: z, U6 S) V6 D/ rMemory.defaultHeapInstance = HeapMem.create(heapMemParams);
# A$ [9 O% R' t+ T
' N4 I1 U6 M( {9 W: D我大约calloc  每次共计大小为5K*16bits,9 p9 R) ]4 u1 M. F/ `
而默认配置才0x4000、需要改大。- b& ~4 g5 R2 W3 H5 b) f; |
. A- ]8 y8 s, }6 h+ e
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
5#
 楼主| 发表于 2015-10-28 16:14:47 | 只看该作者
/* no rts heap */
1 _/ d7 C; Y. H% P& hProgram.heap = 0;) F8 D, z# P4 U# Z3 b3 D* A1 L' G
Program.argSize = 100;  /* minimum size *// X1 X  ?1 }& u% y7 o) t1 j  B
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-16 14:37 , Processed in 0.040910 second(s), 23 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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