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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

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

" R/ h. s9 L4 ]8 P    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //256
- u2 ]8 y4 N, u! Z! y9 R% J- o
) \# h7 V, [. F0 Z其他程序段。。。。。
2 U0 V. y" V; X& Q! a
9 c7 D  }- U/ M7 R9 K- I- _) t   free(x_d);6 k. Z8 t% b- a

2 J; a$ f/ S3 q* e& T3 I) h$ e使用DSP侧单独调试功能,验证动态申请没有问题,' }( t8 A' c8 C9 y$ s

/ K3 G/ q  K; D5 H但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。4 q# W; f$ _8 q3 C+ y% D& e- V

& G5 r8 `7 }. z& i6 [, S( D
+ D2 ]6 m  ^; j" B# H
' X+ O5 J- ~. @; I
5 b: F/ W8 N; v+ H) J7 x
2 d4 g! g( L0 ^/ N' X3 ?3 V5 [
: W0 @0 B: E2 F, x5 \
  q  D3 J7 X1 ^7 u
; [" p* |. d3 E8 {" z* v# |4 y$ L6 d1 {( I

0 I6 M* U0 y; r2 d! @
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2015-9-4 10:29:21 | 只看该作者
补充说明
& _7 v& W1 h5 X1 I我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下4 [( ~% W: ]8 x6 ^* t$ ~1 M& R5 N
(不过疑惑的是,为何单独DSP仿真就没有问题呢?)
+ ?! _- c9 g- h6 f3 K) c! Q
6 L; D9 ~% g' ]7 k$ ?
是不是需要在DSP.CFG中进行配置
. ?! }8 n5 i5 j' R* {) ^我现在的配置为5 u2 w8 \) U! h& x  u

7 X7 g( y6 N5 e, k. s/*
/ g) H. j) t* L' N1 G- O *  ======== Operating System Configuration ========3 O2 ^) _, w# s+ F. a: {8 z1 {3 H  y0 ~
*/; B( I$ m1 o! d1 ]) \9 ]

+ X+ M2 \1 M# `% p% N/ A/* no rts heap */4 b, l8 n, H6 i% g% `: S6 B) i
Program.heap = 0;1 y2 z6 e* G4 i9 s( h( u
Program.argSize = 100;  /* minimum size */8 z" h9 E2 @# Z2 d
Program.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大
, `$ `8 B2 L& a; S
1 ?2 r& t2 B! j" \3 j' O/* create a default heap */
& G9 r/ o, @7 d" Ivar HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
$ F( o7 J( G% Q2 Y( Wvar heapMemParams = new HeapMem.Params();
/ C$ O$ n4 f  n+ o8 W, NheapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大
# p0 E' }6 z2 i2 \) l
3 e/ C0 E0 `0 n2 t5 G- A
var Memory = xdc.useModule('xdc.runtime.Memory');
4 `& c7 i) x1 {6 f0 i% d4 Y: ~Memory.defaultHeapInstance = HeapMem.create(heapMemParams);
/ V, Z# t- W* G  Q/ h* Y- Z( z6 T
/* configure System module */( `: n$ ~; |# g0 l8 U2 j5 @: g4 _
var SysMin = xdc.useModule('xdc.runtime.SysMin');
: i- x5 Z8 o( d8 @' i7 FSysMin.bufSize = 0x1000;7 d8 d" j0 L$ F$ \- G  |2 P
SysMin.flushAtExit = false;2 V! E: @& S# s& n- S0 f
. [- `3 p! y, \$ p6 I9 _/ g$ o
var System = xdc.useModule('xdc.runtime.System');- k8 x% L8 a3 x% s& t" ~
System.SupportProxy = SysMin;
# k; U& L1 J7 \  v$ J
, B' P0 {9 Y0 ~2 _+ w  w/* configure SysBios to use the lower half of Timer 1 */
6 {4 O8 ^$ D0 _% ~$ kvar Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');4 G) t- B2 v" W+ q
var Clock = xdc.useModule('ti.sysbios.knl.Clock');* v- ~7 i2 O# Z7 F3 J
Timer.timerSettings[1].master = true;. q5 w, g" ~4 Q6 {8 M# x
Timer.defaultHalf = Timer.Half_LOWER;& Z9 H7 f, l8 y4 F( Y
Clock.timerId = 1;9 S* z- `: M1 b- D1 @+ A- K
3 H7 h9 ]9 M, y! v4 r1 Y- }# v# }

( @' O/ }5 M- f* E7 q  C% p/*
' F5 G# d, z% E$ |/ a- |* O *  ======== Miscellaneous Configuration ========
5 y% i8 p" ^, `& H6 t& V */
! |5 ^( p% f+ \3 q' b4 {( @) |" L9 M
/* set default diags mask */# U" K6 V1 ^0 j8 g2 }
var Diags = xdc.useModule('xdc.runtime.Diags');# F# m: a( K/ E+ A  B) `
var Defaults = xdc.useModule('xdc.runtime.Defaults');
$ w4 ]/ J6 A$ e1 @# |  }
4 m6 Z) t& ^8 v9 o8 e0 b9 }8 ]Defaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;
$ l4 O, [/ x9 S: N5 n# g6 ~+ QDefaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;
1 y3 S& `  i1 G  d! p4 ^Defaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;
8 z; I2 T4 c- ~. X. R# [% C$ UDefaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */# w* l; I2 K/ K, [/ V
Defaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */
6 z6 t7 U5 i1 v0 H/ M( m3 bDefaults.common$.diags_STATUS    = Diags.RUNTIME_ON;3 ~. n- V, _- O% G. M) I( u
Defaults.common$.diags_USER1     = Diags.ALWAYS_OFF;
  O& y5 {& x( P/ |6 TDefaults.common$.diags_USER2     = Diags.ALWAYS_OFF;
- V. m+ U8 G% [* O, r$ L6 D+ wDefaults.common$.diags_USER3     = Diags.ALWAYS_OFF;
0 z; D3 n) Q+ e# SDefaults.common$.diags_USER4     = Diags.ALWAYS_OFF;9 d: D" m' q" d
Defaults.common$.diags_USER5     = Diags.ALWAYS_OFF;5 m' _; I2 i; Y: K( V
Defaults.common$.diags_USER6     = Diags.ALWAYS_OFF;
# ~0 l- X( O* \4 }; B: M) YDefaults.common$.diags_INFO      = Diags.ALWAYS_OFF;
' y8 l5 }8 ?) M) ^2 s! tDefaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;
! G0 C, Q" F& v& B) `9 `$ o) P* G
( d% r$ o5 B* y2 W: \& D  z/* override diags mask for selected modules */
) ~6 q, @" u- f' ^xdc.useModule('xdc.runtime.Main');
9 p: n) B5 |5 ^* |0 J6 y0 M7 ~9 _Diags.setMaskMeta(8 A* u7 A. u1 C
    "xdc.runtime.Main",
2 H4 b4 N; r" K$ j5 U1 m    Diags.ENTRY | Diags.EXIT | Diags.INFO,# l7 k( b! Q" I# I
    Diags.RUNTIME_ON$ p+ g: B, b  o9 G. z, a! l/ {/ H
);" v- c. D8 Q" r* |
" I6 x2 {' F& r( H4 b9 a' ?
var Registry = xdc.useModule('xdc.runtime.Registry');
" }) C8 `, w/ J* k0 qRegistry.common$.diags_ENTRY = Diags.RUNTIME_OFF;
5 V2 D* a9 f2 i- FRegistry.common$.diags_EXIT  = Diags.RUNTIME_OFF;% t, {" Q, u4 `( G2 t; x3 f
Registry.common$.diags_INFO  = Diags.RUNTIME_OFF;/ g2 Z9 S* s/ H  I
Registry.common$.diags_USER1 = Diags.RUNTIME_OFF;
( E: n- H. u/ }# X: B/ p2 d
8 T2 ^  M, O) j4 x, E/* create a logger instance */
' v% |2 u' y! n0 bvar LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');
3 x% R3 U4 A7 K4 n/ X' s& Uvar loggerBufP = new LoggerBuf.Params();
4 \% b% a! w9 a; i9 ZloggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */! d) V3 X; m* g% A) [7 c6 I! d: a
loggerBufP.bufType = LoggerBuf.BufType_FIXED;* i6 M: A6 p5 |+ P6 U# ~) y

7 |6 A: K& ^0 W( n! zvar appLogger = LoggerBuf.create(loggerBufP);
: I! N" k% j8 t* _appLogger.instance.name = "AppLog_Core1";
+ Y2 ?* o6 Q4 s* j  aDefaults.common$.logger = appLogger;' Z  p2 R8 b' Q4 }' h+ o, P
Memory.defaultHeapSize = 0x8192;    ( E9 x4 N. C" Y5 `4 T5 y
Idle.idleFxns[0] = "&LEDStatus";6 m2 K, t! S6 O0 e6 Z; S
Cache.initSize.l2Size = Cache.L2Size_32K;
6 l" W- B) `4 Z3 `4 q7 ~3 }* ^, J2 |
回复 支持 反对

使用道具 举报

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 */
: e" ^9 ]; b( J% U7 b1 K) u- ovar HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');! R' K/ c. u8 f& t1 f, Z
var heapMemParams = new HeapMem.Params();
2 L- v4 K9 p: d. ~" |) NheapMemParams.size = 0x4000;* z+ E1 s( Q! G" \6 y

% N1 a( e" u' N* Zvar Memory = xdc.useModule('xdc.runtime.Memory');
# ?* Y* ~* ^3 n$ X" lMemory.defaultHeapInstance = HeapMem.create(heapMemParams);- H+ r( F3 D3 D( `! N' z

+ k1 a2 Y; d* p- D( L我大约calloc  每次共计大小为5K*16bits,
6 ]9 y4 l% F, p. ?, U而默认配置才0x4000、需要改大。8 c2 ^& E1 ]! P9 l/ g2 o

9 y+ Q7 F6 i4 X/ O8 I' Z
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
5#
 楼主| 发表于 2015-10-28 16:14:47 | 只看该作者
/* no rts heap */
2 G8 X3 i% f) ~4 D* e4 S: _# \Program.heap = 0;
4 c% t: J+ C8 L. y' ZProgram.argSize = 100;  /* minimum size */
' j) G' s- ~& k: H. V. x( oProgram.stack = 0xF000;                   //我改到F000  也不行
回复 支持 反对

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-12-2 10:41 , Processed in 0.040445 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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