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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2015-9-4 08:33:31 | 只看该作者 回帖奖励 |正序浏览 |阅读模式
创龙工程师你好,我在OMAPL138单独调试DSP程序(使用SYSBIOS)时,在任务中使用calloc函数动态申请内存,用完后free,类似如下结构
) w4 F  S1 G1 z4 D' j, `& \, @5 ~/ K, m9 u9 ]
    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //256
5 ^0 B/ D  Q4 w& @$ j
2 A' f, z1 ~; f6 i) f# }1 |" G其他程序段。。。。。4 t* ]3 x% b/ \- R1 u* w3 }
' b6 H6 y7 h; N. H# s
   free(x_d);" i' H( j4 q1 N- p8 k' a
; V; U. C* u; p. x8 N7 V' c
使用DSP侧单独调试功能,验证动态申请没有问题,
: G* h2 b& ]8 R9 o
3 }4 \0 d7 b2 S1 K% d; w但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。
: z! z, @8 F* h' v/ f

4 O) T" h& V2 ^& X: I0 ]3 o! Q* q( ~5 O7 h  X
# `/ b( g" P3 n6 l" D7 `

, d1 e+ w( J* E0 {" I' z5 `7 e+ q9 T1 [+ j

  k+ F& S) e3 L, X2 n2 x+ V$ y" Z; [1 v) p- A; `
$ e( K+ R; M! F7 d

' I6 H+ |9 W% x7 C5 j  \# j/ Q9 A8 z3 a( I9 B/ v$ T
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

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

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
5#
 楼主| 发表于 2015-10-28 16:14:47 | 只看该作者
/* no rts heap */
4 A1 g/ C4 E" k) P5 vProgram.heap = 0;4 m: @5 U& u; m" L% X. ]$ z) H! d
Program.argSize = 100;  /* minimum size */( g. a  D$ k* v* T
Program.stack = 0xF000;                   //我改到F000  也不行
回复 支持 反对

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

积分
1093
地板
发表于 2015-10-28 09:51:31 | 只看该作者
/* create a default heap */7 }- C' F& i" d+ K5 B) E. G
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');* L) d0 H  T8 b
var heapMemParams = new HeapMem.Params();8 p) A1 ^! d- ~* f( r
heapMemParams.size = 0x4000;' F& R6 O$ r" s  @+ ?/ A
  q. f& V! m1 J9 G. t) g7 s! m
var Memory = xdc.useModule('xdc.runtime.Memory');; V  u8 B0 X, X
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);
" |, c3 z! ?+ P% y8 D% Z* V. z5 z6 K1 o' H
我大约calloc  每次共计大小为5K*16bits,5 F  Q, u/ C% H
而默认配置才0x4000、需要改大。! F. ~+ i% Y( e
9 ~% S+ K' K- f0 A4 v7 a( K, r
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
板凳
 楼主| 发表于 2015-9-7 15:38:00 | 只看该作者
为什么没人回答呢?   大家都不用动态申请内存方式吗?
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2015-9-4 10:29:21 | 只看该作者
补充说明
0 `7 V  B. K2 P+ w( S9 m  `% T我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下/ D% }6 ?+ I& `3 _" z
(不过疑惑的是,为何单独DSP仿真就没有问题呢?)/ v) X! [1 L( E1 u* a
7 i4 g9 P( O3 E- b
是不是需要在DSP.CFG中进行配置
) S. z% L& L+ i9 f我现在的配置为$ R4 O: N3 B+ }9 h

% b# @2 ^: [5 n8 \- t/ n7 `/*
$ e7 z0 f; }- E; U$ C4 W/ D *  ======== Operating System Configuration ========, ?1 U) A" o: l
*/) T5 @7 q; J1 y6 ?

4 C6 ~6 U0 d2 W1 s/* no rts heap */
/ ^5 P+ W5 }  i/ v( K: YProgram.heap = 0;
) _; _3 a6 }, ^% ?; v7 `Program.argSize = 100;  /* minimum size */
- t( x* r& v% i; b/ S, S8 k# aProgram.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大
+ [) [( @8 C0 G6 o/ K) |
6 R! j, S+ Z* h  z2 b/* create a default heap */
3 R0 r9 a$ ^2 w8 Z: w: hvar HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');% k7 L4 S( c2 f# N
var heapMemParams = new HeapMem.Params();# h+ t8 M9 q; A3 ]6 D8 j: p+ M7 l
heapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大. }7 {" i9 j& _9 ?0 s$ ]" T" P" j
% G1 g8 U& ~0 P$ J4 q
var Memory = xdc.useModule('xdc.runtime.Memory');
9 M. c/ F3 ^% EMemory.defaultHeapInstance = HeapMem.create(heapMemParams);
5 U9 S( U7 Q; J0 k; L) N! j: _. x3 n% z
/* configure System module */
' U/ M( |) Y% H( lvar SysMin = xdc.useModule('xdc.runtime.SysMin');
4 D8 a1 `. N/ L- KSysMin.bufSize = 0x1000;
( a- O1 S: \0 u# d- M6 }SysMin.flushAtExit = false;
* z. x, A$ h5 d9 K2 u$ k& Y, Y, d7 \  b% E/ z! t
var System = xdc.useModule('xdc.runtime.System');2 o) k8 n2 h- R: {9 ~6 I
System.SupportProxy = SysMin;
' C& |  y7 g7 a/ ~6 j4 I2 v, a3 ?6 A( T6 r' C" z' E8 W
/* configure SysBios to use the lower half of Timer 1 */
( d5 Z. `& L- {var Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');
8 z+ w# `+ i" ovar Clock = xdc.useModule('ti.sysbios.knl.Clock');
  S; d* ~, I2 LTimer.timerSettings[1].master = true;
) @5 T3 B: r2 w  oTimer.defaultHalf = Timer.Half_LOWER;
  p! _  B! ^" X7 {. P# gClock.timerId = 1;
! o5 O- g8 u$ n6 I
. ]' D  @& E3 i  v3 q3 j6 ]( l8 ]: f" G3 y$ V' Y1 c/ r
/*, w7 u4 M$ a  F& n( x
*  ======== Miscellaneous Configuration ========
* {2 G% |- F& s- ^ */  }( k+ q: ]0 n4 K' q9 y
3 W8 a9 n; Q- ^# q( ?8 t
/* set default diags mask */
; O; p+ a  Y1 h5 Y- Gvar Diags = xdc.useModule('xdc.runtime.Diags');
9 }: D" Q$ V% t7 O4 D. V. M5 Cvar Defaults = xdc.useModule('xdc.runtime.Defaults');
+ F$ J1 ~3 H$ n  c% J: @# O8 R- D  ~9 `0 y: f
Defaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;
8 J: x6 m1 e- V9 B( ]Defaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;
0 S  \3 O! d) ~. W3 L, S( X0 lDefaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;
1 l7 }& |7 c  Y  a1 |% v" YDefaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */
/ M3 N( L& j! F% [Defaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */
6 ]" o: o  M7 I6 C! P0 R1 eDefaults.common$.diags_STATUS    = Diags.RUNTIME_ON;
$ c; s; ?- X! e3 f6 D1 [Defaults.common$.diags_USER1     = Diags.ALWAYS_OFF;0 F9 u; \, X; F* I+ v
Defaults.common$.diags_USER2     = Diags.ALWAYS_OFF;# q. H  ?  V4 o
Defaults.common$.diags_USER3     = Diags.ALWAYS_OFF;
7 Z7 Z/ A8 A4 u# E5 N7 w# B' p' ZDefaults.common$.diags_USER4     = Diags.ALWAYS_OFF;; ?% K( {! j: [7 t! W8 Y
Defaults.common$.diags_USER5     = Diags.ALWAYS_OFF;& T; p" E9 B# c! ~0 s1 U
Defaults.common$.diags_USER6     = Diags.ALWAYS_OFF;
; Y+ w( X) Y. V0 r( V; k* ?! {. gDefaults.common$.diags_INFO      = Diags.ALWAYS_OFF;0 T2 ?3 V# t. |  v$ z' l
Defaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;* h* @! h; {6 c6 A7 v: ?
; x: K6 G+ M# g1 h( G' c& i
/* override diags mask for selected modules */
8 F% T4 g2 M0 \( f' cxdc.useModule('xdc.runtime.Main');
, ?/ j6 G2 C( ~Diags.setMaskMeta(
) [: d1 x5 J9 d& R8 c8 A    "xdc.runtime.Main",
4 C& `$ K& m( [9 G3 j! M    Diags.ENTRY | Diags.EXIT | Diags.INFO,% L! O9 E. L- V: ~: @. _' ]
    Diags.RUNTIME_ON
$ T% F; Z: a5 ^, \, d$ n- k: C);. N/ `1 v6 O7 |! }
1 `, B$ u' t. {+ s7 ^
var Registry = xdc.useModule('xdc.runtime.Registry');" q  U6 d& X8 @9 c! B# K* e' g
Registry.common$.diags_ENTRY = Diags.RUNTIME_OFF;
" ]3 T/ @/ L3 ~5 B& ?# N7 }Registry.common$.diags_EXIT  = Diags.RUNTIME_OFF;5 G# U, Y2 g6 z) J& p5 p2 d! a
Registry.common$.diags_INFO  = Diags.RUNTIME_OFF;
8 h. u3 o3 e* `6 E/ f9 {4 KRegistry.common$.diags_USER1 = Diags.RUNTIME_OFF;) ]  ]) F0 A2 n9 ]$ m+ t

: m& S/ e2 ?1 a! ~/* create a logger instance */9 M5 M! N! K' W: k  l9 J
var LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');
# q+ y7 P+ `1 mvar loggerBufP = new LoggerBuf.Params();
8 ]$ u. q9 ?8 m) m3 N* Y1 vloggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */- W; b4 K8 X- A$ K# E9 a
loggerBufP.bufType = LoggerBuf.BufType_FIXED;
- v# M. U9 e8 Y7 x9 b8 r# G* J' O: D9 r! z
var appLogger = LoggerBuf.create(loggerBufP);
6 H- M, ?; U: x0 @0 I* OappLogger.instance.name = "AppLog_Core1";: t$ Q6 t" |6 N: h; z: o  \& c
Defaults.common$.logger = appLogger;* H: D8 x/ [. t3 j8 g) b4 s6 C, H: E7 K
Memory.defaultHeapSize = 0x8192;    + i% M0 H7 q4 V8 |  a% W/ n5 v
Idle.idleFxns[0] = "&LEDStatus";- d8 q* |- l3 X, C1 v
Cache.initSize.l2Size = Cache.L2Size_32K;6 ]2 o2 Y' O1 {- |$ N
! R" B0 u4 T6 ~
回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2026-2-6 23:58 , Processed in 0.041972 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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