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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

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

( I+ P% D6 ~' U" Z, a7 m) q    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //2565 R# Y9 `, R& r, {' c
# i& Z2 a$ a% Y& s2 e0 C
其他程序段。。。。。
! i6 X9 _" G- X9 e* I+ B: M# Y0 D3 H 0 R$ L, w+ ~3 v' t' ]% Z
   free(x_d);8 u( p  d, W. ?  n3 b9 v

+ Y1 W3 O4 [4 k/ s使用DSP侧单独调试功能,验证动态申请没有问题,
  ?" N  ?  D# ^! k+ ?1 j
# N  g2 A4 F( N$ r& ]* Q但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。! c% @' c+ P2 r3 K

/ k# {1 n0 i% a2 k0 g+ h. V6 `# G) o; s
5 B+ x0 b( |% M; a& z
, Z$ \  B$ b7 i: c3 ?; c' {
1 y0 G9 b; G- }! A8 {3 ]
( E( v  ]7 z+ K3 g: H
9 Q" G+ c& q( U1 O) i
& i1 h: G# ]! ?; D. o! h
* `: r: H% W; `6 q

! s  o' x7 d1 C" u0 l) t
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2015-9-4 10:29:21 | 只看该作者
补充说明" B, x6 {* V4 g! D5 R
我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下
% g1 I7 {. ]' c0 W, f. W8 L& R(不过疑惑的是,为何单独DSP仿真就没有问题呢?): w4 @# D3 N! r' O

2 f7 @5 X( `* d) ]6 S' U是不是需要在DSP.CFG中进行配置
3 K3 v1 `. R2 ~3 n/ g' ?4 S1 H我现在的配置为. |# @1 T' M+ C# i
$ ^$ |/ k: I. F& {/ e7 b
/*
$ V3 s% n4 e9 u" N' P *  ======== Operating System Configuration ========
8 G3 K. Y* C1 N6 Q  }0 b7 p; e */
& K  O$ F  |+ J  X- i
) X, ^6 D: M" R% j0 J# F$ x/* no rts heap */
3 r# ]7 C8 [+ W: \Program.heap = 0;0 U* G4 G# X1 X. h! @
Program.argSize = 100;  /* minimum size */# B" V9 L" g- [- ~3 }8 P
Program.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大
) w0 q) |& }; v  f/ Y2 P8 K6 f7 T
" Z- Z) K) {+ W2 f; c) B9 l/* create a default heap */
7 e" ]* x/ ?* Nvar HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');/ S  Q" j. b- H+ {9 @' @
var heapMemParams = new HeapMem.Params();
6 @: B- L5 o* C. l4 ~% G' P8 e5 E+ f) uheapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大
( v$ ^7 R8 c; d' `
. p. [- e) F8 q4 D
var Memory = xdc.useModule('xdc.runtime.Memory');
. c% H# N5 S; q' v1 p- ?4 w  KMemory.defaultHeapInstance = HeapMem.create(heapMemParams);3 H7 l8 S9 X  c* C
1 h$ j: P  D0 N$ s+ G; }8 l
/* configure System module */, Y+ @+ B2 q; S: Y. K7 K
var SysMin = xdc.useModule('xdc.runtime.SysMin');6 i8 x; o  ~2 q! G- P; v) `
SysMin.bufSize = 0x1000;5 o$ C8 ~% @1 x% r: M
SysMin.flushAtExit = false;
2 E. w7 v0 J( H
1 f7 z6 r- F1 |- u0 Kvar System = xdc.useModule('xdc.runtime.System');
5 t  _3 O( b  z! p! `" ]System.SupportProxy = SysMin;8 ~) L/ r  W) X; D2 |) K) k/ d
1 l# U* O1 G: f" X/ W* x
/* configure SysBios to use the lower half of Timer 1 */& m* F+ {5 M0 g
var Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');
* {6 ^! \9 i+ h$ a7 yvar Clock = xdc.useModule('ti.sysbios.knl.Clock');
& E& A/ N/ J! [Timer.timerSettings[1].master = true;: N! `/ f8 I- q# N6 y& _) @
Timer.defaultHalf = Timer.Half_LOWER;
7 q. K, d% O* F+ ?Clock.timerId = 1;
$ _! U! q1 u# f" l
, U9 T' H5 p; Y: s$ W
! o6 O* `, j6 e) x, t$ ^/*1 ^! y' s! t7 ~, p: q! q/ X
*  ======== Miscellaneous Configuration ========( e: W, \9 R; A8 n
*/% r1 {' I6 K) H& W$ E8 Q2 S

7 l4 K0 {6 w. F/ _, Z$ S/* set default diags mask */
3 c& y! t. e7 Ivar Diags = xdc.useModule('xdc.runtime.Diags');, j2 _- d! }  k# x
var Defaults = xdc.useModule('xdc.runtime.Defaults');
8 P# N' C( F4 x' A5 \* {
, |+ S7 I0 @8 {  rDefaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;9 o/ l5 F4 e- X. T9 L  F
Defaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;
0 @3 l9 m) L, }$ J0 Z4 ?Defaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;# W8 j3 y1 _: u% X9 V$ h
Defaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */
$ ^+ G! y0 v$ n' p6 NDefaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */
0 M. W: K1 r  Y- O+ M" gDefaults.common$.diags_STATUS    = Diags.RUNTIME_ON;
; \; D5 _; _# K% aDefaults.common$.diags_USER1     = Diags.ALWAYS_OFF;
9 N8 ^) d* R+ SDefaults.common$.diags_USER2     = Diags.ALWAYS_OFF;
# A/ Y1 \+ w& ^) gDefaults.common$.diags_USER3     = Diags.ALWAYS_OFF;# `7 _& p6 ^9 L! B( x& f
Defaults.common$.diags_USER4     = Diags.ALWAYS_OFF;1 s# @3 F  c1 h4 h7 P
Defaults.common$.diags_USER5     = Diags.ALWAYS_OFF;6 h/ q+ J. y! Q# W
Defaults.common$.diags_USER6     = Diags.ALWAYS_OFF;6 S) f( @& A$ Y" }) H
Defaults.common$.diags_INFO      = Diags.ALWAYS_OFF;8 k4 y# I+ b3 m9 c+ v1 e
Defaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;
5 F# |( Q! ~3 M9 j( h2 {
. r9 z" D! Q  ]$ Q2 G& X5 p* u/* override diags mask for selected modules */
! F8 g/ [& S& C) |$ Kxdc.useModule('xdc.runtime.Main');
6 y2 f) b* E: g" V# {1 g5 s( t  V9 h; CDiags.setMaskMeta(: t" B5 x1 e/ z! |
    "xdc.runtime.Main",
7 o4 ^. [/ I' S" t4 {    Diags.ENTRY | Diags.EXIT | Diags.INFO,3 v/ a( F' b  L( |: i
    Diags.RUNTIME_ON$ u$ k" P0 m% d9 R# n
);0 T9 a2 `6 c% V: R

. j  r- z4 u: n# z3 Z4 b/ rvar Registry = xdc.useModule('xdc.runtime.Registry');( @' [+ u" ?7 J) j- A
Registry.common$.diags_ENTRY = Diags.RUNTIME_OFF;9 g& K" z: W1 G# }1 {5 Y% G( E; e
Registry.common$.diags_EXIT  = Diags.RUNTIME_OFF;
' `& K$ ?% I4 q; O; GRegistry.common$.diags_INFO  = Diags.RUNTIME_OFF;5 ?  u1 x5 e# K; A4 r+ j) V
Registry.common$.diags_USER1 = Diags.RUNTIME_OFF;/ d! B8 L8 \6 M* z* t

/ w2 A7 D: q8 Z/* create a logger instance */- G- x7 n/ J# n9 {# N
var LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');) @# \: Q9 C: }6 X+ M3 r
var loggerBufP = new LoggerBuf.Params();
0 P( T* {( Q3 K: h2 e: ?* iloggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */
: f. B1 N8 M' V. ologgerBufP.bufType = LoggerBuf.BufType_FIXED;& `6 W3 X/ [) Z% [0 H+ Z
- i9 t6 X. e, @. [- {; Y' ^" S
var appLogger = LoggerBuf.create(loggerBufP);" {4 h6 B! B7 x: g
appLogger.instance.name = "AppLog_Core1";' x  g4 A+ _9 W: j3 X
Defaults.common$.logger = appLogger;
! `. W: W9 E* x" lMemory.defaultHeapSize = 0x8192;   
5 }( E$ l0 j) m) XIdle.idleFxns[0] = "&LEDStatus";0 g8 @4 [: b; L- H( Y( b
Cache.initSize.l2Size = Cache.L2Size_32K;8 s& w* q/ ~# h2 i9 N3 @, h

. a9 k9 c( l' W3 ~& _2 B; t0 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 */, X+ j5 x) |6 t( Y$ S6 ?
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
: q% H! {% ~8 T4 x! I" v' j( Yvar heapMemParams = new HeapMem.Params();- ^( P4 G( p* `; A+ T( G+ }
heapMemParams.size = 0x4000;- r, M) l# Z+ i" K* d
! ^* @! n8 ^) x9 l# d
var Memory = xdc.useModule('xdc.runtime.Memory');
4 K# B% s& m* p( I1 ?' n) z( ~Memory.defaultHeapInstance = HeapMem.create(heapMemParams);
% f( b6 B; j0 _3 H/ O/ O+ O
: L: }3 z3 r8 e我大约calloc  每次共计大小为5K*16bits,
; O6 j1 A' g4 J  d$ h' F而默认配置才0x4000、需要改大。8 }: }- }+ U1 n: L; v# x

) r' [; [1 d) P: o/ C2 K5 H6 {( D
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
5#
 楼主| 发表于 2015-10-28 16:14:47 | 只看该作者
/* no rts heap */
' Z: w+ ]. d  z0 h, m# m& M4 v- XProgram.heap = 0;4 T" S1 E6 u! g+ k6 L0 ?: C, i
Program.argSize = 100;  /* minimum size */9 x2 k# [6 K: |5 e2 @
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 05:05 , Processed in 0.041251 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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