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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

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

. s2 g$ N1 F! e$ N# g2 T2 b% e    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //256! S+ N5 @; Y' g: s0 G% h$ g
. j3 T! F- I' ~: F  s8 D
其他程序段。。。。。
, x+ `3 _0 p+ k+ A$ v" I
: }9 V+ N7 [3 s  e& L   free(x_d);
) I2 p8 k. v) d' ^; |4 H+ l" n" C3 x3 d- H2 c
使用DSP侧单独调试功能,验证动态申请没有问题,0 |# Y% \3 \) o* ~3 h7 Y! o4 z; k( ?$ V

, Q; ]# K! w9 A  G' I$ a. u1 I但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。3 J8 _7 V9 L0 r$ m

: I# a4 ?2 o# W4 N
2 m& Q& y& T' X" @* ~
: r* Q$ {! b# U  h: l
( H( E, `* N0 ^% p
* P! l1 C7 u$ K- |
$ E! g& R. o4 p) K; t9 N
& u( W" \+ b5 }: F& W8 ^
7 B2 g! |! \8 D2 \6 M4 A# O: S) F3 c% d; F+ w! T
7 ]+ R6 h8 W( x
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2015-9-4 10:29:21 | 只看该作者
补充说明$ l  ~# V3 ]/ w2 Z6 _4 P
我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下
8 M9 S9 Z0 z" x4 y  W(不过疑惑的是,为何单独DSP仿真就没有问题呢?)! Z$ s" t0 q" i6 f
  o6 b/ m' t4 n" ?4 \: ?
是不是需要在DSP.CFG中进行配置
  d; a+ k$ l3 ^9 W: ~  Z  k0 I+ X: X我现在的配置为: n$ p" `  b2 V9 u
( D; m; a- `' T) J) z
/*8 R* K' z5 Q4 x7 E8 H2 `/ L* p
*  ======== Operating System Configuration ========
) g0 R- e9 U7 L6 V */% A: n6 T; o: o7 s- a5 E  \3 u

0 S7 P( H) g# ^% M" r8 u' `" X+ \/* no rts heap */
/ N2 f" q; E/ IProgram.heap = 0;
) E8 f! |" H( pProgram.argSize = 100;  /* minimum size */
# v7 D+ y0 c5 \% S: c  @7 aProgram.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大
# ~: X6 f+ s! y! b
0 ?$ v4 F/ n1 \  l" @/* create a default heap */* L' v; G4 E! h4 v( I
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
2 J! L; q* m- |7 }, B& fvar heapMemParams = new HeapMem.Params();
; n/ o/ y8 x- w& D) cheapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大! A7 ]. S: Y, L/ E3 S5 G$ Y2 a' ?
4 p  @* Y. T6 V8 w9 @  s6 t6 [8 e
var Memory = xdc.useModule('xdc.runtime.Memory');6 U2 W5 ]; n" U2 f9 }
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);
1 S7 u7 h4 @+ M- I! `6 C1 Y1 H3 U( h8 @, @0 D2 b. a; E
/* configure System module */# @" U( M6 Z9 f' ~9 Y% ?
var SysMin = xdc.useModule('xdc.runtime.SysMin');
$ _: Z! ~4 j/ A2 vSysMin.bufSize = 0x1000;/ A& a) X* U9 a* _  |5 C
SysMin.flushAtExit = false;, u2 y, V2 q& [
$ ^$ b3 N1 [7 I% I" P7 I
var System = xdc.useModule('xdc.runtime.System');) d8 O- C6 ~! O$ V. I
System.SupportProxy = SysMin;) w# _  [8 ~3 X

& @$ m5 f8 k: [, K/* configure SysBios to use the lower half of Timer 1 */* I% r% Z+ L/ R/ p3 E
var Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');
2 p7 `% z7 V. p$ G; dvar Clock = xdc.useModule('ti.sysbios.knl.Clock');; q6 Q5 b% ?9 H: R3 B) @
Timer.timerSettings[1].master = true;3 E  ~' R! b! x  T
Timer.defaultHalf = Timer.Half_LOWER;8 H( E8 [6 I1 F7 l* N. H
Clock.timerId = 1;4 ?3 g0 Q9 O5 E7 H8 E. G, {. R! Q. \

& t2 c* ^1 Y$ F/ @8 u3 M7 H  p8 |/ u& |, u. _5 Z
/*& L7 ?$ S6 A  q+ X2 W4 P
*  ======== Miscellaneous Configuration ========1 P6 r; p# C! T, s6 e- _
*/
8 w9 ?7 V! o8 }: m' Y
3 H4 U4 O! B- o6 U( ^/* set default diags mask */* X# C. P: I1 V, O+ y
var Diags = xdc.useModule('xdc.runtime.Diags');9 _; i5 ]! D1 ?% q% h  Q5 M& g& f
var Defaults = xdc.useModule('xdc.runtime.Defaults');' R. h' e/ r, e( Y+ }

# ^! ?) U  B+ S5 k% U7 T8 M# FDefaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;9 d2 e# Z  E2 B' s$ h! t
Defaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;
! l/ b( Z- i' a. R3 q4 t- {5 [Defaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;
* F" j7 X% o9 v" i8 J. ZDefaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */
0 U4 O; K9 O% ~Defaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */" h3 Q. G. p7 z3 P. y$ {
Defaults.common$.diags_STATUS    = Diags.RUNTIME_ON;; P% |( t( s  @; m% s
Defaults.common$.diags_USER1     = Diags.ALWAYS_OFF;' O# p& z2 i" Q7 u* S6 U& ?
Defaults.common$.diags_USER2     = Diags.ALWAYS_OFF;" i! X) s& C: b, r
Defaults.common$.diags_USER3     = Diags.ALWAYS_OFF;
% o' ^/ s- Z0 e/ o$ E3 cDefaults.common$.diags_USER4     = Diags.ALWAYS_OFF;
3 P9 M) Y. Q$ s/ ?Defaults.common$.diags_USER5     = Diags.ALWAYS_OFF;+ h4 M: G3 Y& p" e1 w
Defaults.common$.diags_USER6     = Diags.ALWAYS_OFF;
% x0 Z0 I2 P; r) h( P" j" }7 FDefaults.common$.diags_INFO      = Diags.ALWAYS_OFF;
& X! u! E$ q' D5 n9 {; fDefaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;7 I  ?" w; x+ J6 B. H. i$ {3 t
* Z- i  K/ B* p. B( s
/* override diags mask for selected modules */# i) I: P0 Y1 c# C
xdc.useModule('xdc.runtime.Main');) X- q/ p+ d  m( E9 _# I
Diags.setMaskMeta(& {/ j4 }3 L$ y
    "xdc.runtime.Main",
) Q* |$ u/ s, B( g6 V5 L- W+ U- c    Diags.ENTRY | Diags.EXIT | Diags.INFO,1 ?% G8 v$ \& O7 J- l8 j8 L4 E7 I! r, t
    Diags.RUNTIME_ON9 y' v% n3 O. N. r$ ~4 u! ?. ?& \
);
4 @5 C3 v* C9 Q7 W! A9 [' Z' g8 v. H8 n  ?& R, c7 U
var Registry = xdc.useModule('xdc.runtime.Registry');
+ V0 y, E9 R# g0 d2 A" u, |Registry.common$.diags_ENTRY = Diags.RUNTIME_OFF;
3 E3 w/ d& ~; xRegistry.common$.diags_EXIT  = Diags.RUNTIME_OFF;
+ T) P& A$ C( Y( V1 }1 vRegistry.common$.diags_INFO  = Diags.RUNTIME_OFF;
: M( e2 ^+ ]. ?8 b# y; w- LRegistry.common$.diags_USER1 = Diags.RUNTIME_OFF;
' e% u7 i8 ]- d, \0 z! H# k  L: ?9 `5 z! g5 ]" Q: }5 \0 i. c
/* create a logger instance */9 t! [: r6 D  K6 X1 b
var LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');$ W. b: r7 j; h9 t% F, G
var loggerBufP = new LoggerBuf.Params();; Z2 ^7 t, F# [  E$ I
loggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */
- r, R  @- O/ Y/ g9 TloggerBufP.bufType = LoggerBuf.BufType_FIXED;
( h3 o, b4 b( G$ c0 }, |9 Y9 w! i
var appLogger = LoggerBuf.create(loggerBufP);
& ]  b7 E- d  W! x( B* uappLogger.instance.name = "AppLog_Core1";
7 y  q: l2 F6 d1 L1 P0 HDefaults.common$.logger = appLogger;
/ V& ^5 x+ N# m. v% O" @+ @Memory.defaultHeapSize = 0x8192;   
- O$ Y- ]% h! _Idle.idleFxns[0] = "&LEDStatus";4 v7 l1 R$ n, ^7 K& e, c- \6 O" i
Cache.initSize.l2Size = Cache.L2Size_32K;
. T3 ]3 [& Q& ^% U
: F0 |2 w4 d1 ]6 i, u( B$ 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 */! h% `2 c/ B& ~; S' u
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
. t4 t/ N1 K  ^& R1 L& v  {: Bvar heapMemParams = new HeapMem.Params();# P$ ?( H+ j# d1 F" B& P
heapMemParams.size = 0x4000;. ^, o0 R% ~! W& N: B1 g" o

$ n/ P) B5 D$ r0 ~( Y8 mvar Memory = xdc.useModule('xdc.runtime.Memory');, A' ?, a+ a7 {0 H! G/ ?) L: \# ]
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);+ U% W6 T) K" w+ m3 L/ @

* q! p" a( R& M% u我大约calloc  每次共计大小为5K*16bits,
& ]  I& i$ l  e' _* Y而默认配置才0x4000、需要改大。
, y. z/ }! G3 b( j3 f9 h  n7 c* V6 B0 V( j
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
5#
 楼主| 发表于 2015-10-28 16:14:47 | 只看该作者
/* no rts heap */
* |% o% J5 t6 M2 a7 e  `5 yProgram.heap = 0;! D: b) B( Q/ Q6 w* W
Program.argSize = 100;  /* minimum size */1 ~- \" p% n6 l4 `, \
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-20 18:26 , Processed in 0.042272 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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