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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2015-9-4 08:33:31 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
创龙工程师你好,我在OMAPL138单独调试DSP程序(使用SYSBIOS)时,在任务中使用calloc函数动态申请内存,用完后free,类似如下结构
% U7 K) O, c2 d
4 D. K' h8 m  t% g1 N  j    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //256
  P2 J  O$ o2 ?
- R: ?3 V* Z# F* o其他程序段。。。。。
1 `/ C6 t: Q2 V* L  U: r3 ?' f
- w. r5 E( E0 R" w' ]5 t   free(x_d);. X( U8 s, M) o$ |8 g
% ~' m- _* U7 p8 R8 `; U
使用DSP侧单独调试功能,验证动态申请没有问题,
% w1 a* X( E: `1 Z* u
; O; Q- x, O- _% ]' v但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。
8 s/ J# h4 M  ~% V' d- C1 ~
* ?% E5 a' i1 Z
' a4 w& g) h3 f6 J8 L* O
4 h* i4 i! J8 \  F+ u* x

8 E# q0 h" p" z  f) r7 u9 w9 f0 m, w9 M4 e
! G& f- u; {- \& x6 D1 o* Y

- x6 E, L: L3 e2 S: B) E3 Y+ L
1 O+ \/ |. u+ P( Y5 G' v, A! s- v- h9 {+ E

. A2 X/ M, M  T& L3 q4 B; \+ Y. g
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2015-9-4 10:29:21 | 只看该作者
补充说明5 @% I) b6 Z5 u+ i4 @; O
我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下* o$ {6 M6 l) a+ K  f& F5 H
(不过疑惑的是,为何单独DSP仿真就没有问题呢?)7 `, V( b7 D  K" i$ o4 L; C$ V
) }3 `' `4 ?) h7 W0 E4 Y
是不是需要在DSP.CFG中进行配置+ s/ z) ^8 f3 Y7 a: R
我现在的配置为* B) p' R% m: R% `" X' p

6 U6 a& X2 a0 z. T/ i1 V7 g/*6 X+ r$ B4 }- }  q# X
*  ======== Operating System Configuration ========
; q& q1 [& P: D7 J4 @6 \; i, k */& d& Z  G' }- Y" `/ a7 |# @+ F

- C- v' Y  H9 x, r0 D1 E: A) i/* no rts heap */( ?8 W" l1 Y5 ]6 d
Program.heap = 0;
3 @8 G. o9 R; }Program.argSize = 100;  /* minimum size */
% L8 T& W1 ?# q# h$ n) wProgram.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大
! F" v! ?# e) X! \8 n7 d" U0 n# ?, w  U3 I1 M$ w/ V
/* create a default heap */
5 _- _5 D+ a! x8 r3 R0 v7 @1 V4 avar HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');/ r5 J- \5 T, }; z: x6 j
var heapMemParams = new HeapMem.Params();
9 d) Y, C" F% g' C. F% O$ c7 g- K3 M' [heapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大' U6 }5 O: o# B9 N5 x/ P

0 D7 R0 S8 c, W* x" h6 A
var Memory = xdc.useModule('xdc.runtime.Memory');0 \0 ?( g% I0 W9 B  Z+ t
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);
8 I5 J, G0 L. n4 w; m- L" y" a
7 D+ u' o- O8 k) l/* configure System module */
# G; m3 l' K% H, Hvar SysMin = xdc.useModule('xdc.runtime.SysMin');
0 W  m$ L9 m( n4 _7 C* KSysMin.bufSize = 0x1000;# ^( K8 i" M/ z, G/ ?; t) S
SysMin.flushAtExit = false;; O' M6 Y1 ^7 h0 \3 [
9 \8 V; M% ]2 ]2 D% \
var System = xdc.useModule('xdc.runtime.System');, ^! X% ^/ }7 ^0 {% |4 \4 ^
System.SupportProxy = SysMin;: P* I% {" n3 C5 }' G$ I) Z
1 j! `8 a2 ]8 b8 ~* i- B$ f
/* configure SysBios to use the lower half of Timer 1 */
) t5 l- Q5 c' ovar Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');
9 u- n9 d( O1 T+ C5 {var Clock = xdc.useModule('ti.sysbios.knl.Clock');: I' n3 {( ~- p8 }$ g
Timer.timerSettings[1].master = true;
0 F! U' l* I9 A) YTimer.defaultHalf = Timer.Half_LOWER;  C3 S, e# H8 W& O
Clock.timerId = 1;1 d' W/ i4 `. l' z
/ K6 D6 p& n+ A4 I
" D; \3 i6 A( y
/*
8 d3 U2 j9 h$ S  f *  ======== Miscellaneous Configuration ========2 J, M0 g7 T' h( t" k4 g& H  ^
*/
" i. l) ]5 b. L  ~. a: g0 Z3 q$ ?* }( D7 s
/* set default diags mask */% u4 r1 ]7 T: Z3 f( Q/ F# P
var Diags = xdc.useModule('xdc.runtime.Diags');
/ U! V; x$ \4 {+ F3 W  `var Defaults = xdc.useModule('xdc.runtime.Defaults');' h" B$ Y7 L8 K. y6 u8 y9 n

/ z- F) n  _  U4 F* dDefaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;0 O' z0 F4 O( p  u3 x( U6 w
Defaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;
( c' a5 U, r+ K  c* h  {Defaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;6 E, p, h6 u# B. [+ {
Defaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */
$ G) N! G+ A* Q. r# ]Defaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */$ K! y1 P, K4 Y9 m
Defaults.common$.diags_STATUS    = Diags.RUNTIME_ON;
* B' U  a: ]1 P: }Defaults.common$.diags_USER1     = Diags.ALWAYS_OFF;
- |! U  A" O) M* ?Defaults.common$.diags_USER2     = Diags.ALWAYS_OFF;
7 H# P2 Y- Q2 g, U3 }$ bDefaults.common$.diags_USER3     = Diags.ALWAYS_OFF;
, I! X, O7 t' eDefaults.common$.diags_USER4     = Diags.ALWAYS_OFF;
# U" L- U' _6 g9 t8 W; J' ZDefaults.common$.diags_USER5     = Diags.ALWAYS_OFF;
- D  F( ?" I9 N$ v1 L7 d) u% {7 vDefaults.common$.diags_USER6     = Diags.ALWAYS_OFF;
5 b1 @0 f6 N1 C9 {: b' U! `' }Defaults.common$.diags_INFO      = Diags.ALWAYS_OFF;
9 o$ q( _( u* E& pDefaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;! o" r2 d5 F7 A+ h  q/ G
) C7 t3 w+ c6 {7 g" }
/* override diags mask for selected modules */
. u3 f, ]1 {( L& O, z7 p- vxdc.useModule('xdc.runtime.Main');0 ~% A# G8 _& b( o3 N8 n  E5 m
Diags.setMaskMeta(
7 q  d" V7 p0 ?% S% i, o    "xdc.runtime.Main",  r9 U8 q. r/ o1 r( H3 }
    Diags.ENTRY | Diags.EXIT | Diags.INFO,( ^# j: u* a. Q: A) n: w) f' G
    Diags.RUNTIME_ON
4 N) ?& ]" f+ b# I0 c' d4 j( s);
6 {6 Q0 x8 s+ y1 T2 X; M# G% g' m9 `, O/ G5 m5 @) W0 @
var Registry = xdc.useModule('xdc.runtime.Registry');& \' M6 d3 c' ]( T6 }. j2 C
Registry.common$.diags_ENTRY = Diags.RUNTIME_OFF;
5 s0 L3 U: Q1 r& Q. @) h. L; @/ qRegistry.common$.diags_EXIT  = Diags.RUNTIME_OFF;/ p9 ^+ D8 @& m/ y
Registry.common$.diags_INFO  = Diags.RUNTIME_OFF;
" H9 A4 U  E& m# Q2 X( F2 r7 t+ E$ PRegistry.common$.diags_USER1 = Diags.RUNTIME_OFF;
/ W# e! J* x7 l% C8 }% ]" a( G6 ]# w+ L: W" h3 t
/* create a logger instance */
! r, {9 v" `8 l( `3 m% T2 P/ Ovar LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');
3 z7 g) I- t6 E: Ovar loggerBufP = new LoggerBuf.Params();
4 o( Y& v& Y$ k* ploggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */) C: s) k$ G4 P+ }- q  ?. I* R
loggerBufP.bufType = LoggerBuf.BufType_FIXED;& o1 a/ r9 [1 ?0 V! O# _/ Q' x
( E  \; i2 M0 C2 S* y: Q& Z3 k
var appLogger = LoggerBuf.create(loggerBufP);" ]" I& f2 L# A8 q
appLogger.instance.name = "AppLog_Core1";/ K! a" O# p: y5 j7 Q
Defaults.common$.logger = appLogger;
4 h8 i* t* M/ I- r# |0 i4 ]5 zMemory.defaultHeapSize = 0x8192;    9 M7 }+ n- [9 l. w7 c0 ~4 v' y. \
Idle.idleFxns[0] = "&LEDStatus";
$ t7 L0 ~2 p: R; k! g$ ~; NCache.initSize.l2Size = Cache.L2Size_32K;8 N  o3 N1 u) n6 i2 a
) B3 }  \' K, J! @  O; f7 M& K
回复 支持 反对

使用道具 举报

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 */
! d8 G0 V$ B# wvar HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
2 Z0 w" S. C# W" u4 B+ yvar heapMemParams = new HeapMem.Params();
* I) T4 [8 ~* k9 C6 {' ~" xheapMemParams.size = 0x4000;& z6 S: I. S) |! ^
! E' i% f$ A1 y& `2 f& y& }6 c  f
var Memory = xdc.useModule('xdc.runtime.Memory');
9 m/ d; w# y, Q. b% \; }Memory.defaultHeapInstance = HeapMem.create(heapMemParams);; y0 x7 D: a; J6 `: f: }

" E$ O0 }& x  u. M& w0 e7 U我大约calloc  每次共计大小为5K*16bits,; z1 A2 x2 ^5 @7 A9 q
而默认配置才0x4000、需要改大。2 o+ N9 q  D: V" ], s* c

$ D$ g1 k) p) }5 {4 q
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
5#
 楼主| 发表于 2015-10-28 16:14:47 | 只看该作者
/* no rts heap */
7 Z" `' @5 t1 T( l+ a* g0 F  {Program.heap = 0;
5 t" ?+ j5 C2 D( ~. L" ?; NProgram.argSize = 100;  /* minimum size */6 i: S$ F+ w# [$ J# U
Program.stack = 0xF000;                   //我改到F000  也不行
回复 支持 反对

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

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

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2026-2-14 17:15 , Processed in 0.042729 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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