关于OMAPL138在SYSBIOS下DSP侧动态申请内存问题 - OMAP-L138 - 嵌入式开发者社区 - 51ele.net
设为首页收藏本站

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

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

7 U7 v4 d5 V; B3 X5 a    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //256. P5 v" ]5 T  d. }* I

* f( A$ R, \3 {  P- r其他程序段。。。。。
4 ~4 i+ U+ o: d2 }# H7 U. g
2 y! y1 ^6 _5 H# G   free(x_d);
+ H% A8 M3 J0 ]. L0 j  Z+ ?! r
* e6 x  v  v7 d3 J% X& r. U( v使用DSP侧单独调试功能,验证动态申请没有问题,( }( K& Y: R2 L2 L/ L

9 G( h# J- R6 V; U  B( e" S但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。' _4 S5 G! \' ?  s, q( x

: ~5 @  L* U: J1 ]3 \8 b& x6 y" F0 z
' u9 |! F. b2 Q# G& P) W  T9 N: K, {* t9 B  S
1 t0 y' h7 a; L( z& J6 ^% z$ N

: r7 f  B6 C: v0 A$ q. ]
) F+ [2 s+ L3 w7 y3 `: O1 ^1 ?6 q! @: k" ]4 G5 p+ H2 |* I, Y4 H3 j

' Z; D: [, S/ O% f5 _4 X, ^4 c. u( E  r
9 J; N' H4 t8 K* [
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2015-9-4 10:29:21 | 只看该作者
补充说明
. R7 |! B/ L9 J/ L我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下' M. b0 @0 _* O+ b
(不过疑惑的是,为何单独DSP仿真就没有问题呢?)' E/ Q4 m! ?) M* P
  h) V7 |' j4 B9 i
是不是需要在DSP.CFG中进行配置
! f- C0 C9 J* b, Z3 T8 ^! Z我现在的配置为
4 ?. U; A# I, L" g% y9 c8 f* ~+ Z0 Z" y2 `2 Q8 n
/*
. ], }  p: G' a, q( P9 \2 @- z *  ======== Operating System Configuration ========
& E  a7 T# x  u% ^6 |6 H& I  i0 g/ l) G */) J5 D$ B8 }, s+ Z4 Z  [
+ A6 d8 T* A& m# Q
/* no rts heap */
- E/ ]2 p5 L# O9 ^5 W3 ZProgram.heap = 0;* {3 r( D$ W3 F' p9 d1 ~* q
Program.argSize = 100;  /* minimum size */
7 r0 a. t  N. B7 ?Program.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大3 O# A* d- ]8 S0 i

6 d* `. l$ Z1 M# o/ T6 h/* create a default heap */
7 M& h7 z+ y5 \4 F8 X) G- ]* @% yvar HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
' [3 c( `& F4 g$ [4 Uvar heapMemParams = new HeapMem.Params();
' M6 d( a$ D0 u. ~1 m2 oheapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大6 O( \* h/ w% P

* s) t2 `7 e1 I$ i0 y4 F7 g1 L
var Memory = xdc.useModule('xdc.runtime.Memory');7 ]+ a, E8 @( `
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);
% a  b3 p1 L8 q0 _2 o4 `- Z/ @& T$ a; Y
/* configure System module */
! S8 K9 {( |' a6 O: M! W2 t) v2 hvar SysMin = xdc.useModule('xdc.runtime.SysMin');
8 ~* z& H$ _  l6 f: c/ n1 ]SysMin.bufSize = 0x1000;
9 e7 ?8 b$ W8 J' f3 y6 {, p# R& xSysMin.flushAtExit = false;
9 c& G- v" O& {/ v4 R! m6 m3 Y& C/ A! S4 p! v
var System = xdc.useModule('xdc.runtime.System');
3 P6 w* y: f, QSystem.SupportProxy = SysMin;
" }- D# ]* ~1 W+ `4 g0 `
5 ~* D) ]" R) `; o; I/* configure SysBios to use the lower half of Timer 1 */
3 t# ?! Z$ j# G6 avar Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');
1 l9 x) x8 v# o# Z! ^$ x8 P% l: A( zvar Clock = xdc.useModule('ti.sysbios.knl.Clock');
% w5 R, }1 z3 R+ FTimer.timerSettings[1].master = true;2 W3 p2 ^4 d5 r. f
Timer.defaultHalf = Timer.Half_LOWER;/ K% \- A4 O, Y* z
Clock.timerId = 1;* l* W* D/ m0 c6 |* F. `, T! B

% Y" [0 e- l" ~: R1 d# _/ @( V# e4 V: |/ L
/*  t, t( ~$ f. @
*  ======== Miscellaneous Configuration ========4 [: f1 f, M0 ]  J4 b
*/
* @" U; I: S( U7 {9 h9 o5 [1 q! s% H9 r' P  A7 o- Q
/* set default diags mask */
7 i; I$ y; y# z. Y1 s5 {. }0 n' m% qvar Diags = xdc.useModule('xdc.runtime.Diags');
  b  V! ~  n0 Pvar Defaults = xdc.useModule('xdc.runtime.Defaults');
8 g8 K, _" K9 D/ h- u3 c$ ?/ T/ q9 \' u: j
Defaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;0 E+ H% _. O* T  L0 w
Defaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;6 L1 H2 y+ V, `3 l
Defaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;
. T' a' L' I& w9 D) gDefaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */' o1 K4 n6 T7 ?5 V
Defaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */
7 l1 u  R6 f9 m% H9 i5 LDefaults.common$.diags_STATUS    = Diags.RUNTIME_ON;9 T- L/ u% g4 y; n. }: C6 B
Defaults.common$.diags_USER1     = Diags.ALWAYS_OFF;
3 I% s7 j9 y0 pDefaults.common$.diags_USER2     = Diags.ALWAYS_OFF;
: ~5 A( ?0 t2 ?8 E3 N( A. DDefaults.common$.diags_USER3     = Diags.ALWAYS_OFF;" T9 k% {& C" Q! V' d" j# o7 y7 U5 o
Defaults.common$.diags_USER4     = Diags.ALWAYS_OFF;. b: ]) T+ z/ W
Defaults.common$.diags_USER5     = Diags.ALWAYS_OFF;# R( ?( u' N! p9 y
Defaults.common$.diags_USER6     = Diags.ALWAYS_OFF;
1 n: u5 ?. B7 yDefaults.common$.diags_INFO      = Diags.ALWAYS_OFF;
. {; G& I( _: _$ t; ~, W) y8 ^Defaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;
; {2 P7 H$ M' |- n# N# i3 h' m
6 n, Z2 k, U2 H3 J8 w" Y, {; |: [/* override diags mask for selected modules */
6 w3 T2 ~+ f5 M3 O/ o3 @! lxdc.useModule('xdc.runtime.Main');
; W& U5 _# O: B* PDiags.setMaskMeta(6 ^. p, `' D: O( n& I
    "xdc.runtime.Main",, B5 c% r; o' Q" Y4 N
    Diags.ENTRY | Diags.EXIT | Diags.INFO,
( k; X! D# a: o- r4 S+ d4 c    Diags.RUNTIME_ON5 l! i' Y' n' \
);# n( y9 q; V$ V! l

, ]# a8 T2 S  t9 e4 lvar Registry = xdc.useModule('xdc.runtime.Registry');
0 L# |: D$ M4 S" ^7 d. M0 c, @Registry.common$.diags_ENTRY = Diags.RUNTIME_OFF;
+ y5 v$ c, M/ E/ u2 O& ORegistry.common$.diags_EXIT  = Diags.RUNTIME_OFF;
/ [9 S$ r: I0 ^! e4 f  n) }* kRegistry.common$.diags_INFO  = Diags.RUNTIME_OFF;
' b! r+ I, w3 |5 r& IRegistry.common$.diags_USER1 = Diags.RUNTIME_OFF;: }: C+ l5 d, |
1 z* i% v0 Y% D
/* create a logger instance */
# f. |  G9 F6 Y% Qvar LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');
& d0 C$ k' P+ ]4 O9 hvar loggerBufP = new LoggerBuf.Params();
' p2 z2 q/ q) W7 n1 b; g8 aloggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */3 p( G2 A1 U/ y' O6 X3 [
loggerBufP.bufType = LoggerBuf.BufType_FIXED;
7 _; p: h+ W, q9 k4 J5 H% L3 k" g  t0 @/ j- u$ f
var appLogger = LoggerBuf.create(loggerBufP);
! o  j  @% ]9 E6 G7 N/ j7 [appLogger.instance.name = "AppLog_Core1";& W& @9 ?- F2 Y+ _$ A
Defaults.common$.logger = appLogger;
; p8 j. o$ y, G0 c5 fMemory.defaultHeapSize = 0x8192;   
  D6 b: l5 s% W. N- nIdle.idleFxns[0] = "&LEDStatus";7 U$ \4 N2 k6 w3 B
Cache.initSize.l2Size = Cache.L2Size_32K;
' H' _0 L. ^# Q  @; n) C6 n# M+ n
2 ?, ?; u, `+ ?- n0 u; 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 */
" k7 o$ f8 R6 fvar HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');# F! z1 U( \  P: k
var heapMemParams = new HeapMem.Params();
( b8 ~  n3 z& n  s( E4 I- FheapMemParams.size = 0x4000;
( p( s/ p5 U7 k& L$ l( C
7 r8 \/ F1 C) \; q3 Rvar Memory = xdc.useModule('xdc.runtime.Memory');. l1 I$ k; {2 a, h2 V* _( a
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);" }+ Y" _5 x3 w& \, a4 l1 P

- a! }! V0 T9 u& s) r+ g我大约calloc  每次共计大小为5K*16bits,' M# n9 A! e: {( |( q6 T
而默认配置才0x4000、需要改大。5 N! F. s4 Q/ m% \

6 e! G( W% _, _7 m
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
5#
 楼主| 发表于 2015-10-28 16:14:47 | 只看该作者
/* no rts heap */7 x% C- }  F+ v* y, x9 e# k) w
Program.heap = 0;8 n, ^% Y: m3 P6 k  Q  C% W
Program.argSize = 100;  /* minimum size */
4 Z" Y) p; a$ E) V0 n, \Program.stack = 0xF000;                   //我改到F000  也不行
回复 支持 反对

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2026-1-7 15:09 , Processed in 0.044317 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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