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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2015-9-4 08:33:31 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
创龙工程师你好,我在OMAPL138单独调试DSP程序(使用SYSBIOS)时,在任务中使用calloc函数动态申请内存,用完后free,类似如下结构: L) _' ~! y$ L+ R0 |. W

8 R% @9 U# U# r' f    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //256; G- h! ?9 T( j0 Q: r
7 ^- S  B. h/ o' H+ c6 O! l$ U
其他程序段。。。。。" |  y' n* C" n+ u7 Q1 }
/ h; u" I" X! z9 k0 Z- U* C
   free(x_d);
  X" O* p  {# x4 }9 W4 |7 j9 W# e$ b
使用DSP侧单独调试功能,验证动态申请没有问题,/ L0 R& x/ H2 Z! ~

  _' j7 H& t  R" o9 q- U/ j1 F但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。
3 f- }" Z+ c/ t% V, D* p
( E( s/ D% A3 e& s) k/ X0 `

- e  J" T* q4 z% l4 {% o
1 H. }# o3 t# @' y7 K9 _$ C' t2 w$ D5 u+ I& O
, E2 b2 b/ Y4 N$ Q7 w

& h0 z9 L, g. Q
- D% s  c8 {( K
3 M; z# E$ v# x" o* x
# d. ^2 z! O* K9 l) ]+ {3 S7 T
9 R2 _- ]- C1 B. {
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2015-9-4 10:29:21 | 只看该作者
补充说明; i* s6 f* y% R" j2 k* k* N5 i
我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下  j: u. P8 t6 ]- |
(不过疑惑的是,为何单独DSP仿真就没有问题呢?): n* i& O! }/ W! U

4 z" ]: L2 ]; j$ y& G" [- [是不是需要在DSP.CFG中进行配置
7 `" h$ f$ ^7 x' \我现在的配置为
: z: Z  ^- Z7 d) G
% `7 w9 u" J7 I8 S, C$ D$ @/*
* }9 ~  @6 Q  ~( B( I *  ======== Operating System Configuration ========8 w# `/ i6 c! W6 s3 }
*/
4 e; X+ b( l% k. I) F& _+ r/ R2 ^: o9 O
/* no rts heap *// R! U8 L1 Q9 s4 o! H, H4 r
Program.heap = 0;
4 r% B1 v7 |2 HProgram.argSize = 100;  /* minimum size */
! S5 f7 `: ?  X7 q- M2 \* W3 bProgram.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大4 x- Q! ?; ?" X  C# z0 ]

+ {  y8 x% j) a( F5 i/* create a default heap */
! M! ^5 H" @  T9 fvar HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');& v) i& F2 |; }( g( J1 z
var heapMemParams = new HeapMem.Params();
$ B* W2 B# Y, I* _heapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大
6 D% X/ L; ]3 |# S* t* K, ?3 j: E* ?# |5 r
var Memory = xdc.useModule('xdc.runtime.Memory');7 b0 h3 `! w, g; T6 z  Z
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);. c" ~) ~) }3 D' S+ q

: L: @) k1 L$ j1 ~$ T6 h/* configure System module */
/ J7 g% ~6 z8 W$ qvar SysMin = xdc.useModule('xdc.runtime.SysMin');
( [# X' G5 ?0 I. a/ J$ Y8 aSysMin.bufSize = 0x1000;
0 [& g: [# T: Z1 J5 T% v2 TSysMin.flushAtExit = false;
0 X% y( E% m* x1 z- ^8 N
* j2 ]! C. e/ L# I1 z( Nvar System = xdc.useModule('xdc.runtime.System');
( l0 C8 |( Y% CSystem.SupportProxy = SysMin;9 x9 P# Z/ \: A) _2 v: Y

( U' \6 y8 P% Z. W/* configure SysBios to use the lower half of Timer 1 */, z; K1 [" q* [* m2 p& F, g
var Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');. P# ~# ~4 M! K9 L% |1 [
var Clock = xdc.useModule('ti.sysbios.knl.Clock');/ C  V# f; Y. h( n* {% f
Timer.timerSettings[1].master = true;
: b5 F) X! P/ CTimer.defaultHalf = Timer.Half_LOWER;
  ?8 J$ ^" l3 x7 lClock.timerId = 1;
+ o# J, o, z3 h2 l: o% u* E8 ]6 `0 T. m5 B

* |; }# B: L7 H) Q) g5 P/*
6 q4 d/ ^0 \0 T *  ======== Miscellaneous Configuration ========
& V% V; Q2 }+ C */1 B2 \* A9 T: q& H' \  R& a8 [

* U6 G( m' d6 n$ M/* set default diags mask */
! a7 G  [  m8 E2 k3 @var Diags = xdc.useModule('xdc.runtime.Diags');& r( c! |. r6 {3 R5 {1 ?8 x
var Defaults = xdc.useModule('xdc.runtime.Defaults');; B: L' s/ i7 P/ F
, Y8 K4 x" @5 p0 B$ @4 g
Defaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;7 E$ x6 {: H2 z& k+ E+ W7 u. t+ u
Defaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;
3 W7 e$ v" e5 Q6 H* l# P* a. ~Defaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;9 |) B3 Q2 g# e" |9 F
Defaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */
4 l$ A7 R5 R, SDefaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */
1 _1 Z" Q+ T" Q7 z8 Y, VDefaults.common$.diags_STATUS    = Diags.RUNTIME_ON;1 C+ w+ |# M2 C8 V+ K
Defaults.common$.diags_USER1     = Diags.ALWAYS_OFF;- C# v$ {% E  w, F2 w7 I
Defaults.common$.diags_USER2     = Diags.ALWAYS_OFF;. G# j' _: c7 a1 C# Q
Defaults.common$.diags_USER3     = Diags.ALWAYS_OFF;: _2 e( r: z+ u, h! f. k8 I
Defaults.common$.diags_USER4     = Diags.ALWAYS_OFF;9 _5 ?( C! S7 @. G2 j
Defaults.common$.diags_USER5     = Diags.ALWAYS_OFF;) Y) u( y% }$ A
Defaults.common$.diags_USER6     = Diags.ALWAYS_OFF;/ _# ?1 n( N9 r3 h% F
Defaults.common$.diags_INFO      = Diags.ALWAYS_OFF;+ \" `+ B+ j  k5 `6 i4 f! _* a
Defaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;  i: ?! G% u0 Y! e% a* k
+ v7 |' ^0 {$ U" Q4 ~+ r4 v
/* override diags mask for selected modules */
8 [3 U9 b) @- F9 F- sxdc.useModule('xdc.runtime.Main');
/ m9 X# [& }9 iDiags.setMaskMeta(
6 w# b& p& O* [5 }& \" ^    "xdc.runtime.Main",
% U- `$ t3 j( ~$ A* B    Diags.ENTRY | Diags.EXIT | Diags.INFO,
7 _7 W$ s' R, ~9 E# A; r0 G    Diags.RUNTIME_ON* y5 o1 P  v7 a1 A7 s1 W
);
+ e4 K9 ?& K9 {+ N3 J" T8 [( @9 L" P' @& P
var Registry = xdc.useModule('xdc.runtime.Registry');
+ n  E! {/ _: @$ W: y3 kRegistry.common$.diags_ENTRY = Diags.RUNTIME_OFF;
5 @) [% o9 k' Y+ WRegistry.common$.diags_EXIT  = Diags.RUNTIME_OFF;
0 M' b5 d+ [8 y3 n6 i7 ORegistry.common$.diags_INFO  = Diags.RUNTIME_OFF;
' r# e1 S" p$ |+ K; PRegistry.common$.diags_USER1 = Diags.RUNTIME_OFF;
9 L& I7 ?4 J& H$ x1 N) V7 k1 a- x/ m3 L9 Y+ k5 V$ E
/* create a logger instance */0 u' m4 h) D8 p# s
var LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');" G0 ]; j% E5 N* B7 w% q: p
var loggerBufP = new LoggerBuf.Params();
6 G" C3 E2 n- M; n* _# \loggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */; o1 d6 E/ A9 e. N/ ~- Q0 `
loggerBufP.bufType = LoggerBuf.BufType_FIXED;
4 n& r. S* ~. D+ A7 ~) }: O
& O: u' ^( K6 K5 [8 _& |, I) X$ evar appLogger = LoggerBuf.create(loggerBufP);
" m! k/ m3 E; f7 ^appLogger.instance.name = "AppLog_Core1";
% K7 i: Z/ R+ _) `( Y1 RDefaults.common$.logger = appLogger;
3 K6 y  [9 {) k( e5 a% _0 a3 FMemory.defaultHeapSize = 0x8192;    " _, I3 V6 Y1 e0 N# O/ X
Idle.idleFxns[0] = "&LEDStatus";
) C6 `' C1 f- y1 n! D, ?Cache.initSize.l2Size = Cache.L2Size_32K;
9 m# Q$ z8 U7 P" F3 [1 a# T) S, X; o8 B# w0 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 */
/ l* {5 S4 E5 L8 B3 b4 T2 B8 Mvar HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');6 |9 _. z# a) e# O2 [) Y3 q* s
var heapMemParams = new HeapMem.Params();6 J" Y3 S6 ~/ O, Y* J9 Y
heapMemParams.size = 0x4000;
, _- o- [9 z! Z. y2 K) V
; M4 y( F" a0 r- [- P' Y+ rvar Memory = xdc.useModule('xdc.runtime.Memory');; D7 P; X7 O1 I, U) g+ a4 }
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);0 F2 \7 P/ r9 A5 T+ I6 S/ [

4 n' j& g  e  T, e我大约calloc  每次共计大小为5K*16bits,* a7 k0 ?% x. I, l+ |
而默认配置才0x4000、需要改大。& ], K  V* F3 M

6 U3 n/ s* H- k  F. l" P% }
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
5#
 楼主| 发表于 2015-10-28 16:14:47 | 只看该作者
/* no rts heap */6 Q0 I) K" M+ R' r, A! ]  ~" B/ ~
Program.heap = 0;: {7 W% g3 y, A8 }3 h, R3 m
Program.argSize = 100;  /* minimum size */
& t/ j/ e4 a+ 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-22 17:05 , Processed in 0.042503 second(s), 23 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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