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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2015-9-4 08:33:31 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
创龙工程师你好,我在OMAPL138单独调试DSP程序(使用SYSBIOS)时,在任务中使用calloc函数动态申请内存,用完后free,类似如下结构# N2 {0 H$ Z/ H/ E' @
8 F: n, ^* W$ g* t1 S9 y- C0 I
    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //2563 t! ?7 R/ n# R- Q3 W7 b- l
5 Q7 s: r" f2 R1 p
其他程序段。。。。。4 s' h: ]. x/ c& F" Y

% U1 y0 Z" E5 Q# ^$ I! U7 [: {" k   free(x_d);
  E1 q, K, K6 |4 i# H- }1 q
+ a# K$ f" z* D9 F使用DSP侧单独调试功能,验证动态申请没有问题,
; i8 G* M8 V% f$ u: e$ e. m
/ `8 b% r6 s5 T但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。+ `2 j0 X0 P9 w
' T4 H8 s% M% w& h. K9 E) D/ w

  Z; c6 I- v3 ]* Q' a# Q! ~3 o3 A' W4 C# ]" v' a
  a! w1 q0 Q1 M. k9 q$ U

  [. t; k9 a1 O# {( \
; ^2 Z7 _8 V- c$ c  S, _4 @" A1 W% h* E5 C
; M' Q+ D  o  O  ^

) C% f, R/ ?: z* p( f! ^! ]& Q: E' R7 y$ T' |
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2015-9-4 10:29:21 | 只看该作者
补充说明6 B/ R! T  q/ p" h' `  @
我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下
; e1 r6 j: f& X2 {! `(不过疑惑的是,为何单独DSP仿真就没有问题呢?)1 O+ Q8 _9 c' Z/ i8 k2 X$ \- U% R1 A4 j$ B
$ \: b$ V. u- [7 V8 D
是不是需要在DSP.CFG中进行配置1 T) q8 C$ q+ n
我现在的配置为* n. H# u0 y8 k6 X% D) u' k" x

0 u& ^0 C) l1 u/*: f& w- r$ Z! u
*  ======== Operating System Configuration ========4 R3 z1 L0 S* `# \& ~1 W% s7 P
*/
+ x' t/ W' |( M! W# g4 Q; T" U* ]7 r9 A& X9 {& _$ j( t
/* no rts heap */; y. n" Z% z! m
Program.heap = 0;$ y9 v0 y5 a! b( }, Y; K' F
Program.argSize = 100;  /* minimum size */
, A+ W$ T' m: [) AProgram.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大
# A" Q3 w8 {5 {/ o" T( U' G0 ?; J% q6 X
/* create a default heap */
7 F. c0 y2 c! s+ \2 p. x" t- R5 Tvar HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');1 o& C; X% Y% \6 F
var heapMemParams = new HeapMem.Params();
$ G, P! ~& E5 {/ {7 T  S  Y( jheapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大
2 _% Z  C/ m; C# E& H8 A8 V  l
- k7 m3 q6 G" x. i2 c# Y
var Memory = xdc.useModule('xdc.runtime.Memory');
- L" R$ h& f: P4 `4 }Memory.defaultHeapInstance = HeapMem.create(heapMemParams);
! c3 K' Q1 i2 p7 n. \1 x( C# A$ m/ c9 e- ^2 r
/* configure System module */
; K) ~; A% P& n  d5 F/ K' O  a( }+ Dvar SysMin = xdc.useModule('xdc.runtime.SysMin');" p: R8 V8 ^/ N# ^4 W
SysMin.bufSize = 0x1000;
0 {* }; y, _% R/ @3 f5 v5 b3 VSysMin.flushAtExit = false;
# ?. J+ @! W! G3 K: g4 w* W( c: J7 ^
7 x5 m0 H# e5 d& D# n6 R3 X( Lvar System = xdc.useModule('xdc.runtime.System');  {, g4 t7 X; c/ G4 v- Q
System.SupportProxy = SysMin;& B& f/ R7 c! J+ P1 T- F( |

& O  y+ [( P# w! L  i/* configure SysBios to use the lower half of Timer 1 */
( n$ k0 C* P4 m3 ^7 T7 w, cvar Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');4 _* [! X& ?; u. }1 C
var Clock = xdc.useModule('ti.sysbios.knl.Clock');1 z1 A( @2 Z) `. F1 z7 h
Timer.timerSettings[1].master = true;
4 I3 f9 ]% C6 [* m3 d) |; WTimer.defaultHalf = Timer.Half_LOWER;
& Y( N0 ^" F1 [( y5 s0 e; P. h! HClock.timerId = 1;. o8 N. ^/ z! U8 G, J. L- G

/ ]$ n. Y9 [" G  _& U- x9 r( z& a3 e. F
/*! O4 b! F; r5 Z) T0 b  Q2 I
*  ======== Miscellaneous Configuration ========% H2 F% X6 p2 [3 f( V
*/3 J7 C/ K: K' S1 \

. z$ ?3 a: e/ _1 j& W6 }/* set default diags mask */
. z- \# {  p' X9 i5 r+ g8 ]- U7 \var Diags = xdc.useModule('xdc.runtime.Diags');
. c, |- L$ e$ nvar Defaults = xdc.useModule('xdc.runtime.Defaults');
! C4 k3 F7 W- f9 e
% ]  B0 O, s+ {/ iDefaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;4 `  {. R9 H+ E9 r! @6 o
Defaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;/ b) D% B' ?; i( ^- @
Defaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;
9 f% U0 ?* S: B" `1 ]- G# KDefaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */
- {; [+ ?* w. U5 CDefaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */0 s/ W5 k6 d( V% [
Defaults.common$.diags_STATUS    = Diags.RUNTIME_ON;! D! c/ h0 x' |$ v2 `+ f
Defaults.common$.diags_USER1     = Diags.ALWAYS_OFF;
2 [" u) L/ |# TDefaults.common$.diags_USER2     = Diags.ALWAYS_OFF;- }% }# G3 j# \) [+ s* v: |) Q
Defaults.common$.diags_USER3     = Diags.ALWAYS_OFF;
3 U, N, L: Q. v% tDefaults.common$.diags_USER4     = Diags.ALWAYS_OFF;
: X8 a- e* t' s/ G7 h3 TDefaults.common$.diags_USER5     = Diags.ALWAYS_OFF;
5 D' ?9 y+ S2 V+ R! T0 {  g) E% cDefaults.common$.diags_USER6     = Diags.ALWAYS_OFF;9 {2 R. E5 `- X) i3 O
Defaults.common$.diags_INFO      = Diags.ALWAYS_OFF;; |: o: K, L% E( t
Defaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;3 G0 P' H, I! |( s
4 q2 ?- E" X2 V7 @( ?8 F! [( T
/* override diags mask for selected modules */
, K" E" q# \- P, w# r" w7 kxdc.useModule('xdc.runtime.Main');6 `$ @8 [: l' f; J+ Z
Diags.setMaskMeta() ]8 Z4 }9 [0 U! ^6 R. Y2 K. c
    "xdc.runtime.Main",) m; j6 W: b: j
    Diags.ENTRY | Diags.EXIT | Diags.INFO," P( v% q4 M: Y
    Diags.RUNTIME_ON  S7 f, d5 y- o. C; ]
);% v" }) M' ]0 w+ h

, g+ U3 k5 z( jvar Registry = xdc.useModule('xdc.runtime.Registry');
; X2 q  S% g! |, y; A1 PRegistry.common$.diags_ENTRY = Diags.RUNTIME_OFF;% j  g- ~  w# }  N
Registry.common$.diags_EXIT  = Diags.RUNTIME_OFF;
( }- O5 E4 y' g9 F8 YRegistry.common$.diags_INFO  = Diags.RUNTIME_OFF;* t8 L5 Q7 X# J/ g& M9 ^5 o8 @
Registry.common$.diags_USER1 = Diags.RUNTIME_OFF;
0 k: L9 k( \2 s2 w  k
3 Y- O0 @0 D; p% j/ I2 ], a1 N/* create a logger instance */. D2 j# ~7 z4 L! i
var LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');
; h  C7 |& K0 Gvar loggerBufP = new LoggerBuf.Params();
( M; U9 v! X  p. n2 x. z7 AloggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */
" J# }" }% g$ a, a4 g8 C  r6 H  a& zloggerBufP.bufType = LoggerBuf.BufType_FIXED;
" F$ Z4 K- a( b2 I! _8 N( K
7 X' j/ R; [8 O# d: v  m! Q. `6 fvar appLogger = LoggerBuf.create(loggerBufP);* r* d2 Z) e7 b" m6 ~4 @
appLogger.instance.name = "AppLog_Core1";, D. B) s+ C8 G" f6 }3 u. I' P* J
Defaults.common$.logger = appLogger;
, X) C% @- R' Q/ GMemory.defaultHeapSize = 0x8192;   
. r# V, i6 Q/ j- d$ |Idle.idleFxns[0] = "&LEDStatus";
; ?& d' q  ]' u2 fCache.initSize.l2Size = Cache.L2Size_32K;
1 ^5 G" T% v( v! y2 I! l1 @, A7 @7 O& ?+ s3 j+ k! r
回复 支持 反对

使用道具 举报

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 */
, a+ l: Y  M+ W# ~, avar HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
! ~. p. n  o% l4 o- P$ S9 u5 tvar heapMemParams = new HeapMem.Params();; X# A' L: o% ?; G$ l+ v
heapMemParams.size = 0x4000;0 E' Q# F7 S" b% Z, r
8 ~9 z% N8 b3 m8 k/ l4 t
var Memory = xdc.useModule('xdc.runtime.Memory');
$ j1 u, B8 q; x. }5 C/ [3 dMemory.defaultHeapInstance = HeapMem.create(heapMemParams);1 q+ A' V! c4 h' J+ b5 e: C# P3 S

8 b( x7 E- J' @+ @+ [. p我大约calloc  每次共计大小为5K*16bits,
* o) a- l: k6 j7 _' s而默认配置才0x4000、需要改大。
, Y& j* Q5 ]9 X+ t4 ^0 R2 D) U# K2 k- n& R! a% g
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
5#
 楼主| 发表于 2015-10-28 16:14:47 | 只看该作者
/* no rts heap */
$ c- g; V  g& M! iProgram.heap = 0;8 i9 q/ q- X& ~$ s
Program.argSize = 100;  /* minimum size */; l+ E( o. I2 E  h9 [- S
Program.stack = 0xF000;                   //我改到F000  也不行
回复 支持 反对

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2026-1-5 14:50 , Processed in 0.040493 second(s), 23 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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