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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2015-9-4 08:33:31 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
创龙工程师你好,我在OMAPL138单独调试DSP程序(使用SYSBIOS)时,在任务中使用calloc函数动态申请内存,用完后free,类似如下结构  {! U6 t! E; ^/ V: s( L- @
4 _% m* Y, Q$ R; Z: V, c: [
    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //256
* n* Y: _3 ^2 O9 g! k* _) x
3 o7 g: s5 e5 p% {7 a5 B) `! C其他程序段。。。。。( W# M8 v: Z, u( ?/ s

% h- m; T9 n$ z. S/ r1 O   free(x_d);5 z8 o$ p8 |! x+ T4 B5 a, F: U

  M* y: C  q/ H6 P3 [8 j使用DSP侧单独调试功能,验证动态申请没有问题,' G: k+ w% m7 s
) z; V  w$ }4 g$ g
但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。
. w7 H, P* d( H8 W2 d: K+ l- B

; a* X9 O( ^7 Y) C: ^4 Y1 m4 [3 X
; n; X- S1 |6 L. [! p( I
7 p' ]& A& G: M6 m1 ]; U

) A% x! P4 G8 u# e
7 M+ Z/ n0 T7 W; K% p2 U- C1 i2 }) ]. I9 C+ u' P

  U# ~/ a# B; H( _1 r3 I  p7 \$ L8 i7 B# p5 m

. K: @4 I) F& w+ L2 Q
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2015-9-4 10:29:21 | 只看该作者
补充说明
4 z; I3 N% L2 A" U4 k9 Q我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下
2 v. E$ ~) q2 f/ n6 M" m3 R(不过疑惑的是,为何单独DSP仿真就没有问题呢?)+ U, @: J, c1 X3 y

5 Z: g: H  v( M$ D9 t/ d是不是需要在DSP.CFG中进行配置$ s$ @% x2 u6 M/ K$ n3 u
我现在的配置为
# V9 H! v, y2 x
' E: e( R2 l; h' w0 K1 X2 |/ h/*
! ^* z3 Z- r( U *  ======== Operating System Configuration ========
, [8 U0 m2 `- P7 R  g9 x* y/ \4 s3 t */1 w  z( a( U% p6 m. G

0 J- I" c4 c( s% D/* no rts heap */
9 q/ x7 d- l9 J# S1 B- tProgram.heap = 0;
, E  z; }% A& D- B( [% p8 i2 W' nProgram.argSize = 100;  /* minimum size */
3 x/ Z- ]) G9 J* s. }2 D9 FProgram.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大+ l' j9 T  _6 z/ X
- `- R3 a; l: e: Q5 K
/* create a default heap */
% @, |  m0 [: ]* K" d  Gvar HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
' B, g, Z. K4 T0 pvar heapMemParams = new HeapMem.Params();
9 p6 }; g9 X9 v( x0 w- x6 N3 j( eheapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大5 H8 D3 U0 X4 c5 n. z. _
6 t! `, D7 W' a6 s2 |4 ?
var Memory = xdc.useModule('xdc.runtime.Memory');$ t/ i' ~% r9 E7 r" x. U( N: M+ @
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);
3 A8 I7 B* ]! h$ ^: n2 g. b  {
) L% M) P; i, O& m/* configure System module */8 U0 Q6 E. M8 y% d% l" k
var SysMin = xdc.useModule('xdc.runtime.SysMin');
( {& J* ~& R: GSysMin.bufSize = 0x1000;0 ~8 d& `5 ^, |! O8 h
SysMin.flushAtExit = false;5 V! M/ I& z8 l& h& k/ B
( r2 w$ ?7 o, g( E/ U( d
var System = xdc.useModule('xdc.runtime.System');
( d0 f# f, R  H7 `" l" l. dSystem.SupportProxy = SysMin;
$ y) l/ q8 b$ \
$ [9 s2 m# Y0 D) |/* configure SysBios to use the lower half of Timer 1 */  k3 [# D, x. |0 h9 `
var Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');" C6 m9 j( }! W8 R
var Clock = xdc.useModule('ti.sysbios.knl.Clock');
; r8 c: v: A+ ITimer.timerSettings[1].master = true;
( @. N% P1 @0 E2 k- w; ~Timer.defaultHalf = Timer.Half_LOWER;
9 m: U4 A/ @1 P. ]) HClock.timerId = 1;9 G1 P& n7 D9 K! f8 W2 n5 I4 x7 R" K* L
3 ~, q' g5 i. [" H

5 C$ h% u; ]' _& c# B5 g/*( h! x" V5 _6 J
*  ======== Miscellaneous Configuration ========, `# Y0 h) }9 a
*/1 C3 I& g) V: R0 j3 L
$ K  [$ w4 r2 @, O7 Z: |9 ?3 S
/* set default diags mask */
1 h/ Q; l1 H4 u! Evar Diags = xdc.useModule('xdc.runtime.Diags');
0 _7 v$ P& `1 e; W+ X# Q% u0 Yvar Defaults = xdc.useModule('xdc.runtime.Defaults');
$ v$ T" V$ C4 A4 X- }5 O3 H6 Z3 y$ }3 Y* R5 q. b/ e  `$ ]3 B5 t
Defaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;
* v7 [; O: g# i8 \0 K+ S5 _Defaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;
9 Y8 b' A7 I! ^2 \Defaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;7 h+ W* \. F  C/ N( W* i/ j
Defaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */& d: v- w" x8 t: ?* i& e
Defaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */
1 V! x. N7 K. ]8 wDefaults.common$.diags_STATUS    = Diags.RUNTIME_ON;5 [" l1 {1 w# m  ?! H- }4 j/ p
Defaults.common$.diags_USER1     = Diags.ALWAYS_OFF;& w/ C; u2 C" _3 W
Defaults.common$.diags_USER2     = Diags.ALWAYS_OFF;& }) S% z  G- Q
Defaults.common$.diags_USER3     = Diags.ALWAYS_OFF;
4 x' l0 s  j" {) X3 l# P& w: ~Defaults.common$.diags_USER4     = Diags.ALWAYS_OFF;  m2 F# F, g  x# g
Defaults.common$.diags_USER5     = Diags.ALWAYS_OFF;( W6 G2 {) S- M& c- x! h/ g& H
Defaults.common$.diags_USER6     = Diags.ALWAYS_OFF;; p& p% j( x9 Q3 Q
Defaults.common$.diags_INFO      = Diags.ALWAYS_OFF;
& n9 l* P) \( v- G# yDefaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;
: T. x( X$ e& O' h7 U7 }* e' g3 k! w2 j
/* override diags mask for selected modules */6 W! _- A5 o0 I( K0 z
xdc.useModule('xdc.runtime.Main');
: Q3 Y0 c9 L0 }2 N% @$ a- v% QDiags.setMaskMeta(
" a6 z% h5 O& N    "xdc.runtime.Main",! K3 W6 z) @! w+ V' H) a
    Diags.ENTRY | Diags.EXIT | Diags.INFO,
$ A: S% @! t& p) {- Q    Diags.RUNTIME_ON& G' y2 w' `2 L& {
);
3 i' d% c/ j$ k& z4 y1 |8 c+ M) V
6 q: D' y3 E& q' }* g) svar Registry = xdc.useModule('xdc.runtime.Registry');
% ^2 V/ n6 Y3 h: bRegistry.common$.diags_ENTRY = Diags.RUNTIME_OFF;7 r3 n+ y( U& t5 I7 R( L- F
Registry.common$.diags_EXIT  = Diags.RUNTIME_OFF;
  Y4 _% O4 ?# H, b* kRegistry.common$.diags_INFO  = Diags.RUNTIME_OFF;
5 f8 s6 s/ X9 d  D9 V' a, V9 zRegistry.common$.diags_USER1 = Diags.RUNTIME_OFF;
7 R4 ?. ~) s0 C% W0 E& l
  H* w+ t% J# m3 }! z9 ~/* create a logger instance */; i/ n8 y! n; k
var LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');
) |4 U- Q1 G0 s7 r- g+ a8 H2 e& tvar loggerBufP = new LoggerBuf.Params();
% P9 j. T+ k+ _( v7 jloggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */
; i" z. c2 X2 \; L/ ologgerBufP.bufType = LoggerBuf.BufType_FIXED;
8 }& N  F  J+ [6 p4 F/ f2 E' `3 d" n+ ]" u. d
var appLogger = LoggerBuf.create(loggerBufP);
5 i& c  G( k2 ^# j& @appLogger.instance.name = "AppLog_Core1";4 b( @5 t/ |) y- I9 S
Defaults.common$.logger = appLogger;
+ |: n7 i3 h) |1 |2 TMemory.defaultHeapSize = 0x8192;   
) G, \; d! Z+ y  V+ W4 Q# cIdle.idleFxns[0] = "&LEDStatus";
( g; k! h, c( z6 cCache.initSize.l2Size = Cache.L2Size_32K;
" p5 u4 W- l8 {$ e- P, d( W
' c: L) v! G0 T; v; v; C* u
回复 支持 反对

使用道具 举报

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+ t- t2 \+ c6 |7 a+ Vvar HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');2 p: ~2 C" L( V) k: D+ F, F
var heapMemParams = new HeapMem.Params();* {; S$ u. a4 Y2 u; }8 t
heapMemParams.size = 0x4000;
9 R( |) ?' F# X; p. C: m5 j% u4 l, Y% ~4 H  K( n0 z0 u) Q' }
var Memory = xdc.useModule('xdc.runtime.Memory');
8 g: ?$ ~% q' s# \6 {' ^+ z% UMemory.defaultHeapInstance = HeapMem.create(heapMemParams);7 u5 @" j, O2 U& V, w- q

8 M$ ]& L% }+ z$ N我大约calloc  每次共计大小为5K*16bits,
* @0 L/ Q, n& N9 g9 W& `% C而默认配置才0x4000、需要改大。
4 _( l9 [6 P* V% p+ \( ?* K7 b
; N, L4 L* d- V4 F1 _% f
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
5#
 楼主| 发表于 2015-10-28 16:14:47 | 只看该作者
/* no rts heap */
5 i& F* q0 b# ~3 s" E1 |+ W7 [+ dProgram.heap = 0;0 ~0 _$ q! D- a) E, ?+ D
Program.argSize = 100;  /* minimum size */: `" a& m# N8 T* ]1 _; K7 v& Z! z) y
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-12 17:02 , Processed in 0.040409 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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