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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

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

; {  |& {4 C, @% t: i' c# x/ [    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //256; _* X+ T$ O# j3 Q4 \* p

1 x& \! u/ ~, g其他程序段。。。。。
  `# v7 s0 t+ H! d  e * _: K) o1 p- @: J) v+ n3 ^
   free(x_d);
) Q3 G; Y+ \7 g. ]% @
0 a0 Z; T: {) q# ~使用DSP侧单独调试功能,验证动态申请没有问题,8 G6 K& v# G! o# k+ s2 x
% Y8 `& W" j) ]" X$ P
但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。) n+ Y+ z! P: f1 v: H

6 T: S# v& ?$ T! ]5 S/ B
% Y: @1 t& y2 v  y. [! X9 v& Y8 _+ Z
- o, |( _. j8 I$ _! b, R, Z3 K

7 T; U2 C0 r' s: |8 w' Q2 w8 R6 A- E: `( O+ o
$ ?, t9 j" N( H% W# N5 N4 {
$ q! p8 U  {- z* \

) t- Q& V# r" V6 |7 e1 T8 `7 b7 k9 L  o+ T' c6 T. S' h; [
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2015-9-4 10:29:21 | 只看该作者
补充说明
% L* o+ a$ c) p; \3 I& C: U: X/ u. p6 s我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下
. k4 t3 [, _% Q/ G* n(不过疑惑的是,为何单独DSP仿真就没有问题呢?)0 n8 |  t) d! W

8 j. a, h. Z5 k+ q! n$ D是不是需要在DSP.CFG中进行配置" v8 g- O/ X# Y# ~' L
我现在的配置为
7 L8 H; w3 q6 K8 Q7 U! G9 K. H1 k2 k' f' o9 R& d
/*
7 N+ p) w( ?5 Y *  ======== Operating System Configuration ========
1 e& ]6 r$ y) L. R9 W! j6 E9 B( k */, Y0 L) w' ~& l2 L+ M& u
% Z2 v8 _% G" ^$ D1 f  n& R
/* no rts heap */
1 r6 q& k5 Q0 eProgram.heap = 0;( V, ?" m8 }: d1 B! c8 c' W
Program.argSize = 100;  /* minimum size */2 F4 b4 l: N- a, Z* R0 s
Program.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大' d! H  H5 C6 _6 v
: w' ^( C; B7 n( R" `; W
/* create a default heap */
( w: U) U( W9 ^* c' d6 x4 R9 kvar HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');8 K9 C& `4 d9 \, C( E3 s! K
var heapMemParams = new HeapMem.Params();% ?# t* U# C; N$ J) n
heapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大+ C+ d+ H+ Q9 f9 c, L
8 h" W0 ], u4 T3 w. I
var Memory = xdc.useModule('xdc.runtime.Memory');2 _4 c: h/ H4 ?* \
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);
/ X' r/ q9 r& t: ^3 D( ], P* i# C* v3 }
/* configure System module */
& }) l) X2 m. I$ C% C/ q" ~var SysMin = xdc.useModule('xdc.runtime.SysMin');
& I# P4 o3 Z6 K6 `SysMin.bufSize = 0x1000;, N  s, b) M/ E1 z8 ]- _* T8 M( R( \
SysMin.flushAtExit = false;8 E7 i$ C" R8 s" j1 C7 {
" U# V. E0 b" j$ ^3 R$ q/ B
var System = xdc.useModule('xdc.runtime.System');
5 l7 d. a2 I$ v) hSystem.SupportProxy = SysMin;( t: z& F1 a/ I
4 L  Q. H+ }5 b7 h* c# E8 w* v
/* configure SysBios to use the lower half of Timer 1 */9 o# z% f- C5 e8 @" P
var Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');
5 w' E) U% P& g/ y1 I. S  J9 M2 J6 avar Clock = xdc.useModule('ti.sysbios.knl.Clock');; I% H+ Y- q; j; R0 B
Timer.timerSettings[1].master = true;
% C% f. [& R8 F& @9 T8 k# zTimer.defaultHalf = Timer.Half_LOWER;
6 p% l- }$ |3 v+ l0 LClock.timerId = 1;4 g3 s5 a, e# ]1 U' T2 |9 i

$ L+ y6 Q5 @) g% N
* i1 F/ ^; z+ f" j! V8 J) F/*
" ^- M- W8 v, @5 `& c6 g. H8 P; M *  ======== Miscellaneous Configuration ========6 C8 |/ H' E8 |# C: M, K
*/1 v3 b2 R9 u0 f, f
% m* @, r* C. D2 d1 C6 f
/* set default diags mask */8 b7 V# D- m; {$ _& T& A- m, {9 A
var Diags = xdc.useModule('xdc.runtime.Diags');; d9 m% w7 y- j9 U
var Defaults = xdc.useModule('xdc.runtime.Defaults');) k3 K: J% Q# a/ [. I

5 J- x" u' R6 z6 M. @! yDefaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;4 E$ @; y# r. |& d  `- `
Defaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;) @7 X' Y' T2 x& a" H
Defaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;. w% z! X7 f- u
Defaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */
( _3 w/ \! a8 u: bDefaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */) Z: Y7 \  j( F' _  l1 W
Defaults.common$.diags_STATUS    = Diags.RUNTIME_ON;
. h7 }8 U0 j, mDefaults.common$.diags_USER1     = Diags.ALWAYS_OFF;
% m. v. S( H6 }4 X5 V5 EDefaults.common$.diags_USER2     = Diags.ALWAYS_OFF;
, j! N; a' q* m+ W" y# v5 B3 ADefaults.common$.diags_USER3     = Diags.ALWAYS_OFF;
+ s" K7 l) S! X/ t& }Defaults.common$.diags_USER4     = Diags.ALWAYS_OFF;' m0 H% \; J0 [' X' e4 Y
Defaults.common$.diags_USER5     = Diags.ALWAYS_OFF;
* _7 q( t+ ?( O' _. pDefaults.common$.diags_USER6     = Diags.ALWAYS_OFF;
0 D/ y0 l  i5 h! J4 nDefaults.common$.diags_INFO      = Diags.ALWAYS_OFF;+ a& z* b- O* S" h3 N
Defaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;* H% j# t( R. V+ _2 p# F  A! E# V

! \. x- b, e# Y8 K/* override diags mask for selected modules */
% D) X6 [1 n$ p; t8 a1 {1 axdc.useModule('xdc.runtime.Main');4 O! z" c* s( y9 ]
Diags.setMaskMeta(
* a% P3 \$ |  R) w$ \    "xdc.runtime.Main",
0 \$ X& t* x, i2 }) s1 i; o  g    Diags.ENTRY | Diags.EXIT | Diags.INFO,
2 K/ n( e/ W/ e    Diags.RUNTIME_ON
( j( i) U5 U0 l# }$ q# |);
9 U: u* U. e. B0 E# O8 E: p
2 S6 M- W' c! W; F+ C' ^$ _var Registry = xdc.useModule('xdc.runtime.Registry');
. F* @4 q  h/ X8 ]Registry.common$.diags_ENTRY = Diags.RUNTIME_OFF;
0 G/ o" C3 f; G& t# _0 O$ XRegistry.common$.diags_EXIT  = Diags.RUNTIME_OFF;& ]7 L: L8 m# P2 R
Registry.common$.diags_INFO  = Diags.RUNTIME_OFF;
* q& P* l9 n) H/ `( VRegistry.common$.diags_USER1 = Diags.RUNTIME_OFF;! C3 k$ G7 R7 L, q

. a% x5 b2 m+ u, s* e) R/* create a logger instance */' `8 z1 @$ z; D' ^7 n
var LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');. D6 i( [8 ~/ F  z8 ~6 O
var loggerBufP = new LoggerBuf.Params();) N/ G/ u% }' E& s9 J/ d( v
loggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */
% A1 H2 F3 s! ^% g  ^: floggerBufP.bufType = LoggerBuf.BufType_FIXED;
2 e0 u9 N# e5 h! v
0 X: V' k  R0 I8 avar appLogger = LoggerBuf.create(loggerBufP);
: f2 ]: L9 ^* Z4 pappLogger.instance.name = "AppLog_Core1";
# `5 `+ o3 l1 \! T3 mDefaults.common$.logger = appLogger;* T& W2 a! M( {2 h
Memory.defaultHeapSize = 0x8192;   
  }9 i5 }3 s; h! F- j' r& i* R6 ^Idle.idleFxns[0] = "&LEDStatus";
7 M# w7 g2 D+ @( l$ J) r& [! }+ LCache.initSize.l2Size = Cache.L2Size_32K;
& e+ ?: E/ }0 P) _  [
3 [) S* D4 l) y2 `4 m5 J
回复 支持 反对

使用道具 举报

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 */
# X( |" y2 c7 E. f' N& ?; Qvar HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');- b" D) N- u. G0 Y
var heapMemParams = new HeapMem.Params();
3 n/ _- S' V9 I6 X& k6 {+ m* OheapMemParams.size = 0x4000;
, j( y8 K! b+ X9 S' Z$ G4 ~6 P" U. W. J4 _3 w# j
var Memory = xdc.useModule('xdc.runtime.Memory');
6 ?3 U5 H: u' E! D# T0 IMemory.defaultHeapInstance = HeapMem.create(heapMemParams);
: z2 u- ]6 \# }7 h/ j4 n8 m& w* M1 w0 q3 l( I( A" r0 q" B
我大约calloc  每次共计大小为5K*16bits,
( ~6 s6 N1 f& W* O3 W0 M1 G) ?而默认配置才0x4000、需要改大。2 B4 Z: k9 {# g$ I+ D2 w8 {

1 E1 f0 Q+ N, P' N
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
5#
 楼主| 发表于 2015-10-28 16:14:47 | 只看该作者
/* no rts heap */
  m( }! ^, F7 E+ |- z' w" ]Program.heap = 0;( p7 d% `  W: x# s. d
Program.argSize = 100;  /* minimum size */
! E0 @" I: q  y* G4 h+ QProgram.stack = 0xF000;                   //我改到F000  也不行
回复 支持 反对

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

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

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2026-1-28 14:05 , Processed in 0.043859 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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