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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

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

2 W' f: C* O9 @    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //256
0 |; M/ I. l  m/ x: N! g
- W' W; Y  S/ Q2 u其他程序段。。。。。
; J" t5 S! Y2 Z( T. M 4 ]% @8 J( O3 x- k" h
   free(x_d);
/ s. S* F( e+ Z$ v7 j. D7 j( W
使用DSP侧单独调试功能,验证动态申请没有问题,: b7 |* U) S8 f
% L& [0 g" b+ c5 V  F
但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。) C$ W) O3 M- i
. L& c7 I: ~, m7 G/ u/ s& h
; L  L% [7 W' e8 m; K
; T+ f7 ?; ]) X  s6 c

5 H# s& L' f$ J+ J) ~3 p/ @0 ]2 Y( i. _  u$ E9 m
  M5 A$ e1 d; q) K/ g

" A0 |: [! l6 l6 d% T& v  W# C; o( x) x9 W; |6 E
' j/ o. D9 s$ Y* u. U

8 O1 u. |5 f: ?( r
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2015-9-4 10:29:21 | 只看该作者
补充说明, }: o$ l" o. N8 [9 B& Z; R8 [7 {
我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下& l! ?( s. ?5 q, P
(不过疑惑的是,为何单独DSP仿真就没有问题呢?)
2 P7 K* U; _' R' a" }# d) m) h

! f, g, ]1 A  J6 k是不是需要在DSP.CFG中进行配置9 z2 b) F  D8 @" K0 I& i1 K8 [& C
我现在的配置为
  i; B# ?4 z; e6 o* K2 [
& P0 x. \, S& S8 t* L6 S/*( f2 U4 j2 Y# N* u  G# k& C
*  ======== Operating System Configuration ========8 Y: A5 t  i: ]* \( x  ^: @
*/
6 y: M, f# v7 S# m. g' h% W; N/ v+ ~5 N- P, t: p3 ~. v, t
/* no rts heap */
/ L9 @) `' J" uProgram.heap = 0;
6 _5 b  }9 |7 f, K) ?+ ^) e, HProgram.argSize = 100;  /* minimum size */) p0 R0 c* @& @5 x- w
Program.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大
7 V% e# _6 |$ j
+ p$ a4 r% _+ E6 V/* create a default heap */$ k' ^/ H* F6 h
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
% t4 B( j) T6 xvar heapMemParams = new HeapMem.Params();
! c* k5 `5 [  p( IheapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大
6 c# ~2 q1 K/ @& y, d8 P% o- F) ^& Y3 M* x) m. G$ v" ]( a
var Memory = xdc.useModule('xdc.runtime.Memory');
1 }% f& }' g2 s6 d- z' q* R+ rMemory.defaultHeapInstance = HeapMem.create(heapMemParams);9 w: _+ G/ T  b2 Q7 R
7 [" V% @) n/ l" E: a* y* Y
/* configure System module *// b, T* k' l$ U4 H- U0 M* c5 r8 z% W
var SysMin = xdc.useModule('xdc.runtime.SysMin');$ y: G1 ?0 h  R7 Y! Y$ e
SysMin.bufSize = 0x1000;+ s# D- r! b3 J4 N3 t
SysMin.flushAtExit = false;3 \1 a0 ?4 _! M' y3 I/ L# O9 E
) E' r) V; ?7 K: x+ q
var System = xdc.useModule('xdc.runtime.System');
) {3 P3 M' R6 s! k2 q( zSystem.SupportProxy = SysMin;
- s# y" G% Y9 X5 T* R: R0 r9 {3 }6 L. @/ W: h* O1 }; u
/* configure SysBios to use the lower half of Timer 1 */% Q- Z! i9 U$ h- {1 G
var Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');) y' P" u; t" D/ ~1 W" Y0 E# m
var Clock = xdc.useModule('ti.sysbios.knl.Clock');1 W( `- b. X0 J
Timer.timerSettings[1].master = true;
( ?3 L1 n- E! {Timer.defaultHalf = Timer.Half_LOWER;
6 w* H, f$ T: h# AClock.timerId = 1;
4 `* v# c* s5 b: z0 C- V5 _" \) C, S5 v. ~( \9 f

& V' {9 F# U7 g/*
7 m3 a. Z; ^% G. h5 Y8 [$ w3 J6 [, ~ *  ======== Miscellaneous Configuration ========: e$ I; {4 v& E- W
*/
! e' D: u/ C$ J: y- s* F6 y7 S# u* O, _) X! x3 A
/* set default diags mask */
5 K$ O3 x- y8 R- G' Jvar Diags = xdc.useModule('xdc.runtime.Diags');
/ T  e6 r) l7 U% O* f! G. P. m( Xvar Defaults = xdc.useModule('xdc.runtime.Defaults');
! o" i5 M+ c  j  j% E* n3 K8 X. e/ H' t8 ]6 d* l- w5 g/ F
Defaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;
) g; i; b( ]7 g' c. j1 K/ @/ {  ODefaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;
  O5 n0 W( y. r. C  T+ f; D( CDefaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;
- q4 \3 w' e) RDefaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */
/ B/ ^: ^( Y) {8 i' J! uDefaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */6 `& n8 M$ y( M) Y2 s0 K
Defaults.common$.diags_STATUS    = Diags.RUNTIME_ON;# d$ ]0 [$ q, }0 v* O
Defaults.common$.diags_USER1     = Diags.ALWAYS_OFF;; r% o& t5 E9 U. i$ b0 z8 z
Defaults.common$.diags_USER2     = Diags.ALWAYS_OFF;. N% w5 ^# @- ?, q6 u
Defaults.common$.diags_USER3     = Diags.ALWAYS_OFF;9 b. @1 A' W, M; q5 w$ N2 j
Defaults.common$.diags_USER4     = Diags.ALWAYS_OFF;/ \; s) _8 X- t8 l3 y
Defaults.common$.diags_USER5     = Diags.ALWAYS_OFF;; r# Z+ M( S# A5 o  e
Defaults.common$.diags_USER6     = Diags.ALWAYS_OFF;! e2 U3 t/ |* `3 @  A8 C( C  ~9 t/ k
Defaults.common$.diags_INFO      = Diags.ALWAYS_OFF;$ p  k# N* A/ m$ s3 P
Defaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;
0 }8 m: W7 n: s0 j4 F. k6 ~+ q) }( M  K6 V
/* override diags mask for selected modules */
' ~. \3 W0 f0 \; |xdc.useModule('xdc.runtime.Main');
# j7 n% l+ W* g, S4 w+ ]Diags.setMaskMeta(9 [) n7 i6 K: X, p
    "xdc.runtime.Main",
- M9 x% G9 d: J6 y4 M    Diags.ENTRY | Diags.EXIT | Diags.INFO,
% K0 A- _9 X- O3 F5 ^0 P" e3 \    Diags.RUNTIME_ON
  }( m) r2 B% l$ j);4 ^+ X1 |; o4 T" J
& O) Y" |6 S8 ^& ?2 G! @2 H' k
var Registry = xdc.useModule('xdc.runtime.Registry');' [) M. L0 E# z9 R
Registry.common$.diags_ENTRY = Diags.RUNTIME_OFF;# y- I  Z6 S5 i+ ^
Registry.common$.diags_EXIT  = Diags.RUNTIME_OFF;0 w: j. {' ]* E! D
Registry.common$.diags_INFO  = Diags.RUNTIME_OFF;
9 V: c. Z( A$ i4 t9 B8 {* s4 V  f5 lRegistry.common$.diags_USER1 = Diags.RUNTIME_OFF;
, J+ o/ [3 G) C6 J9 e
+ G  {5 B$ ?# S0 e, M3 e  {/* create a logger instance */
  ]' p; r% x4 |. L5 W2 ^" Pvar LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');3 V1 H) h' S5 y" @8 C% k
var loggerBufP = new LoggerBuf.Params();: S6 X9 \: c: @9 }6 k2 X
loggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */% q; M# A/ a1 d( H
loggerBufP.bufType = LoggerBuf.BufType_FIXED;
8 n. w, K/ ^1 i
+ r% h% _! S1 U+ O. Gvar appLogger = LoggerBuf.create(loggerBufP);9 `  B9 d( K# j8 f
appLogger.instance.name = "AppLog_Core1";
6 h7 U) j) U2 {; h! Y5 \  }2 gDefaults.common$.logger = appLogger;
' s( H7 O8 B9 e+ R6 D! tMemory.defaultHeapSize = 0x8192;      {8 h. L1 K8 o( }! w) v! `& G& G
Idle.idleFxns[0] = "&LEDStatus";/ I! ?+ r7 {! [9 N# ?6 ?
Cache.initSize.l2Size = Cache.L2Size_32K;$ `. L) I( Q6 J; z

5 m5 S8 x; A$ r+ P
回复 支持 反对

使用道具 举报

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 */
5 B4 l) U+ M/ ^2 G3 tvar HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');* Y8 M5 a7 q, a1 @" r* a$ M
var heapMemParams = new HeapMem.Params();. I) R" |; a5 Y$ s7 u7 B& F
heapMemParams.size = 0x4000;; H  n  A( H4 `" b, y6 G
4 q: n/ g* \" d5 S$ G5 G6 O" ?
var Memory = xdc.useModule('xdc.runtime.Memory');. e: ]: Y% y  a: w
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);  W7 O# H9 k3 W2 U# t0 P

4 {- L: A# k; @2 r+ _8 |2 ~我大约calloc  每次共计大小为5K*16bits,' v+ G+ ^; e4 b0 K& m
而默认配置才0x4000、需要改大。7 _8 p% y1 X. X5 Z( I# W
4 w# |. N0 O3 a: V- E* [+ O, w
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
5#
 楼主| 发表于 2015-10-28 16:14:47 | 只看该作者
/* no rts heap */
8 @* H4 f, c  F+ s' j% SProgram.heap = 0;# O+ t% ?% }7 X  Z$ ]& J
Program.argSize = 100;  /* minimum size */
0 Q2 H3 e" t+ S' |. OProgram.stack = 0xF000;                   //我改到F000  也不行
回复 支持 反对

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

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

使用道具 举报

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

本版积分规则

点击跳转“创龙科技服务通”

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

GMT+8, 2026-3-1 19:33 , Processed in 0.042601 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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