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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2015-9-4 08:33:31 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
创龙工程师你好,我在OMAPL138单独调试DSP程序(使用SYSBIOS)时,在任务中使用calloc函数动态申请内存,用完后free,类似如下结构% A4 ?( d5 Q3 z) `8 M
& ^& I* s1 j- c6 R  @# D, ]
    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //256& J; o* X. N1 Y. H; x9 z
0 e. ^3 ]+ N) Z* J- {  W+ @
其他程序段。。。。。% j, H3 K& _/ P% Z/ X
4 M1 k8 }. j  U
   free(x_d);1 C% K% ^/ v0 \! b4 f
9 X" ~, C2 k1 B1 w' [! H& h: L: b# B
使用DSP侧单独调试功能,验证动态申请没有问题,
" u, z: _- Z* D% ?
& _7 a' f3 A0 F; J+ C1 q: I但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。
- [8 c2 @( ^: e" @  _; s; r5 k
! J$ f; B8 c) Z0 a
* ?4 f6 ~4 p; v! ^) Z! F
7 t# |" V( t9 _' b; y
# p9 E( n& X0 W# |1 |( X/ B
1 q2 @7 D  U4 \- r

: F4 P2 [2 f0 p3 {; e
) u8 W* [( c( j/ C. Z, C9 V4 S+ V" c

3 I. Y& |: o" f9 p- \# U: N# c0 t% j1 F( k9 d( `0 Y
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2015-9-4 10:29:21 | 只看该作者
补充说明
% E: w# ?2 |3 v  Q- Q我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下
4 t# C$ h4 c( {* m. g2 ^7 s(不过疑惑的是,为何单独DSP仿真就没有问题呢?)# b+ i  v; \; y' a7 U

, K/ X: d1 g$ v9 i) W: @: R是不是需要在DSP.CFG中进行配置
  s6 e, ]9 V: C" E我现在的配置为8 I& F' M7 `' x" Y, d8 i( l* M
2 W( A& ]4 u& a+ t) @5 ^
/*, C, q. z5 l. s
*  ======== Operating System Configuration ========$ E& k) D) v: ?# j% ^- Z5 ^
*/
2 R# n# z. \$ p% K4 |3 I+ Y# t# Z9 e) v0 z$ B3 o0 |9 v. i% t3 |
/* no rts heap */  S! o* b& T; H4 a- g
Program.heap = 0;5 r3 T9 Q6 o8 c
Program.argSize = 100;  /* minimum size */# a5 [7 c0 k: T: y: p9 y4 @
Program.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大
  M; P" n* T) @" n6 j) r! n4 t2 B- L
, G$ l; R1 G4 n7 s/* create a default heap */8 G( ~# Q7 @4 Q# ^
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');% \& x% T6 [4 M: \$ U
var heapMemParams = new HeapMem.Params();
# Q. z* |0 [! p  dheapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大
( t- L! `9 t9 ~3 E# _! s1 K9 d
" i/ F8 g/ d$ n4 X
var Memory = xdc.useModule('xdc.runtime.Memory');
: ?, \, ~$ Y. ^. o# OMemory.defaultHeapInstance = HeapMem.create(heapMemParams);, A% h# i! F6 l( p
$ e. G4 \7 `4 Y6 B- D0 }
/* configure System module */
4 @: f' D! c: c1 F5 j. d$ `var SysMin = xdc.useModule('xdc.runtime.SysMin');6 z9 [- h( k2 C0 Z' L
SysMin.bufSize = 0x1000;! x4 s$ L& z$ p% `. y# a' u
SysMin.flushAtExit = false;
- C' g* Q9 U& i' s2 r9 R
% N. ?& x& P% ~, r$ M" Y- ?var System = xdc.useModule('xdc.runtime.System');
: d( N3 l9 B2 A; D' q3 x: T: |4 cSystem.SupportProxy = SysMin;% D2 K6 ^2 c  N8 [$ V
' w% X3 W5 x) @) F9 o
/* configure SysBios to use the lower half of Timer 1 */
" g# E9 d, ~: w9 ^var Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');/ h2 L: W1 }1 H. c9 Z+ V; ]
var Clock = xdc.useModule('ti.sysbios.knl.Clock');$ Z/ a- S3 V/ r3 ~3 f: l# l; z, G- j
Timer.timerSettings[1].master = true;
  j: Z8 t8 G! vTimer.defaultHalf = Timer.Half_LOWER;
8 u8 U8 o0 @- Y9 |7 JClock.timerId = 1;
; I) d! K: O2 b+ n+ d: c( V% `3 M7 t7 V" K

4 E' a$ P& Q, E3 _/*
2 Q% \) w4 H7 G2 h. n4 o" u5 [ *  ======== Miscellaneous Configuration ========2 A- i$ @( W# f' r3 \  T, G
*/2 t4 h* c9 j/ V4 x5 k* z6 r

5 N9 l  w0 k6 ]+ ^/* set default diags mask */
, ]3 j/ c0 P/ _6 N3 fvar Diags = xdc.useModule('xdc.runtime.Diags');( t$ K$ t" A% a
var Defaults = xdc.useModule('xdc.runtime.Defaults');
1 O7 s7 b* o9 O& D) T$ |0 i, u$ b/ H8 J3 [0 c. U0 q  b) v4 w
Defaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;( e  q1 s# r/ @" B( y8 ^% Y
Defaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;0 c0 h5 Z! C. r- y! u) G% c
Defaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;. K5 }( B  `( I. u  m6 u. ~7 c% h
Defaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */. j1 v6 H1 S1 d2 D) G# D0 l& E
Defaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */" ]8 z" X% n. y% d& ]: _5 \1 s
Defaults.common$.diags_STATUS    = Diags.RUNTIME_ON;
6 B$ }( z( |) Z& _3 FDefaults.common$.diags_USER1     = Diags.ALWAYS_OFF;# h! V3 }5 h0 U
Defaults.common$.diags_USER2     = Diags.ALWAYS_OFF;6 L' i4 U2 o$ D% ^. r+ `
Defaults.common$.diags_USER3     = Diags.ALWAYS_OFF;+ A4 L, Y# r$ o  ?( |; u
Defaults.common$.diags_USER4     = Diags.ALWAYS_OFF;
- V# K. P% L- l! H% K! m1 l% N  xDefaults.common$.diags_USER5     = Diags.ALWAYS_OFF;0 ^3 O0 ^) L' j3 R! Y
Defaults.common$.diags_USER6     = Diags.ALWAYS_OFF;+ e  f( E4 [8 Z
Defaults.common$.diags_INFO      = Diags.ALWAYS_OFF;
7 @+ l! t& d7 W) e$ s# M$ n0 BDefaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;
( H  b$ K/ J2 A7 T6 \5 A8 k' i& c& X& y: Y7 Y
/* override diags mask for selected modules */* R9 H. p" U( b2 {" X; t/ L6 r8 V7 N
xdc.useModule('xdc.runtime.Main');
/ m9 n* H; m! M( n) |( J% gDiags.setMaskMeta(
1 i" I. p: U0 k' M9 z5 D4 }9 B    "xdc.runtime.Main",! J* U+ c( T! f6 X' v3 ]! h0 P# W$ y. `
    Diags.ENTRY | Diags.EXIT | Diags.INFO,9 ^/ K* F" a! K- s
    Diags.RUNTIME_ON3 ~7 J9 D3 F! G$ Y# C  ?# P* ~9 O
);  z9 b2 @' @2 @7 n" S2 ?+ l0 T

9 q" |. G6 O7 |; q8 c0 `var Registry = xdc.useModule('xdc.runtime.Registry');% C# _" C) e& N7 }
Registry.common$.diags_ENTRY = Diags.RUNTIME_OFF;
- t. e1 g! J4 [) g9 t1 \$ d" jRegistry.common$.diags_EXIT  = Diags.RUNTIME_OFF;0 |* e' I, ]2 P; }$ c6 ^
Registry.common$.diags_INFO  = Diags.RUNTIME_OFF;
& z. L+ f* [% yRegistry.common$.diags_USER1 = Diags.RUNTIME_OFF;' h" K# s& W; ]5 d; e
1 W3 c9 k+ r8 s
/* create a logger instance */
. H' p7 `2 ~1 [5 \0 U: svar LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');
8 ?, u/ q- E( D- }& Pvar loggerBufP = new LoggerBuf.Params();- L- _1 j: b1 o/ X
loggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */
' A) X( |! A: n6 b7 t$ _loggerBufP.bufType = LoggerBuf.BufType_FIXED;
1 J" g; B) d0 F7 o. t7 ~: N7 h! f2 {% H' D4 ]! a5 z
var appLogger = LoggerBuf.create(loggerBufP);
2 N  V+ `! S& l' e5 H& G, _appLogger.instance.name = "AppLog_Core1";
5 t  N' ]- {' h7 qDefaults.common$.logger = appLogger;) _* ]5 P7 P3 N, a2 M( p9 ]) E
Memory.defaultHeapSize = 0x8192;    9 V5 E* F8 L. ?7 }
Idle.idleFxns[0] = "&LEDStatus";/ r" v" W) W+ Q: T- _2 S6 e
Cache.initSize.l2Size = Cache.L2Size_32K;
, G  ]5 y, _8 h* l, Y/ h* W
( K% w+ d' J. \5 u: R- ~, T2 `% w
回复 支持 反对

使用道具 举报

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 */
! w, `- h  f* N. F  j5 K" Dvar HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
. f6 B# X6 R7 |var heapMemParams = new HeapMem.Params();1 H% \6 c9 a) U5 p
heapMemParams.size = 0x4000;! Q% C; A9 R+ B& T. b* E
- _9 d3 j7 z+ j# V
var Memory = xdc.useModule('xdc.runtime.Memory');6 G+ `, k& U! j0 p5 T
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);
  P# p. r3 r) o/ e; F8 j
9 X6 f6 C! i% b8 H/ x我大约calloc  每次共计大小为5K*16bits,
* S4 U7 q. P3 o8 y$ m4 Q5 a. y6 s! b而默认配置才0x4000、需要改大。2 e4 [1 x$ Q) Y  e+ D# F) ^; s
1 l, D$ a( x' C# a* u- P
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
5#
 楼主| 发表于 2015-10-28 16:14:47 | 只看该作者
/* no rts heap *// Z: w0 ]6 G$ k
Program.heap = 0;$ Z3 @' c% x$ I4 |& S5 ?. G' r4 r
Program.argSize = 100;  /* minimum size */
8 A( T- [4 K, v" GProgram.stack = 0xF000;                   //我改到F000  也不行
回复 支持 反对

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-11-8 17:26 , Processed in 0.051087 second(s), 23 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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