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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2015-9-4 08:33:31 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
创龙工程师你好,我在OMAPL138单独调试DSP程序(使用SYSBIOS)时,在任务中使用calloc函数动态申请内存,用完后free,类似如下结构: s. J; p. ^" q, Q# [* q( I" v
2 D6 X4 `- t  J- H3 r
    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //256
, A/ y, e. f6 k6 x/ G
$ c- J8 G# [, h. V0 X其他程序段。。。。。
) |# A7 B9 f* ?0 _. ~7 x
4 w: }; E( o/ N   free(x_d);
  L/ l# Z4 L4 s- }+ Z8 C4 p& K6 l% F2 E
使用DSP侧单独调试功能,验证动态申请没有问题,
, B/ [2 i8 Z8 [' D8 c& H! q$ e1 n
但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。1 C6 t# A7 X- s9 i4 @

6 `3 u7 n3 k4 P# A  I* T) r/ S1 K4 U
( o  R, B" D) i6 b! d
1 x! v2 u' K& B# I# s

. x& Y8 o, \- ^3 z1 E
, ?$ ~5 u( U0 D  u8 q* ~! `# X1 a. t" M% f- C
( X# T; Z9 G( t* K" y( R! V+ Z+ G$ y  J

; \$ p; ^1 W' A4 |: B! u
* ]- }3 ~6 ^. o4 W  \
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2015-9-4 10:29:21 | 只看该作者
补充说明; {6 |. y! `5 s0 x2 r$ {6 b
我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下
( w$ A0 ]) n* z8 ^; s(不过疑惑的是,为何单独DSP仿真就没有问题呢?)6 _) n; Q- U5 T& u

# b  k: E( r" P4 _是不是需要在DSP.CFG中进行配置8 L; D; a" \' X
我现在的配置为
! O+ R; ]8 I- o( P) i2 L  E# N- X
/*
6 y6 X/ i  q- _ *  ======== Operating System Configuration ========
4 ~* u# I1 X. `) }/ N: q* L */
8 i' ^  {9 F; ?6 z' M9 z) E* j9 }& y- c9 \) t
/* no rts heap */! q2 J( ?0 Z7 l# F& z& B5 C
Program.heap = 0;
% N0 V6 {6 @; s( Y0 oProgram.argSize = 100;  /* minimum size */. f' Y4 |' s/ P
Program.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大
3 ?# v0 w$ V9 B, |5 n
' i* k0 M0 @$ b" l/* create a default heap */
. x4 w& W9 J3 I) q! k# evar HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
  a9 F. C: q& e: Tvar heapMemParams = new HeapMem.Params();8 q% B/ B3 z; u" d: R
heapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大& r* ~* f% h. E5 `. k& I0 j

7 i4 I# s- ^4 n- T2 w
var Memory = xdc.useModule('xdc.runtime.Memory');
! W( U/ c0 Y6 TMemory.defaultHeapInstance = HeapMem.create(heapMemParams);
$ A2 }* l- `7 M
& V/ f+ ]4 K; f  {. z2 R/* configure System module */, e& c% b& [+ Q! @
var SysMin = xdc.useModule('xdc.runtime.SysMin');0 ^7 I7 M0 |  d* N+ v% I. N
SysMin.bufSize = 0x1000;
- g0 K. b8 y. O! h) x1 n/ V+ N3 Y8 ASysMin.flushAtExit = false;
) |- L8 n1 r- c3 ^- O) z
# A" s# l/ t7 Y/ {var System = xdc.useModule('xdc.runtime.System');
) |& o+ O. r4 D# O/ ?5 hSystem.SupportProxy = SysMin;
8 f5 g) l* S7 K- G% l3 x* L
5 y! W  Y0 q5 O) u9 ?/* configure SysBios to use the lower half of Timer 1 */
# H9 R: h( D* k1 _$ u4 rvar Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');
1 p0 j5 K" n; O, j) R4 Y# C$ Xvar Clock = xdc.useModule('ti.sysbios.knl.Clock');
& ~( d+ n. M4 a7 O0 v/ v; a5 b7 S/ bTimer.timerSettings[1].master = true;9 |5 n* r3 r6 I5 E+ K
Timer.defaultHalf = Timer.Half_LOWER;
$ I: f9 {/ f6 d  hClock.timerId = 1;; c! Y, D" S) y" R

/ o, y! L& g0 @% q9 P; M7 P1 n' w+ Z
/*1 Z4 u) P* u5 J
*  ======== Miscellaneous Configuration ========2 W0 [9 ?# x: A% ~: U/ l
*/
8 Q7 D- E$ J: j) u: e$ J: w' P7 G" v7 _
/* set default diags mask *// \0 V. ]. A; E/ |/ @( k" c( e6 l
var Diags = xdc.useModule('xdc.runtime.Diags');% g  ^/ A; n& i" d6 F6 C( q' I
var Defaults = xdc.useModule('xdc.runtime.Defaults');) r7 x' y; Y: h1 a$ d' _9 ~
1 K9 E. R+ j1 i7 f
Defaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;5 M- H; W5 s' A; n& @
Defaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;3 W. H- x  _0 l8 Q8 V1 m
Defaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;
# ~1 Q$ W* |+ J- o; gDefaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */* z, H/ l3 ^  L& g. e
Defaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */
5 x" p3 x* u) A: l$ _* {Defaults.common$.diags_STATUS    = Diags.RUNTIME_ON;% T$ o/ B1 u) k
Defaults.common$.diags_USER1     = Diags.ALWAYS_OFF;
6 u3 q4 Z$ j" |2 l7 f* R( y1 iDefaults.common$.diags_USER2     = Diags.ALWAYS_OFF;
, U2 U' U; i. Q  x" ^. KDefaults.common$.diags_USER3     = Diags.ALWAYS_OFF;' Y% o! Z) R2 h5 G+ O/ R, f- O- w
Defaults.common$.diags_USER4     = Diags.ALWAYS_OFF;
, B0 h5 Q6 T. T7 F  o% f( [Defaults.common$.diags_USER5     = Diags.ALWAYS_OFF;
! S4 W" }% {* d# |0 j! _7 E8 jDefaults.common$.diags_USER6     = Diags.ALWAYS_OFF;
1 S% {5 F8 M) q9 xDefaults.common$.diags_INFO      = Diags.ALWAYS_OFF;
2 {  a/ B  ^9 d% }2 I/ Z1 dDefaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;
! S( G( A* {  G& X, r& g6 i) p% C: E* o# i% _
/* override diags mask for selected modules */) l5 J# M( A  n# f; L
xdc.useModule('xdc.runtime.Main');
! d9 g- y3 R) P5 @. ZDiags.setMaskMeta(
- M, f$ i! Z$ A0 Y0 {0 w1 |    "xdc.runtime.Main",
4 p; a- t. u: m# b3 Y9 T- h1 q    Diags.ENTRY | Diags.EXIT | Diags.INFO,
( a6 I( ]$ J* P5 E9 D    Diags.RUNTIME_ON, |5 w. W$ Y) l* z3 G
);
6 i* [7 L. S# P5 m# t. S9 f$ [9 p
" A% Q) |6 P7 v& [var Registry = xdc.useModule('xdc.runtime.Registry');, U& X- K  Z8 D% B' I/ x* n* n# \
Registry.common$.diags_ENTRY = Diags.RUNTIME_OFF;9 x/ M. F" i. j( c
Registry.common$.diags_EXIT  = Diags.RUNTIME_OFF;
( J# Y6 V$ \. uRegistry.common$.diags_INFO  = Diags.RUNTIME_OFF;+ _" p+ @5 j. F, [' S
Registry.common$.diags_USER1 = Diags.RUNTIME_OFF;. B3 H+ M& `* t# _

: `: s  T" E6 A0 p  N/* create a logger instance */( d, e, @( ~' E* u
var LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');) i. W7 ?0 ?+ S4 Q
var loggerBufP = new LoggerBuf.Params();6 F# P0 d$ A; G/ T
loggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */- W5 g/ b7 f% s0 G; K0 A) p/ y9 Z
loggerBufP.bufType = LoggerBuf.BufType_FIXED;% _  T! S+ J1 O9 H, f. }' s9 B8 g
5 w; O$ S& H- n8 W
var appLogger = LoggerBuf.create(loggerBufP);/ Z! g9 X4 K. ^8 S0 J5 h6 A
appLogger.instance.name = "AppLog_Core1";6 Z1 D+ z; H- `4 D4 [( z; D
Defaults.common$.logger = appLogger;, ]0 b' C" a4 z2 {, b
Memory.defaultHeapSize = 0x8192;    . u7 ~  [/ v1 c8 ^( U' f
Idle.idleFxns[0] = "&LEDStatus";! I& Q! M+ ~  ~! r; V- [5 C- f- Q+ p
Cache.initSize.l2Size = Cache.L2Size_32K;7 G5 J. m! O; M: \
7 B! J" r( A" k3 O( N2 N
回复 支持 反对

使用道具 举报

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 */
$ c- }3 z% h6 N/ {var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
7 ?' `2 j2 \. Hvar heapMemParams = new HeapMem.Params();
  Q0 n$ f4 e' [/ @7 w3 ]; DheapMemParams.size = 0x4000;
9 Z! @8 e. X" ^6 z
% b1 i: z; T$ H4 W0 }" uvar Memory = xdc.useModule('xdc.runtime.Memory');
0 n& T* M6 K, \0 \Memory.defaultHeapInstance = HeapMem.create(heapMemParams);
7 S$ P, l' k6 o3 m6 G3 j  p3 @  K/ d" G5 q: ^. Z
我大约calloc  每次共计大小为5K*16bits,
- X- W, g, h  N* O而默认配置才0x4000、需要改大。
* y/ P( l8 ^' p. V  \& a! r
6 o5 g0 j* {2 r3 W
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
5#
 楼主| 发表于 2015-10-28 16:14:47 | 只看该作者
/* no rts heap */
5 j4 G2 r3 e, O0 S) @' S! `Program.heap = 0;4 y# z: f" t# S2 z7 L" \) P
Program.argSize = 100;  /* minimum size *// H1 T, h. g7 O2 a
Program.stack = 0xF000;                   //我改到F000  也不行
回复 支持 反对

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

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

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2026-3-12 23:31 , Processed in 0.040466 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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