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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2015-9-4 08:33:31 | 只看该作者 回帖奖励 |正序浏览 |阅读模式
创龙工程师你好,我在OMAPL138单独调试DSP程序(使用SYSBIOS)时,在任务中使用calloc函数动态申请内存,用完后free,类似如下结构
- ^: g# f1 e) j" ]
/ r" M; F/ z" O    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //2566 @; H- Z7 S$ O/ W
+ y3 h0 K, h4 S2 o& i3 s: f8 `
其他程序段。。。。。5 C1 {" o" S2 U' j0 N0 i9 J- f0 [

8 Z4 ?+ O7 c* a   free(x_d);
$ m" x$ B1 {+ q) w1 l$ z7 F9 r  l5 }% c
使用DSP侧单独调试功能,验证动态申请没有问题,
0 H) o, R+ P  f8 c1 r6 T/ w
, A& u/ I9 R- ?6 O3 _8 Y但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。
( A6 q  j, j1 G! S+ k# z9 u; Q% S

; P& y8 }/ U+ o
  c  k- S7 V0 H+ C  c/ i0 y8 M" N: ~  i/ _) x6 i# Q. w- i' F
( @) z2 M1 C9 K' z( v
& [3 w7 Z( p4 h* e% w! Z1 o, C
  V" ?3 A6 X$ w! ]( ]) \+ N) C
+ y& ]/ q2 }) G6 a, o" Z; S
. v" B; P% S0 Q; C/ i4 `0 i
4 L( E2 s. ]: v# U0 Y% G7 c0 ]2 w
! g' x! v8 }  P
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

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

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
5#
 楼主| 发表于 2015-10-28 16:14:47 | 只看该作者
/* no rts heap */
% Z3 r- b( p5 KProgram.heap = 0;: H, J; j2 s" R9 H1 e6 k* Q" Y
Program.argSize = 100;  /* minimum size */
" @( [/ z* ?5 @2 FProgram.stack = 0xF000;                   //我改到F000  也不行
回复 支持 反对

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

积分
1093
地板
发表于 2015-10-28 09:51:31 | 只看该作者
/* create a default heap */
1 b+ ?* _9 Z/ E# P: zvar HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');1 |+ X" B+ i* e) I" L0 ^7 E- m, A
var heapMemParams = new HeapMem.Params();
: [6 ~2 E1 C) q' n6 h6 uheapMemParams.size = 0x4000;' O- g) ?3 Z1 b2 {. b" I

6 \1 [) c% G" `: Xvar Memory = xdc.useModule('xdc.runtime.Memory');
" L* O3 O/ O$ P0 l$ d5 X$ RMemory.defaultHeapInstance = HeapMem.create(heapMemParams);
( s, [( n) q2 F% _/ F
# m1 d; C/ A, W( b# }( g- [  ]我大约calloc  每次共计大小为5K*16bits,5 s+ Q) Q5 \( S+ s
而默认配置才0x4000、需要改大。
' f9 O, P: B2 e
! x# C' m9 s, V% c
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
板凳
 楼主| 发表于 2015-9-7 15:38:00 | 只看该作者
为什么没人回答呢?   大家都不用动态申请内存方式吗?
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2015-9-4 10:29:21 | 只看该作者
补充说明* R$ n: T3 ?* S5 [2 \# J: ^
我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下
$ g0 c2 C/ S3 V' O(不过疑惑的是,为何单独DSP仿真就没有问题呢?)
- v' q7 C4 s( U) B0 x
. H) [" ^, J. T( e
是不是需要在DSP.CFG中进行配置
5 Z9 u$ k6 p+ o- T, Z+ ?我现在的配置为2 ?) O+ |! E3 Q( \" m4 b
; F# H8 L* z5 C: q# Y3 n; B
/*" g) d2 Q3 ]9 f
*  ======== Operating System Configuration ========
; V! T7 X7 v9 t9 E1 t */- A) S% H7 h' m  D
; s0 @2 \0 |- S" [& M/ f% F. W
/* no rts heap */' l8 D* W# t! q
Program.heap = 0;
. @0 k( C2 H8 E  S3 P' B4 aProgram.argSize = 100;  /* minimum size */
# _: x( n1 Q  _Program.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大+ n: b) j( M' A, z1 s5 X
5 N( Z# U, v9 i
/* create a default heap */
: `$ M& C* v/ lvar HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');/ L, T# m7 ^3 b" T6 Q$ z
var heapMemParams = new HeapMem.Params();
6 P% G" r* P" S& T/ YheapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大
# A# H, F6 l4 u7 k. T/ u+ E2 |. F
var Memory = xdc.useModule('xdc.runtime.Memory');/ p2 L0 q( d$ p7 \3 a4 L. m/ {
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);$ }0 ], b! Q7 Y  V3 H& f

9 Y2 p- q2 }0 k& T/* configure System module */
8 O* y! a5 p1 i! fvar SysMin = xdc.useModule('xdc.runtime.SysMin');
# j4 d8 `) t' k, U- Q. \& WSysMin.bufSize = 0x1000;' |9 F1 @0 J9 d6 X( M4 q
SysMin.flushAtExit = false;3 j$ p( {. i1 a, h: ?" d- N6 U" V

8 T# Q" P' I4 j6 Jvar System = xdc.useModule('xdc.runtime.System');$ ]4 z/ U! i- R
System.SupportProxy = SysMin;5 w9 H9 {, h0 K$ d- O( }$ R* x
$ z. b# n+ Z. I3 H+ s
/* configure SysBios to use the lower half of Timer 1 */  C$ v2 L% Q2 w$ Q, D
var Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');) v( D' @" y- J9 S, V* Y1 S
var Clock = xdc.useModule('ti.sysbios.knl.Clock');) c3 ~9 }7 o& P  m
Timer.timerSettings[1].master = true;0 a2 a& q/ {, V+ C
Timer.defaultHalf = Timer.Half_LOWER;. _) B) {: ?( j8 [
Clock.timerId = 1;
$ r1 U0 b" M% u  R: ~' j
0 l1 n  C8 q. [) b1 s
( q, T+ H% M. U  [2 l2 \/ f: S3 d/*5 o+ U$ ~, V! y' b& a, p5 s
*  ======== Miscellaneous Configuration ========2 x( w0 V: ]& `3 E- h0 O
*/' C; T( g" L0 G6 H: ]! s" ^" B  c
8 m% V0 ~  y- D
/* set default diags mask */
9 V, u9 Z6 a$ b- a! Svar Diags = xdc.useModule('xdc.runtime.Diags');
% r" B8 i& J" o+ V' j: d) Tvar Defaults = xdc.useModule('xdc.runtime.Defaults');$ y7 ]3 _0 k/ [- g$ }
0 ^' B( l6 ]5 b! [" f
Defaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;4 D6 N/ |. n7 z$ Z/ b7 U, W
Defaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;
# W0 [2 e& N0 D# Y% v9 L# _* g6 WDefaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;( p# _7 X% {$ S. Z3 a  M
Defaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */
$ h7 v$ Y7 E3 @( [; wDefaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */' v# `' {) Q. @' r3 D; g
Defaults.common$.diags_STATUS    = Diags.RUNTIME_ON;
7 A9 @3 E! }. m% PDefaults.common$.diags_USER1     = Diags.ALWAYS_OFF;' G: O% J4 Z& k5 o
Defaults.common$.diags_USER2     = Diags.ALWAYS_OFF;3 i. W. l5 ~& M0 [. }3 u; p2 w
Defaults.common$.diags_USER3     = Diags.ALWAYS_OFF;
8 Q% D2 F! y6 d& H0 SDefaults.common$.diags_USER4     = Diags.ALWAYS_OFF;
" W% C6 H( A, e( m- c* I* DDefaults.common$.diags_USER5     = Diags.ALWAYS_OFF;
9 ?3 I4 D! G5 l( |2 C& c( NDefaults.common$.diags_USER6     = Diags.ALWAYS_OFF;
) c. V/ y, J% Q3 ~8 y4 l- RDefaults.common$.diags_INFO      = Diags.ALWAYS_OFF;# Y3 \5 _% R& _* V2 d2 z
Defaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;
# h% q" e' X( T5 K9 k* B4 N* z9 _9 p' m& O5 F
/* override diags mask for selected modules */# H  t$ n% d6 z
xdc.useModule('xdc.runtime.Main');
7 I8 k2 G! ^2 ~( j- \Diags.setMaskMeta(
' h  P% [% F' Q. l% Z7 a5 r. e    "xdc.runtime.Main",
% Y5 n8 l5 G; \! S" }+ B/ Y    Diags.ENTRY | Diags.EXIT | Diags.INFO,3 A9 n; g6 ]7 `. J$ Y& [
    Diags.RUNTIME_ON
& `2 {4 T: n/ ^8 c4 D1 k/ n! y" T);8 ]/ t3 Q" I7 x4 e3 r. O) g, H1 M

2 @# ?. C3 J. [6 O! Kvar Registry = xdc.useModule('xdc.runtime.Registry');
! o( Z  q  {! d& D! VRegistry.common$.diags_ENTRY = Diags.RUNTIME_OFF;
6 Q+ X3 g* ]5 r* a5 y' lRegistry.common$.diags_EXIT  = Diags.RUNTIME_OFF;. w, u: E( I& \& M4 v! g
Registry.common$.diags_INFO  = Diags.RUNTIME_OFF;) U: e: |9 l- L
Registry.common$.diags_USER1 = Diags.RUNTIME_OFF;
! I6 f( i8 n; N1 C! n; C( B" {9 b/ x8 Z: f% \, I: {) s
/* create a logger instance */
. |% v1 {7 d7 Z/ B) `. ]5 O- Bvar LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');
9 R9 g/ F* S+ s1 G2 G/ A/ E& B- T% Ivar loggerBufP = new LoggerBuf.Params();7 ~8 T! M0 n* ~. W/ i+ Q. ]. v+ f
loggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */. R2 h  _6 {% |# T0 a
loggerBufP.bufType = LoggerBuf.BufType_FIXED;+ w8 d, o+ B4 y. @

( V* w0 l% a7 Vvar appLogger = LoggerBuf.create(loggerBufP);
! ~) Z! L+ \5 c' m* |appLogger.instance.name = "AppLog_Core1";: w' t# B: E% Q& N4 j
Defaults.common$.logger = appLogger;
8 _' w$ }3 ^& Y4 ^: JMemory.defaultHeapSize = 0x8192;   
) ?- ^! g+ a. u6 s; ?  K$ }Idle.idleFxns[0] = "&LEDStatus";5 l" ^: t9 ~+ A' W4 O! I1 g% D
Cache.initSize.l2Size = Cache.L2Size_32K;
* s! q! H1 u' X" ~. d$ d3 ^0 @) A" Y  W$ R% u1 X
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-11-26 23:44 , Processed in 0.042876 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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