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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2015-9-4 08:33:31 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
创龙工程师你好,我在OMAPL138单独调试DSP程序(使用SYSBIOS)时,在任务中使用calloc函数动态申请内存,用完后free,类似如下结构7 x( ?1 `! a6 f3 p
: o& Y( _- a. J+ O! z- A: D
    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //2563 {* l. n) u1 I- ]2 L1 R* K# h
- o; M& c! I7 M9 e7 [! L* g
其他程序段。。。。。
) q+ m$ k3 H" q
) ], d* N6 @' C* o& _   free(x_d);2 i7 t% z2 i) @; Q6 O, L* e' a

- K! x/ w$ P- S! a, l5 W使用DSP侧单独调试功能,验证动态申请没有问题,
3 w) o! V5 e" O7 t- f8 ^/ g4 v& w0 z' V+ k
但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。
- f+ l3 ~# Y+ ^: U  W

/ S& I- {# H# X
2 @! o0 p6 e0 P1 A/ e5 W' n( r6 F

4 Q2 |9 z7 P$ d) x5 L$ w6 A" u+ Q- p8 P' U8 U7 {$ u9 d+ E

/ ?6 O5 `1 q( L8 N6 L+ S, H  `7 p7 o) X( @3 z6 q

' S8 V" p( C2 h/ ~; a7 \# Z; V( q4 j6 e

, d. ?8 V! V' x. _( r
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2015-9-4 10:29:21 | 只看该作者
补充说明* S# b$ [3 r' O+ O
我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下
* g  F4 x& Z. Z% E1 w/ c/ b(不过疑惑的是,为何单独DSP仿真就没有问题呢?)6 ^$ O: b; G4 T7 q. S' u
. ~3 z  Y. |4 Q0 C8 [" Z
是不是需要在DSP.CFG中进行配置
  z1 D  X- h, z/ g6 N, M$ t我现在的配置为
: |+ U3 @$ Q; f( B" Y* L( @3 b8 d3 w; Z; m& g4 b  {
/*
2 T/ o0 I* H$ k *  ======== Operating System Configuration ========+ V3 {: B+ x2 Z
*/
) t" V* h4 v" U8 J( a; h9 ]1 u2 e/ U4 K
/* no rts heap */
9 f2 a9 D4 i! j" d0 O, E9 V5 lProgram.heap = 0;' a  g: ^; b' S! G' Q  Z
Program.argSize = 100;  /* minimum size */
% P7 \  W$ c4 T0 d4 z% rProgram.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大
" E- ^1 {  e+ }# `
( m9 Q0 i: n4 r4 J7 A& W5 y/* create a default heap */
1 s: i! P. u4 M. S, kvar HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
1 Q: a8 I) w! [' N& V$ M. ^, \- Rvar heapMemParams = new HeapMem.Params();
: R& t( _5 O& A8 u7 ZheapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大
: P# U9 `) F* W9 V" N0 D* C. f) k, @7 V' U& ~$ a* B: L/ R4 X( P/ |
var Memory = xdc.useModule('xdc.runtime.Memory');
3 g, i  t. P# z+ `5 Y  _) m) Z4 sMemory.defaultHeapInstance = HeapMem.create(heapMemParams);
7 ]$ a& x# r) Y7 C; R2 L" D
0 o% l4 ?% U, x2 w" o' X+ B) I/* configure System module */, t& |( t0 S$ x" N$ i% ]
var SysMin = xdc.useModule('xdc.runtime.SysMin');
& }* b" y+ z2 F& QSysMin.bufSize = 0x1000;, u2 V2 l' \% h; n% Q* z9 p
SysMin.flushAtExit = false;
5 }; l; {5 i1 I: b
# P! r* A% d5 x5 K  z( t5 ]! z2 u3 Vvar System = xdc.useModule('xdc.runtime.System');; p5 @$ o. T3 l- C" q0 R
System.SupportProxy = SysMin;
6 \4 S  H7 d/ {+ H' ?! l5 z1 d# q/ r( R( x' y
/* configure SysBios to use the lower half of Timer 1 */
: g4 M) J0 K0 |, L6 }$ o9 Nvar Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');
* u( c2 J2 m( O' Ivar Clock = xdc.useModule('ti.sysbios.knl.Clock');
' z# ~, p, y, y4 QTimer.timerSettings[1].master = true;
  J, L0 I* g5 ?& |& TTimer.defaultHalf = Timer.Half_LOWER;
4 c% X8 ]  b, m( y1 _6 o9 P' \Clock.timerId = 1;
4 U2 O) S* n& ^2 e% T$ B2 a$ X  {0 e% a1 ]' {; q" h" G

+ S! E7 J' h) g' z5 E$ c0 N* a/*% c- k6 s$ m/ z9 B0 R
*  ======== Miscellaneous Configuration ========
' y/ G3 Y+ A7 j0 B  { */
8 |+ Q7 Q9 U9 @7 l0 e3 m
2 g" A) b* a' \* h  e0 v3 i. D/* set default diags mask */
$ V# M- A7 t5 _var Diags = xdc.useModule('xdc.runtime.Diags');
( n# P6 G( _/ x% avar Defaults = xdc.useModule('xdc.runtime.Defaults');" I$ M# U2 F* H' l
. H- B: K  Y7 ^% ~/ |
Defaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;
5 c: E6 W$ k$ I  y* yDefaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;7 c$ I* ~/ r( _, c0 o; X2 V, a
Defaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;9 k% G8 M4 I# n
Defaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */
( r) i! T6 u& w* W0 m# uDefaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */3 t3 S% Z! @5 J0 {6 p& e: ]1 w1 y
Defaults.common$.diags_STATUS    = Diags.RUNTIME_ON;
2 V0 U# u) }/ a+ j- @Defaults.common$.diags_USER1     = Diags.ALWAYS_OFF;
3 @1 s0 S8 C. b* m/ zDefaults.common$.diags_USER2     = Diags.ALWAYS_OFF;" ~; w( T. o, |
Defaults.common$.diags_USER3     = Diags.ALWAYS_OFF;
) }$ c7 L, Y: ]9 k3 k4 z0 C' _Defaults.common$.diags_USER4     = Diags.ALWAYS_OFF;5 V: i1 o. E7 n7 x  |- O5 q+ z( h
Defaults.common$.diags_USER5     = Diags.ALWAYS_OFF;# X3 \% h1 R0 Y- {3 d0 _
Defaults.common$.diags_USER6     = Diags.ALWAYS_OFF;5 ~5 g+ p+ n% o" }, e
Defaults.common$.diags_INFO      = Diags.ALWAYS_OFF;1 x; V% G) ?  Q& H; B# H2 j
Defaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;
1 K3 q' r0 _$ Y; i6 }4 ^
2 e! N4 b/ W7 K  P7 I/* override diags mask for selected modules */% X0 s, r* F8 P: q
xdc.useModule('xdc.runtime.Main');  V$ z/ R2 b7 P6 ]# W  @
Diags.setMaskMeta(7 d' s; t$ d  w% c$ C
    "xdc.runtime.Main",
- Z9 t; O3 x$ h' A& g5 t    Diags.ENTRY | Diags.EXIT | Diags.INFO,. ~- O9 P/ W0 o) a# \
    Diags.RUNTIME_ON
& n8 y7 ^- e* M" U9 N& L8 v) W);( K) C4 b0 V1 H7 K' p- ]  b' @! u
7 s% E9 ]$ i8 O+ }3 V( S5 H" c# C
var Registry = xdc.useModule('xdc.runtime.Registry');5 s. E" T* h! C: U. r! i% o1 O& s
Registry.common$.diags_ENTRY = Diags.RUNTIME_OFF;
9 U- y* M+ s) S" b- p" ^) p# ZRegistry.common$.diags_EXIT  = Diags.RUNTIME_OFF;  ~  a9 h9 a/ a# ?
Registry.common$.diags_INFO  = Diags.RUNTIME_OFF;: d/ y9 V3 P' u6 c0 h! B6 [
Registry.common$.diags_USER1 = Diags.RUNTIME_OFF;; v& L. o$ x" D7 [2 j& K
6 t$ b' K# D. F) [
/* create a logger instance */% I1 j' r' @$ V; v
var LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');
1 j/ s& H) K  qvar loggerBufP = new LoggerBuf.Params();: T/ r! `5 b3 w
loggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */
. C" k/ V' o) a! f- FloggerBufP.bufType = LoggerBuf.BufType_FIXED;
4 ^% V& f' X6 ?2 u/ x7 f8 O/ a: b( x* f* S7 b. z0 R( T
var appLogger = LoggerBuf.create(loggerBufP);! E" ?# \$ d3 K
appLogger.instance.name = "AppLog_Core1";
$ M' L$ L8 V0 v9 o( c  i, g  R7 lDefaults.common$.logger = appLogger;1 H% F1 X  @+ J+ i0 h
Memory.defaultHeapSize = 0x8192;   
' H* B- b: e$ cIdle.idleFxns[0] = "&LEDStatus";
' M2 W& E" R6 Z) e% gCache.initSize.l2Size = Cache.L2Size_32K;, v' d( f2 k% u4 g. o
: a# T5 q( \( T/ a$ i
回复 支持 反对

使用道具 举报

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 */' \) l3 d1 B/ h7 ~9 V
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');0 a! d! g0 e  v
var heapMemParams = new HeapMem.Params();6 n+ m# A- ^- A0 B' Z
heapMemParams.size = 0x4000;
" n: f& ^9 i* F0 I; C( b" n8 x; R  c; m% I/ j1 W$ S! V4 i9 W
var Memory = xdc.useModule('xdc.runtime.Memory');
  c3 b7 g" g: o- IMemory.defaultHeapInstance = HeapMem.create(heapMemParams);
; n# s( C: R6 B
: n( B7 A$ m) Y2 M# i* ^: b/ G我大约calloc  每次共计大小为5K*16bits,
! u; m, ~  B# P2 D而默认配置才0x4000、需要改大。
, I6 I; |) i) R/ m; ?0 {) ~! H7 m& t! x* o
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
5#
 楼主| 发表于 2015-10-28 16:14:47 | 只看该作者
/* no rts heap */
$ V& Z. I4 Q" L" T! X9 bProgram.heap = 0;
0 k- a3 L( f) [6 {% B1 s. R! |  G1 BProgram.argSize = 100;  /* minimum size */1 O9 F" S/ p7 V( X, `1 b
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-8 06:41 , Processed in 0.045570 second(s), 27 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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