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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2015-9-4 08:33:31 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
创龙工程师你好,我在OMAPL138单独调试DSP程序(使用SYSBIOS)时,在任务中使用calloc函数动态申请内存,用完后free,类似如下结构
" o# d6 _% K: j7 ^& c
3 P9 \+ W$ Z1 ~1 U! B% z    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //256& U9 B+ A6 ^& n* r) @7 I
: F' C  S9 S3 V4 {+ H9 e: n
其他程序段。。。。。6 B  d6 b5 P& E+ D5 ^

" t3 ?$ r+ F0 d% G' O2 @" ~! Q- H   free(x_d);
0 a2 X. A. u5 n
9 C* b3 l1 Y, A使用DSP侧单独调试功能,验证动态申请没有问题,% A) x1 c% s- a/ G4 K- S" ]" U5 s, a  k

6 ]. L$ [- U& R( f9 _但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。
% Z: K: _" \. I. V& |9 T& n% I

8 Q7 }: ]1 G4 Q. ]* z; O& C, P4 u( J4 Y! k5 h  K4 {5 X

9 c0 r% q1 k: ]/ m4 ]& |0 \& e9 v: k: X# {8 {1 ^% K5 q$ \5 S( F- I7 o
# x+ p8 j" F4 a2 A- a( I* U) Z

3 m; i+ x" w, Y* x# u9 J! K: p$ t+ {' Z% H, A3 V! n

  y0 s8 s+ F0 ?( J3 N0 p. L. m) a8 J1 T! s2 ?' Q  |! h/ `
* }* n) ^+ r" r5 M
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2015-9-4 10:29:21 | 只看该作者
补充说明
3 T, A# W' s' @) ^( P" u+ q我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下4 F4 ]+ X- R( j' `
(不过疑惑的是,为何单独DSP仿真就没有问题呢?)
' e- P8 _+ m" D% R# R

; {2 U  P8 }5 @. O/ {3 j是不是需要在DSP.CFG中进行配置
- o0 @! O3 i* h2 X. q) V我现在的配置为0 s& m8 s+ v2 @3 F
+ t+ m( f0 v/ g: w
/*  m% \6 `9 K0 P
*  ======== Operating System Configuration ========: j7 S: ~  n$ s1 V
*/
1 i8 B& H4 O" D' Q  I: N4 E8 W
. g5 L- H5 \' D$ k  a4 I# }/* no rts heap */
/ W. ^2 G: P) [) mProgram.heap = 0;
7 w1 J+ G( D) Y+ ?- c/ _Program.argSize = 100;  /* minimum size */9 f* k9 O$ a$ b: T9 J
Program.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大3 X! z( B. d! a- M6 m1 v8 Q

' E2 o# O% ?- R" L* T/* create a default heap */
6 v# w0 |, ]6 l" L2 E) ]  Vvar HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
' z! B9 K! l6 ?9 h8 n& ivar heapMemParams = new HeapMem.Params();: r0 w! X" g+ p2 s/ `4 F$ ?
heapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大+ G4 t9 F* C! z# i, `2 y% e

1 N$ m: G. z9 a7 W5 T
var Memory = xdc.useModule('xdc.runtime.Memory');
/ |) j. n1 B( P2 |9 ZMemory.defaultHeapInstance = HeapMem.create(heapMemParams);2 l3 V: W. h7 B" ^) R
& x7 r/ ^# q/ V/ H5 }) z0 }
/* configure System module */
; C, \# E( k. |0 ^) Gvar SysMin = xdc.useModule('xdc.runtime.SysMin');- U& ~3 f' V% o  X$ a
SysMin.bufSize = 0x1000;% P! E5 u5 t7 J/ I" E6 z5 E
SysMin.flushAtExit = false;
, S5 n; W6 X/ Q7 F- b  \1 F  `
* f# [! O( E1 _, Kvar System = xdc.useModule('xdc.runtime.System');
  K4 Y$ D2 [, j) |: t: HSystem.SupportProxy = SysMin;
- ~8 i' H- Z$ J9 n+ R0 q
0 B* i, Y! o9 R% e1 {5 |' h5 c/* configure SysBios to use the lower half of Timer 1 */, C$ S, g1 s! A& a" ]9 {$ ?
var Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');4 U- J0 ~6 E% [8 `$ k2 G! a
var Clock = xdc.useModule('ti.sysbios.knl.Clock');
& S0 ~5 [6 Y9 p: D) R9 WTimer.timerSettings[1].master = true;/ w* N) M; a" Q/ ^: g; c' M4 W! V& Z9 j
Timer.defaultHalf = Timer.Half_LOWER;
6 p$ `. z1 ^8 i: R0 JClock.timerId = 1;
' e" o6 P( ~, A
4 B8 ^& L: h( p. E7 U) ~# h: a5 d4 g9 i; P! q2 m9 P. B0 t
/*
4 N& Q, J+ H: H( T+ A *  ======== Miscellaneous Configuration ========
. y7 |4 M% _2 v. T  {/ o) @1 ~0 W */
6 n+ M% `: X+ u+ Y5 `7 y, U9 ]& n* \- C0 ~. F4 ^7 L9 W
/* set default diags mask */$ h! v3 P+ M1 w. S; i' N* a
var Diags = xdc.useModule('xdc.runtime.Diags');
6 `# _% t# q4 Y0 Evar Defaults = xdc.useModule('xdc.runtime.Defaults');
& D" }4 p' p, Z9 `9 b# `/ q: |5 X7 ?
Defaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;/ j# C. P& Q* I- d6 @% ?
Defaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;! W1 I$ ^9 S( Q( T
Defaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;
" g5 \& I6 f9 @+ Y$ K, P8 g) LDefaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */
$ N2 |$ k- I4 ~( u5 _5 k3 IDefaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */
& k( _' j5 @5 `Defaults.common$.diags_STATUS    = Diags.RUNTIME_ON;
/ J! _: s% e8 K2 C. V1 f, FDefaults.common$.diags_USER1     = Diags.ALWAYS_OFF;6 e7 D/ o: t3 R
Defaults.common$.diags_USER2     = Diags.ALWAYS_OFF;6 R* {8 X4 y' e8 z' h$ P* e5 p
Defaults.common$.diags_USER3     = Diags.ALWAYS_OFF;- m5 l: b" Q' ~$ i9 O. z/ G
Defaults.common$.diags_USER4     = Diags.ALWAYS_OFF;- G; s: f9 G. z+ I: h, [( P
Defaults.common$.diags_USER5     = Diags.ALWAYS_OFF;  P2 x% t* G+ ~
Defaults.common$.diags_USER6     = Diags.ALWAYS_OFF;
2 i( G, Q* X3 A; Z6 D. G$ n& YDefaults.common$.diags_INFO      = Diags.ALWAYS_OFF;
  z5 Y# t/ p/ q9 _* d$ Y1 SDefaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;9 _+ j6 y* b, d0 i* z, r9 F

% }$ [- R1 y' D. b. @/* override diags mask for selected modules */
/ ~3 m. l  p+ |6 I9 q6 e6 uxdc.useModule('xdc.runtime.Main');
4 A5 ]4 Y3 Z  B$ K, NDiags.setMaskMeta(
: U8 @4 R$ V: z6 [7 x3 n    "xdc.runtime.Main",
" i2 E) k; @3 M/ t. @    Diags.ENTRY | Diags.EXIT | Diags.INFO,
* C( w+ w( q' W! o1 @    Diags.RUNTIME_ON
3 q  D1 @/ x6 y! u# K);
; x$ l  O, G& \( P2 _
8 g# O: h9 X0 pvar Registry = xdc.useModule('xdc.runtime.Registry');
. l7 L. W- b# d+ B: B( RRegistry.common$.diags_ENTRY = Diags.RUNTIME_OFF;2 h3 ]0 \0 `' Z- Q9 \; ?% |
Registry.common$.diags_EXIT  = Diags.RUNTIME_OFF;
" e# V- j! S' k  ERegistry.common$.diags_INFO  = Diags.RUNTIME_OFF;
2 K, x7 P+ Q3 h! PRegistry.common$.diags_USER1 = Diags.RUNTIME_OFF;+ N% ?- l7 p# ^) u8 A0 X

$ G( k0 X. ~$ [/* create a logger instance */
4 m: k; T, v6 E! S) m- Dvar LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');# e. u) J7 a5 k7 V6 `9 f& A5 Z2 c
var loggerBufP = new LoggerBuf.Params();
4 ~1 p" z0 _5 gloggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */% S3 U2 B8 N" a2 J/ t  U9 _
loggerBufP.bufType = LoggerBuf.BufType_FIXED;
1 t4 g! m9 v$ D! F/ n& P
$ ?6 Y( d+ k% K( ^$ k( w+ n; ivar appLogger = LoggerBuf.create(loggerBufP);
2 F  f# J1 z- M( O5 BappLogger.instance.name = "AppLog_Core1";
: J5 M: S( C, |Defaults.common$.logger = appLogger;
3 p% {7 \$ I0 z3 \1 SMemory.defaultHeapSize = 0x8192;    # m: M5 ?6 K' V4 `
Idle.idleFxns[0] = "&LEDStatus";6 \8 f9 f' i* W- o
Cache.initSize.l2Size = Cache.L2Size_32K;% }" I+ b) Z9 C  \
/ C/ t" y/ d; U- G3 K! d
回复 支持 反对

使用道具 举报

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 */4 y3 X6 Q0 Z" Q- V% i3 }
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');# l! C( u& \! M3 K* V
var heapMemParams = new HeapMem.Params();1 N3 `$ Z, k, `: N9 l# q; F
heapMemParams.size = 0x4000;5 C% z' i$ K" k8 N! K

' K/ X4 I- u$ W7 l/ X' ]var Memory = xdc.useModule('xdc.runtime.Memory');
! [6 N& _  Y* P) ~$ {4 W: ?Memory.defaultHeapInstance = HeapMem.create(heapMemParams);5 L/ C# j3 l% `+ Z& K7 O2 E
! G4 x5 R# H& E- A
我大约calloc  每次共计大小为5K*16bits,4 o' H8 G0 G' d, r
而默认配置才0x4000、需要改大。! p' {. G$ @) x1 h" d& h' v
) i) f. j, R& C0 {( c$ r
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
5#
 楼主| 发表于 2015-10-28 16:14:47 | 只看该作者
/* no rts heap */( x- [8 C) t' o8 j) U0 a, p5 T
Program.heap = 0;  u& P2 h* a& V: p: P- T1 g% _
Program.argSize = 100;  /* minimum size */. o, X: B( ^! g2 |8 X; l9 d6 h/ _
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-21 11:52 , Processed in 0.052510 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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