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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2015-9-4 08:33:31 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
创龙工程师你好,我在OMAPL138单独调试DSP程序(使用SYSBIOS)时,在任务中使用calloc函数动态申请内存,用完后free,类似如下结构
  b  Q& P! n4 u, L1 f6 n
9 w+ f* ~2 N0 N. n    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //256, m0 V+ z- f, _# `0 |0 |

# y; {2 v. T) t- `3 e: ~其他程序段。。。。。
: }7 g- B0 j3 a % R; N$ b) Q+ o& `, ?7 S( @
   free(x_d);
; i. L# Z+ O+ S3 O" Y/ O/ c4 C. W# G  x7 T
使用DSP侧单独调试功能,验证动态申请没有问题,
, ~/ G% U* a6 f9 o, V( v& P! A' I3 |  c/ T5 l
但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。
, C) D3 Z$ _, Q2 A
( v( H$ {) d! H! X9 O

/ `: _8 s9 u0 ?+ S6 Y: k& e7 n0 C6 o" b/ L+ u2 r) w. X  l6 K( U
1 w8 H! k  {5 h

: j9 v& Q- ?9 ]  {' v% m2 |- ^' C8 l! J% o" p) ]$ }# _
6 d# e* \5 B8 u8 {8 D  k4 [
# i- M4 r8 n% o6 W0 I

8 \0 x( Y% Y. ]5 Q5 T
/ L' \+ `* p* ?! n; `+ {8 _  I
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2015-9-4 10:29:21 | 只看该作者
补充说明
& s; Y& B: g; Q& V我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下
$ h# t( g4 N! z! e; M1 r(不过疑惑的是,为何单独DSP仿真就没有问题呢?)9 ?: M* D: f3 \' F8 a5 c- R

7 d3 Y4 U$ A8 _& A5 ?# D$ t) _是不是需要在DSP.CFG中进行配置5 G. e# z) `; f+ ]& K, i
我现在的配置为% X5 b" i& N0 f' \# c# K0 D
2 X) r  h7 _9 Q9 h
/*
  r- }( N4 h9 i *  ======== Operating System Configuration ========
& s' i8 l1 c/ j- S9 K  B0 n */& ]+ j% {: d/ e! A
  m: {! Z& J, p$ Z0 Z; m" @9 k
/* no rts heap */3 X% z8 x  F* Q$ R! S
Program.heap = 0;
" ]' E3 T. r* h  SProgram.argSize = 100;  /* minimum size */+ ~4 ]4 E  h7 ?( ]( X
Program.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大' ~6 w8 a" R, w; k& I& j
# {( {( ^& v7 k7 N6 F. b- ]
/* create a default heap */! Y: g9 ^$ o) m) n# V! J9 \3 `
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');. J( F. e. V" A/ ]
var heapMemParams = new HeapMem.Params();# t/ c6 E0 Q% W* `1 E# S4 j( i
heapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大5 c3 p' i7 t9 _& Y+ \! y; l
- C0 C  t$ P# h  b2 E" R+ [( l
var Memory = xdc.useModule('xdc.runtime.Memory');6 K& W1 L; K' O( X
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);
  p! v+ r7 i3 K0 A5 c; E8 }) }2 w0 d( S8 t+ X
/* configure System module */# {/ @9 |7 V. V. u
var SysMin = xdc.useModule('xdc.runtime.SysMin');
! D# `/ N% @, v1 r# NSysMin.bufSize = 0x1000;4 F$ |( J: x  O: C3 v9 M$ w! z* f
SysMin.flushAtExit = false;
0 R7 J, I' `3 B: ]" u& o7 U1 Y" i+ T; w3 Y' f6 }* i
var System = xdc.useModule('xdc.runtime.System');
  t( p+ z, R5 o, QSystem.SupportProxy = SysMin;$ j7 a+ t8 d* A5 Y* n

' t  |$ @) n% L( `' D/* configure SysBios to use the lower half of Timer 1 */3 l+ \9 t0 a! K8 Q9 y/ I- [+ ~
var Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');
7 _, i3 {. @) K3 Bvar Clock = xdc.useModule('ti.sysbios.knl.Clock');
- E0 l3 T7 v0 h; tTimer.timerSettings[1].master = true;; w, C. m9 p& V
Timer.defaultHalf = Timer.Half_LOWER;5 ]1 f/ _  }" ~) P
Clock.timerId = 1;7 p: B2 j: }# J5 {

: B7 e$ {, W" `' L0 \1 k: [/ d( g: T  k% _$ H5 p
/*
9 @6 f7 R* Q8 Y- W/ }( ? *  ======== Miscellaneous Configuration ========
, I; a1 a0 U) S */
2 N$ r- R: Q$ ?) g( e' A" F& p5 ]/ {2 N2 j
/* set default diags mask */
( K2 ^4 _4 E- p8 Z8 b- x  i7 cvar Diags = xdc.useModule('xdc.runtime.Diags');
$ O2 w$ R& f  `4 q$ T1 L0 ~var Defaults = xdc.useModule('xdc.runtime.Defaults');- G4 L& L0 w( K6 D5 ~' d9 W7 L
+ O' R. F$ @3 G8 I7 g& C6 M
Defaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;
% I$ o' ^6 `/ {) ~6 h% d$ e7 ODefaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;& s9 ?* x' V/ l! F
Defaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;! W+ B: Q2 ?8 r5 P/ C
Defaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */
/ i( j1 K4 k, c. R; C. _Defaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */  m( \  L# n7 ~9 `/ ^0 ?# ?
Defaults.common$.diags_STATUS    = Diags.RUNTIME_ON;+ F) o. w4 w  t7 v9 C
Defaults.common$.diags_USER1     = Diags.ALWAYS_OFF;
2 ~( ^4 F' j1 `) ?7 t5 ]Defaults.common$.diags_USER2     = Diags.ALWAYS_OFF;0 p5 V7 ^, w5 g+ l* D; L
Defaults.common$.diags_USER3     = Diags.ALWAYS_OFF;
2 H: i9 _& M: B# Y9 X9 @# {Defaults.common$.diags_USER4     = Diags.ALWAYS_OFF;
, K* \8 ~' J/ sDefaults.common$.diags_USER5     = Diags.ALWAYS_OFF;9 r4 F8 Y" b  U; t7 F3 x  N
Defaults.common$.diags_USER6     = Diags.ALWAYS_OFF;
2 ~, t7 o- `( Y/ m) KDefaults.common$.diags_INFO      = Diags.ALWAYS_OFF;7 H  }3 f0 n3 Z( g; p' d
Defaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;
' P9 j2 c# I5 |& n+ Q, L8 w5 G- [$ Q$ E9 W, o  x
/* override diags mask for selected modules */
" Z# t, Z; M3 ^$ c, J8 F5 x9 y7 zxdc.useModule('xdc.runtime.Main');
6 W9 H1 |4 q7 H! x2 h* l8 hDiags.setMaskMeta(
. {( B1 c. E+ u! ?- a5 w    "xdc.runtime.Main"," m/ `# Q) v1 P1 V) \" H$ ?# B! m6 `
    Diags.ENTRY | Diags.EXIT | Diags.INFO,
2 h) y& m6 v, |& D! ?- x+ h5 `; k7 @    Diags.RUNTIME_ON: _0 t1 u6 C: k9 n' m& H
);
; a$ `5 s/ a! U' b* x6 v4 j: \0 @! n6 X  ~* s& g( Y7 L5 m. u
var Registry = xdc.useModule('xdc.runtime.Registry');4 j; G; o% V' h3 }) q
Registry.common$.diags_ENTRY = Diags.RUNTIME_OFF;3 ^, _; [4 i7 y' [
Registry.common$.diags_EXIT  = Diags.RUNTIME_OFF;
/ R$ P) s1 N( u0 p+ ^Registry.common$.diags_INFO  = Diags.RUNTIME_OFF;
: H1 w" ~+ C, I! L$ y  }Registry.common$.diags_USER1 = Diags.RUNTIME_OFF;" l6 j% W, b/ p) H  ~
/ i5 ^0 X; q  c- I! D
/* create a logger instance */
  {, j8 E9 X5 G7 _var LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');
5 }4 _' `1 X1 c. n7 W, d+ {/ hvar loggerBufP = new LoggerBuf.Params();
) E) M6 ~7 \  h. f& H: ~loggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */- g1 f1 y0 Q$ i, G: v; \  B
loggerBufP.bufType = LoggerBuf.BufType_FIXED;2 z' X9 e2 f4 p2 A
) Q: s: O9 C( i+ s
var appLogger = LoggerBuf.create(loggerBufP);. Q7 {: |# D5 b
appLogger.instance.name = "AppLog_Core1";
  A3 S/ `- y5 g. @$ t2 IDefaults.common$.logger = appLogger;
5 \0 _6 ~5 K* eMemory.defaultHeapSize = 0x8192;   
' J; d. N& F$ D5 S, q# x  GIdle.idleFxns[0] = "&LEDStatus";
/ h7 {% j# t$ s, h; [! o9 `2 [# gCache.initSize.l2Size = Cache.L2Size_32K;
# {: Q2 @- O! q7 ~
* p: m2 }1 t; I5 O. e8 O) @3 {
回复 支持 反对

使用道具 举报

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 */$ U9 K* P" [- g7 ~" i: u; E
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
6 z5 @4 a( d& Xvar heapMemParams = new HeapMem.Params();
& S0 D+ U& H! H( K+ FheapMemParams.size = 0x4000;: \3 U$ y6 {! ^

. A" b7 n! Q* F6 gvar Memory = xdc.useModule('xdc.runtime.Memory');
3 ^  A; N$ v" s: ZMemory.defaultHeapInstance = HeapMem.create(heapMemParams);
7 ?3 [# w2 |* ]: }' Z& r, `) M
6 N) B* S) l4 c% [/ h2 I我大约calloc  每次共计大小为5K*16bits,; Y, U0 z! T0 ]- x5 t$ ^
而默认配置才0x4000、需要改大。
2 ]# t4 y" @7 T* e/ [0 T
5 ?0 k; Y8 q$ Z- v" w  \5 r1 k
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
5#
 楼主| 发表于 2015-10-28 16:14:47 | 只看该作者
/* no rts heap */
( G9 n4 ?( m9 C! t  |0 @Program.heap = 0;
3 n! f8 m/ V1 b! K9 T& E8 iProgram.argSize = 100;  /* minimum size */8 Z1 t9 u. S3 o) g  J2 b
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-10 09:56 , Processed in 0.060367 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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