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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

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

9 p+ x$ c3 f1 Z  _    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //2561 q3 ?# X3 v2 z  \) J
1 g( A! y, F4 z# U1 Z' \
其他程序段。。。。。
' C' \# l" s& K7 d
; Y! c: d7 b, q  K   free(x_d);; E( }# g& m8 D8 M  L

- f8 j7 }! {0 {2 ?使用DSP侧单独调试功能,验证动态申请没有问题,+ c+ |" m/ S7 u! r( N/ ^7 i7 R

+ [. I" X3 b9 W但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。
+ j  b( b  u) z! k8 C: }/ s  ~

2 s7 N4 A7 V( F3 f0 B7 ^, m; I- X0 Q# P
# l! f& W) V- u8 a" G
; d  b" ~/ F  K" I* w/ R% n
1 S- ]' e+ z6 u

/ r) G: `: i0 D/ o, e( p, v% u- X1 C: g' K4 o$ Y
3 E* r2 d, o3 U& b+ [( B

, [8 I- W& w) [+ ?  I+ k! m! {
' |% e* }. o. }/ w, L9 L
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2015-9-4 10:29:21 | 只看该作者
补充说明
6 W! \6 J9 y' g  x我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下% m0 Q+ J+ f2 _" d) Z* H# h
(不过疑惑的是,为何单独DSP仿真就没有问题呢?)1 K5 k8 _* l1 T  z6 y3 ?: p
* e+ b: n0 i3 P* j# b+ K" @, m) W" g
是不是需要在DSP.CFG中进行配置
2 D" g) X9 L9 l& Z9 ?0 n, G我现在的配置为5 r0 {. z9 J3 \
( O: n  T: \  Y
/*  T0 C. O- ]# h6 x+ j
*  ======== Operating System Configuration ========! ?& `1 w7 B/ `% v
*/8 F" q: `4 I* y* w# C

1 E+ o9 Y2 _0 n9 D7 q) x) p/* no rts heap */
* ?% ?) R8 R: e& k6 ?( Z3 HProgram.heap = 0;, w% {7 I7 q3 M7 x, ?4 W  F
Program.argSize = 100;  /* minimum size */$ w9 M/ [2 r7 C5 ?$ l1 C
Program.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大1 H2 r  a. T# |- I( b$ o
) C0 @+ [. I0 }; D
/* create a default heap */
- e( p0 q; ]4 @1 V' V. S! J- Ivar HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');# n* p+ e) m& Y% z+ Z0 J' {
var heapMemParams = new HeapMem.Params();8 U. Z) K- e& g( a8 b8 }
heapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大
- j/ J. ~; R9 j. K. a) e2 [& ]0 L, D8 X* n. a
var Memory = xdc.useModule('xdc.runtime.Memory');
& B9 S. y# f  b6 fMemory.defaultHeapInstance = HeapMem.create(heapMemParams);$ }: s: G. b7 F5 x2 B# s
6 ~, p$ v* ?' E  s$ M1 w9 A) h
/* configure System module */4 g; D) P2 f. h4 B. E, H7 I3 p
var SysMin = xdc.useModule('xdc.runtime.SysMin');' i8 _9 s6 x4 O1 @
SysMin.bufSize = 0x1000;$ i7 ^  _5 }. M2 J
SysMin.flushAtExit = false;
" R, p1 C, V, c! _8 L7 K* p" S; l* w. E2 @7 x% b; V! ?+ S1 F
var System = xdc.useModule('xdc.runtime.System');/ u" B3 J  P( n. u* p( v
System.SupportProxy = SysMin;
1 e) p3 T( M5 W  I. G& S
$ U7 s+ S) {. a- j/* configure SysBios to use the lower half of Timer 1 */
  |1 T" L- [6 y( m( ~4 d1 O! Uvar Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');
/ J  ]7 G- Y* Avar Clock = xdc.useModule('ti.sysbios.knl.Clock');2 A- y, L( r& z/ O
Timer.timerSettings[1].master = true;
2 N! j5 p' b. B" D# n# J3 P5 i7 bTimer.defaultHalf = Timer.Half_LOWER;3 N* n) Z& O9 Y  t
Clock.timerId = 1;
0 ~6 u8 D3 {* d0 W) r  D
% @* p+ h& |% m% f; v$ Y6 |
; O  {8 G4 T& G* y  m' K! d/*1 X0 m' v' I8 U; A" E, a) |
*  ======== Miscellaneous Configuration ========
5 C4 X6 N; c% ]) a; H% I */' T% h- {% R* W
8 M* [# J; Z: j/ H/ H: b
/* set default diags mask */5 Z1 P, e6 y9 q# Q4 O
var Diags = xdc.useModule('xdc.runtime.Diags');6 l* B7 W) m3 B$ Z/ L) _5 _! _1 V( b0 g
var Defaults = xdc.useModule('xdc.runtime.Defaults');
/ Z# }) g$ z' S
- x7 }  a# Q) e0 R+ C1 V0 y& JDefaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;
% l2 Z) v% X5 L# d: m6 I* H- oDefaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;' u- o& o( c4 }0 n2 l5 D
Defaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;/ W* r5 o6 G0 q  W+ ~" U
Defaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */
5 t( |: t  U9 e: z7 CDefaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */
9 G; w8 w( `4 jDefaults.common$.diags_STATUS    = Diags.RUNTIME_ON;7 e* x1 i+ f, n9 z# {& Q4 q+ O2 Z
Defaults.common$.diags_USER1     = Diags.ALWAYS_OFF;
" _6 v3 t/ J& Q; V, q2 rDefaults.common$.diags_USER2     = Diags.ALWAYS_OFF;5 L1 }3 H7 }. _7 v1 D
Defaults.common$.diags_USER3     = Diags.ALWAYS_OFF;
% X4 w- c: ]9 T/ b: o2 D' vDefaults.common$.diags_USER4     = Diags.ALWAYS_OFF;
4 K8 Q9 h0 U! V. O# I; zDefaults.common$.diags_USER5     = Diags.ALWAYS_OFF;, r2 r) R. s- h- q! `& k" v
Defaults.common$.diags_USER6     = Diags.ALWAYS_OFF;! \$ t; Q7 P, B( S" B3 O7 p6 s* |
Defaults.common$.diags_INFO      = Diags.ALWAYS_OFF;0 s/ C* k# G2 _' ]* R) z
Defaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;
$ i0 D3 a0 C# r7 o
( M! D( s. n; r4 r( s! e+ F& ~/* override diags mask for selected modules */
% y3 P( i: W1 }" H9 x! S9 M: O1 cxdc.useModule('xdc.runtime.Main');  _; A% {7 F, S$ L" E- T
Diags.setMaskMeta(2 E  v  D# E* ~! A: l
    "xdc.runtime.Main",  L& x+ A( b# D
    Diags.ENTRY | Diags.EXIT | Diags.INFO,( u4 T$ F: b0 s
    Diags.RUNTIME_ON' J# Y% h# m( N5 N  e0 D& g" ^
);+ S9 O2 G% I  [; Q/ m

2 C, Q+ Q( X3 s0 }' U# l8 a$ c7 @var Registry = xdc.useModule('xdc.runtime.Registry');
' {2 _! ^4 _- k' A, uRegistry.common$.diags_ENTRY = Diags.RUNTIME_OFF;
1 o9 E, O8 T/ u7 _Registry.common$.diags_EXIT  = Diags.RUNTIME_OFF;" N& v0 [1 f! A  R5 c$ l
Registry.common$.diags_INFO  = Diags.RUNTIME_OFF;
; T- V2 f% p4 j# _7 i) `. ?+ G( ]8 \' aRegistry.common$.diags_USER1 = Diags.RUNTIME_OFF;
. l. E  n% P5 Z: N
8 |+ G4 M) ^# D% D5 K/* create a logger instance */$ T( ^9 d1 _6 }/ \2 z
var LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');
* m8 t7 R. a* T7 S2 ivar loggerBufP = new LoggerBuf.Params();
; ~0 u* d  p+ b5 mloggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */7 ~# x9 b" \  }( R* K, D
loggerBufP.bufType = LoggerBuf.BufType_FIXED;) S$ K" g4 E: _0 s; G7 i7 l6 k" ]- q

( L0 L$ {7 j1 T0 }& qvar appLogger = LoggerBuf.create(loggerBufP);# _/ d3 {9 l) `) _
appLogger.instance.name = "AppLog_Core1";5 [+ v# V- `3 m1 V1 }7 G- b4 Y
Defaults.common$.logger = appLogger;
" k# e9 S2 N+ u7 [1 GMemory.defaultHeapSize = 0x8192;    % E  @) F0 b) m
Idle.idleFxns[0] = "&LEDStatus";" N) [0 c6 s% @' T. B, L( r% u* s
Cache.initSize.l2Size = Cache.L2Size_32K;
  I. q) _* N4 I+ H% Z4 u5 j* s5 r. d" M4 |
回复 支持 反对

使用道具 举报

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 */5 {' ?+ r" Q5 @: ~
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');; _( l* \; K* x
var heapMemParams = new HeapMem.Params();6 q% r& N/ R5 B6 l
heapMemParams.size = 0x4000;
' P; \+ ?1 G4 p4 a# n5 g: N& [, j6 Q
var Memory = xdc.useModule('xdc.runtime.Memory');. _0 I7 P4 M$ w6 V! r+ b' H1 X
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);
( U' C/ p/ a0 Z9 e. I; L; c( r. `6 s$ I: N4 I
我大约calloc  每次共计大小为5K*16bits,/ X% U. r2 L/ N
而默认配置才0x4000、需要改大。
6 u* R5 B3 j1 T) q' A
. M7 l/ f0 f% j$ M
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
5#
 楼主| 发表于 2015-10-28 16:14:47 | 只看该作者
/* no rts heap */. [! r. ~! v7 d$ v
Program.heap = 0;
$ W: ^2 x2 _- B) A" aProgram.argSize = 100;  /* minimum size */
/ R  w/ ?$ J% L( T/ Q3 D  H4 h% rProgram.stack = 0xF000;                   //我改到F000  也不行
回复 支持 反对

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

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

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2026-2-4 14:09 , Processed in 0.049610 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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