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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2015-9-4 08:33:31 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
创龙工程师你好,我在OMAPL138单独调试DSP程序(使用SYSBIOS)时,在任务中使用calloc函数动态申请内存,用完后free,类似如下结构" f" u0 \. q/ k( C  M$ C
! x, r& f) ]; J+ k$ Z
    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //256( q/ h4 P+ M4 a9 s% S0 L
( T' e+ u7 x# X  b9 V8 j
其他程序段。。。。。
# {. [+ u& ]8 u3 `/ F" b . P# p5 ?0 c: B( V6 x
   free(x_d);# H* D$ V, i% Z& x- d

% y+ Y2 J1 @- O; [6 ?! \( ^使用DSP侧单独调试功能,验证动态申请没有问题,
; `  w4 G8 R1 A7 t$ G7 K- h: q3 O/ k1 D
但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。/ w2 ?9 ?$ L) L. M) z; j6 [
; [/ d: V" F* C0 t2 V2 l; S' X' Q
, O2 K% Q5 W/ M$ v/ M
* i& |! D0 @% J, i& x
5 Y4 y6 t7 S; c3 C& S! u& s
2 w0 `$ c8 R" e* A. o" @

0 N$ n* t" W% ?( U  W9 F' M# J" L: t  C$ A8 P4 O$ j) L

0 y7 g( J, S0 d2 T. r, l
$ O9 z: n  D8 R$ ?6 G- w1 n4 C/ e8 R$ q9 v/ D
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2015-9-4 10:29:21 | 只看该作者
补充说明0 L& Z; N0 V: \  C, O
我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下
* \. |  w  x# o(不过疑惑的是,为何单独DSP仿真就没有问题呢?)% p7 F8 T: X* a+ C
0 {' ]* N& [) Y- D0 [) p
是不是需要在DSP.CFG中进行配置- z4 Q- p  l9 \; i0 r/ e( a
我现在的配置为+ e! i1 S8 c5 B; }; q5 j/ P
+ P/ ^( p% P- l( r7 u: V4 ^9 n; f5 r
/*
# e/ D6 d. `  E3 }+ X2 V$ b *  ======== Operating System Configuration ========
& L3 S  S( _& W$ y1 a3 g+ ~ */
3 P, m  ?8 d- y" a3 l! v) }- ~1 y, Y. i- n0 F  |, n  [7 u
/* no rts heap */& E; G8 k+ s/ H# r2 W) r
Program.heap = 0;
3 }8 [; i' [$ f* s2 DProgram.argSize = 100;  /* minimum size */; V7 t- X4 a6 E. [! B' n
Program.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大- g% X# I" J" V& f2 z

2 i$ X2 D$ d( B6 K/* create a default heap */$ L% I# I( ?3 P# A6 K
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
5 L" R1 X6 k- y- A, t$ \2 Dvar heapMemParams = new HeapMem.Params();3 k( w6 ^, X2 M6 W
heapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大+ E2 c8 d+ {  K9 k4 [, {& b- O

- U6 R6 e' H7 ?. z, w
var Memory = xdc.useModule('xdc.runtime.Memory');7 E7 o) ~' g9 N% r7 Q# F
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);+ a& B. \4 h# C3 o

0 U7 R# Q8 I1 a8 U& [$ q/* configure System module */9 @+ V% X& m# ~# j0 c* J1 R; o
var SysMin = xdc.useModule('xdc.runtime.SysMin');
' J, D+ p. D$ e6 B9 S' q- }SysMin.bufSize = 0x1000;, J/ Q+ P7 Q! e: S- }+ u0 i
SysMin.flushAtExit = false;
7 r7 c- B# W8 _7 ?
" o! }6 l/ |  L6 M* b" ~, ]3 W+ avar System = xdc.useModule('xdc.runtime.System');4 }) |( u$ g: E: C) Y7 F! L/ G
System.SupportProxy = SysMin;# n/ e' D3 l- K* U
# M8 F$ B# S7 K
/* configure SysBios to use the lower half of Timer 1 */
, P6 Z( a6 A4 A$ uvar Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');" ]4 `8 W0 x- l* r  J
var Clock = xdc.useModule('ti.sysbios.knl.Clock');* z) {1 ^/ [* ?
Timer.timerSettings[1].master = true;
- V' _. @2 y. I+ ]/ P/ \- I2 zTimer.defaultHalf = Timer.Half_LOWER;" }, \  u$ p/ d# I. l1 e
Clock.timerId = 1;
! f; E& G1 q% P: H
; n9 k/ s0 h# ?% ^* N, ^
  R& a* I4 a  \% c0 y8 x- |/*: q* C$ {/ H$ U
*  ======== Miscellaneous Configuration ========$ L- L; {; J5 w
*/
1 X; g8 C6 _6 U, P- x
+ M2 m. o4 h$ o, w# s/* set default diags mask */
! _# L; h9 t( O( Mvar Diags = xdc.useModule('xdc.runtime.Diags');
6 ?( h4 r7 \" ]  nvar Defaults = xdc.useModule('xdc.runtime.Defaults');
0 V5 `6 y. _5 }9 B. ?* T4 H( o# }4 C+ _, y, p
Defaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;
, f9 V& r7 r. V9 @  M; aDefaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;: O0 s9 a7 n9 D
Defaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;# z0 M- `- G) ^2 o
Defaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */
+ G& n8 [1 x: FDefaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */
; C- Y' |9 u% T2 yDefaults.common$.diags_STATUS    = Diags.RUNTIME_ON;
" g# v% |' u$ r  `8 ], N% sDefaults.common$.diags_USER1     = Diags.ALWAYS_OFF;
7 M- }5 J/ L; d( e0 c2 qDefaults.common$.diags_USER2     = Diags.ALWAYS_OFF;7 k, n3 f5 G7 c* y; k6 Y
Defaults.common$.diags_USER3     = Diags.ALWAYS_OFF;
$ u. C2 m( ^6 dDefaults.common$.diags_USER4     = Diags.ALWAYS_OFF;
& S1 ^  e. J5 j: XDefaults.common$.diags_USER5     = Diags.ALWAYS_OFF;4 w# H3 G  r. R! w- q/ ^2 Z7 D1 Y
Defaults.common$.diags_USER6     = Diags.ALWAYS_OFF;9 Y* t/ ^3 V0 f
Defaults.common$.diags_INFO      = Diags.ALWAYS_OFF;0 ~+ O/ P0 w4 ~! _: g2 \) {: s8 {
Defaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;. ]% A+ Y. }) U
$ T1 s5 B8 L8 ^+ z+ O- R- S) u
/* override diags mask for selected modules */& e- U( p1 b: v: u4 o1 X
xdc.useModule('xdc.runtime.Main');1 N! e# Z% P- k% e2 C& G2 ^( }6 p8 p
Diags.setMaskMeta(
; P, {0 u2 }4 S' }* v    "xdc.runtime.Main",
# `8 `1 F$ U7 z& b    Diags.ENTRY | Diags.EXIT | Diags.INFO,, @$ B3 k5 ?- `, ?$ H; S+ R9 o
    Diags.RUNTIME_ON
' e3 ~  D6 V' X$ r+ V);$ w% C& \" t' ~7 y3 R- [* S8 e, q
7 R8 ^2 k! s6 t# F! F
var Registry = xdc.useModule('xdc.runtime.Registry');% v. ^3 ~( L) S3 X- D- l# `
Registry.common$.diags_ENTRY = Diags.RUNTIME_OFF;5 ]; e; H! A$ P) V: Z, L
Registry.common$.diags_EXIT  = Diags.RUNTIME_OFF;+ \- Y, Y5 X" Q# x( M
Registry.common$.diags_INFO  = Diags.RUNTIME_OFF;5 e: Z/ B4 U6 u
Registry.common$.diags_USER1 = Diags.RUNTIME_OFF;- ]* d4 t3 o+ @) v' Z( B8 F: {/ g" v
# _* W# u' n$ w7 f
/* create a logger instance */7 c: {9 W' q: i; v
var LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');
2 y9 e' n( L# m- ?$ jvar loggerBufP = new LoggerBuf.Params();
7 f$ Y7 Q" e1 N# V/ h& |loggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */
& V3 \2 |) r# N1 p9 V- BloggerBufP.bufType = LoggerBuf.BufType_FIXED;6 N5 a% e% ]1 G( ~' R! _# i

/ I3 y5 T( C! [4 W2 b8 x: D! M9 }var appLogger = LoggerBuf.create(loggerBufP);6 M- o. D- |$ h, e% \
appLogger.instance.name = "AppLog_Core1";! `. ~1 o/ z9 b& u- Q  h' t: B2 |
Defaults.common$.logger = appLogger;& Q, S8 ]+ j( p2 b8 b1 R& x
Memory.defaultHeapSize = 0x8192;   
/ S- e8 I: F2 `Idle.idleFxns[0] = "&LEDStatus";9 C1 r+ [% U" Y9 D8 J
Cache.initSize.l2Size = Cache.L2Size_32K;
) Q' Z1 q8 n. ^" p* k8 F
# A1 x' v6 a/ P0 P- Z8 y" `
回复 支持 反对

使用道具 举报

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 */  O7 W! c* [5 U3 L0 Z+ u; R* B7 ^
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');( _0 {' d. s4 n
var heapMemParams = new HeapMem.Params();
  g0 u! B' n) Z5 [3 ]heapMemParams.size = 0x4000;4 Q' b/ o' L6 d8 ~9 `& m* D

) L" R; |3 r: T3 jvar Memory = xdc.useModule('xdc.runtime.Memory');
6 Q4 K, A$ ^( r" vMemory.defaultHeapInstance = HeapMem.create(heapMemParams);0 {  _6 f* m9 \% Y" g

0 ]% D, J! T3 Z! g7 }: ?6 x2 N% ~我大约calloc  每次共计大小为5K*16bits,
& _1 F6 q2 X- E  O5 Z而默认配置才0x4000、需要改大。
  X" }! @  H- S7 B
* _* Z, C* N8 w' `1 K
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
5#
 楼主| 发表于 2015-10-28 16:14:47 | 只看该作者
/* no rts heap */
- o  V* j7 \6 r; jProgram.heap = 0;
5 j; F* q) V4 H% e, O0 dProgram.argSize = 100;  /* minimum size */
7 @5 d9 i! d$ S9 D% RProgram.stack = 0xF000;                   //我改到F000  也不行
回复 支持 反对

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-12-12 00:16 , Processed in 0.042061 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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