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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2015-9-4 08:33:31 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
创龙工程师你好,我在OMAPL138单独调试DSP程序(使用SYSBIOS)时,在任务中使用calloc函数动态申请内存,用完后free,类似如下结构9 W. f8 o; z" ]' U) A7 O
$ K  L/ r7 R( w' k, ~
    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //2564 k1 D5 g: C; f2 `
" ~9 O# K; ^9 Q. S- D2 ^' }0 _( |
其他程序段。。。。。
$ T  x4 u' _" `0 g3 V2 r + L+ I' R; L) w' Q
   free(x_d);% _* M" k1 p' u! M+ A# C

/ |  u* m. q) X) B9 v  Y6 @使用DSP侧单独调试功能,验证动态申请没有问题,+ u" G" C3 q# O; P5 B8 a" t
3 N- C5 _, k4 l: P# i
但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。7 {5 ~: J6 C. |5 u8 k  I% S4 f6 o' s+ z

3 Q5 ^6 n4 S) {) l) R" X
: _9 u7 Y. }& P. q1 Q. g% u
; U1 W2 a. M. W0 S. d
. H# @8 u  t' x5 G7 D
2 b4 Q* ?2 w4 U5 q) b! D. z* a
$ h. [3 K/ N/ Z8 Y. ^5 `5 Q7 \+ D7 j, i# c2 Z' o' ^) p
4 v  l/ k9 Q- E  o

* P/ c' c/ J0 G  e  c: a  x
, c  M6 ?% s) {
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2015-9-4 10:29:21 | 只看该作者
补充说明
- M- f: z+ Y& Q8 ~+ e8 f我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下; y1 V* D$ d* V/ i  n
(不过疑惑的是,为何单独DSP仿真就没有问题呢?)
' b9 R0 o7 M2 V1 p3 I8 J& `

. s; v$ R& V1 u3 s3 }% t是不是需要在DSP.CFG中进行配置( _; u. y5 B+ ~3 v3 g$ J  h& X4 h( X* y
我现在的配置为
' o/ N* ~4 J+ e. l: B" [/ v
; s; ~- y9 U7 ~( v/*
) Q9 J' p! i) _& t7 C$ i& R! B *  ======== Operating System Configuration ========
# P$ c* Y" x. r4 _ */
+ D& L3 T7 [+ \6 d: `/ W
- L/ ?( `! O! Q/* no rts heap */
7 ?( b3 R7 z% RProgram.heap = 0;
( O" J  T/ g: a* zProgram.argSize = 100;  /* minimum size */
8 v0 e% Q6 U% w2 d5 `& ~Program.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大
/ r8 e+ d/ D3 C; W% z+ t% D$ g5 W/ |6 ^0 w1 q. B
/* create a default heap */" Z8 W1 G2 b" J0 z2 G  G
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');3 l* V/ u4 |/ E5 I: }
var heapMemParams = new HeapMem.Params();
( V: e/ y" r4 X0 E5 JheapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大
* L7 F. l0 s6 Q2 j0 k
1 k; E) b% ^7 n7 o- c) V
var Memory = xdc.useModule('xdc.runtime.Memory');. B, H! c. _# `* f% m% r# b
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);3 M4 T0 [( k: t. m- D  X( B% d
. H0 C& `# {3 X9 i. e4 C
/* configure System module */
1 x3 l' z+ p2 _: l: C/ ^var SysMin = xdc.useModule('xdc.runtime.SysMin');$ a/ F" U( a+ y, i& |$ @6 T2 o4 ]
SysMin.bufSize = 0x1000;1 e1 N# L+ m1 Q& @7 m
SysMin.flushAtExit = false;
0 H. I, U8 `9 R  i9 P7 }( ]) K% _0 t4 A7 \9 b$ L, o
var System = xdc.useModule('xdc.runtime.System');! `1 N  L7 d- U
System.SupportProxy = SysMin;
  j4 Y8 n+ u  }& P3 }9 S( X! k) n! k
/* configure SysBios to use the lower half of Timer 1 */( D  _: e2 M- Z7 G$ \, k
var Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');2 ?0 B8 K+ w6 I( _
var Clock = xdc.useModule('ti.sysbios.knl.Clock');% j* q. e8 L8 `3 o, W
Timer.timerSettings[1].master = true;
0 v& [- q6 B* sTimer.defaultHalf = Timer.Half_LOWER;
1 V& G: D  i( I/ l9 _' C0 V/ iClock.timerId = 1;
* R( o( X% W' ]' Q5 n5 u5 K" H! W: \( E7 m& v

: f8 \+ P$ S9 Y2 h! _+ n3 S/*
; h% f& N! ]6 h; u4 [ *  ======== Miscellaneous Configuration ========
+ h& h( F4 O' l */6 P; U/ o$ g4 C/ a/ r. u

- e, t' i; v% \$ ~5 X/* set default diags mask */" D# Q' P- V/ g
var Diags = xdc.useModule('xdc.runtime.Diags');' u" \! X$ N  [4 v- F2 z$ G# Y! _/ F
var Defaults = xdc.useModule('xdc.runtime.Defaults');6 w4 D5 e4 ?9 _
$ e) L0 j* d1 [; F4 Z9 B6 W
Defaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;
3 d$ A& Z, j; ~9 l5 _Defaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;( X( E% i. `- z3 A0 |% L/ W* i. E
Defaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;& X' z9 r6 x) @2 e, h- o2 w# e
Defaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */
3 ]6 d6 n" z  G( _8 i3 FDefaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */
. G) w5 ^1 S0 Y& Y: t. q$ D# eDefaults.common$.diags_STATUS    = Diags.RUNTIME_ON;
0 [: p; z5 V9 x* c* d4 }Defaults.common$.diags_USER1     = Diags.ALWAYS_OFF;1 h2 q" t2 |9 @  G* r# u
Defaults.common$.diags_USER2     = Diags.ALWAYS_OFF;; o6 L  J* d- {3 c( n
Defaults.common$.diags_USER3     = Diags.ALWAYS_OFF;
: l7 c% ~6 a" h/ D+ v* e8 TDefaults.common$.diags_USER4     = Diags.ALWAYS_OFF;
, F6 H9 Q; m: ^9 p* m" ZDefaults.common$.diags_USER5     = Diags.ALWAYS_OFF;
, I$ K2 v+ t) m/ i/ FDefaults.common$.diags_USER6     = Diags.ALWAYS_OFF;
1 B) A) L! D+ C4 {7 d9 tDefaults.common$.diags_INFO      = Diags.ALWAYS_OFF;
, l& X* f# l( [% ]" C* cDefaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;3 g# z' k" a& ^% W+ v
$ z! ]! J( t; @
/* override diags mask for selected modules */& X4 u6 J! Q5 b  W
xdc.useModule('xdc.runtime.Main');: C& Q$ U% S/ _
Diags.setMaskMeta(, b" r/ \6 o% w: {
    "xdc.runtime.Main",. L* G- f8 A# b' j
    Diags.ENTRY | Diags.EXIT | Diags.INFO,
% A) v; n! E  G7 {    Diags.RUNTIME_ON: f2 j( J+ p( Q
);
4 m( W+ G6 ?  b3 R* ?. j1 e. O, E$ s: n9 Q# `: K% _$ q- ^) \
var Registry = xdc.useModule('xdc.runtime.Registry');
% n' c! y. S" ?$ u5 `Registry.common$.diags_ENTRY = Diags.RUNTIME_OFF;( c5 B6 J" ^3 R! N" Z' Y4 k
Registry.common$.diags_EXIT  = Diags.RUNTIME_OFF;8 ~- Y# {& n1 S6 P$ Z
Registry.common$.diags_INFO  = Diags.RUNTIME_OFF;
% [/ U! d9 n( WRegistry.common$.diags_USER1 = Diags.RUNTIME_OFF;8 Q. R' N  _6 n- X' L9 s2 M8 g
- D/ U9 B8 c! X$ r& W0 a- r. d
/* create a logger instance */
5 R! T) W( ?+ K4 \5 d  Ovar LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');
" D) q/ w2 n2 h' Q* \2 S( @( Rvar loggerBufP = new LoggerBuf.Params();
& m: A) G3 W7 m- Z) wloggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */
, u/ E% G" {8 t% {* f* a  @loggerBufP.bufType = LoggerBuf.BufType_FIXED;; Q6 n, N& D; Y/ I! u* P( A# z# c

. J+ y, h0 ~" v: w4 E% hvar appLogger = LoggerBuf.create(loggerBufP);
( T$ S: Z8 u, i( |6 ^appLogger.instance.name = "AppLog_Core1";
+ s: u7 R/ F, L& UDefaults.common$.logger = appLogger;. i% h/ _; O0 G1 Q$ w
Memory.defaultHeapSize = 0x8192;    6 T9 y: Z6 G' i; Q, ~7 b
Idle.idleFxns[0] = "&LEDStatus";
  U, b1 P7 R1 X: x' OCache.initSize.l2Size = Cache.L2Size_32K;6 E+ S' q' |5 t8 {
' ?! z4 ^  J% A0 Q; }
回复 支持 反对

使用道具 举报

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 */
& B5 u! P1 y: b2 ]7 Cvar HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
) e) m" k9 E) B% ]* ~var heapMemParams = new HeapMem.Params();
8 D8 G" U/ W# o5 |heapMemParams.size = 0x4000;
0 _  `: G; D* [" q) _* z* C
7 d, z) {6 ?4 vvar Memory = xdc.useModule('xdc.runtime.Memory');) g  f$ K" Y1 a( w! f6 O! p
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);4 u+ J: V- s( z' e0 b+ T) g" b6 k

, |( @  m9 R- I0 b& W) E) D我大约calloc  每次共计大小为5K*16bits,4 z( _4 c' t, T, z$ H
而默认配置才0x4000、需要改大。9 A- F5 |4 Y* Q- u, x0 M6 q: A

2 f1 ]( f% z' W4 c5 p: c- P
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
5#
 楼主| 发表于 2015-10-28 16:14:47 | 只看该作者
/* no rts heap */
" F# ]9 t, V- X3 gProgram.heap = 0;
" f" [$ s# O- o$ _4 Y: J$ k4 OProgram.argSize = 100;  /* minimum size */
; u0 D! ]( p! D; ^2 HProgram.stack = 0xF000;                   //我改到F000  也不行
回复 支持 反对

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

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

使用道具 举报

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

本版积分规则

点击跳转“创龙科技服务通”

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

GMT+8, 2026-1-27 20:56 , Processed in 0.041024 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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