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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2015-9-4 08:33:31 | 只看该作者 回帖奖励 |正序浏览 |阅读模式
创龙工程师你好,我在OMAPL138单独调试DSP程序(使用SYSBIOS)时,在任务中使用calloc函数动态申请内存,用完后free,类似如下结构
+ E1 E% b& b* f" z4 w! s9 b5 P1 i& G
    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //256
+ Q) @  q: K: t3 l1 G
+ `6 f# @4 C. u其他程序段。。。。。$ w' n" ~2 q& m! m) q/ z
& R! {( Z3 ?7 }8 l. J# v* w
   free(x_d);5 `- M& s9 t+ j
2 ?* a8 W  N- Q0 _8 t
使用DSP侧单独调试功能,验证动态申请没有问题,2 O# O: n2 ~( }3 i% E! _

- a  h7 f7 p! \8 X" S& w/ \9 ]) S但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。/ k0 p6 ]8 ^! ^; ~0 l1 y- ^
6 _1 q2 t+ m. O9 F' s7 \
9 j- `+ h9 h6 U+ x5 o
5 l  w0 ]5 _; y9 j. n

1 _: x' Y# r- C- w1 d  ~  W/ p8 B; w
6 o7 [0 _6 D4 j$ Q# |& }! }
6 `6 o$ {$ l! h
0 {, E* g" ]# S' \! i5 Y7 `  j% N: D. o7 h, E6 u% U1 c0 K1 t
3 y( O3 `: w( I8 I- o, ^! H1 @3 _

8 l3 B5 \) ~: i$ k9 ~$ w$ B9 B
分享到:  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 */
6 x* {  d2 s7 `& }) H5 ~1 ?0 a# u. ~Program.heap = 0;
4 D" N# u+ o% w( E4 t( }Program.argSize = 100;  /* minimum size */
7 x2 d. m7 g+ a7 QProgram.stack = 0xF000;                   //我改到F000  也不行
回复 支持 反对

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

积分
1093
地板
发表于 2015-10-28 09:51:31 | 只看该作者
/* create a default heap */
. V3 ?* f/ @8 C# J# R8 avar HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');/ A' h& C/ _* e! O& R$ I
var heapMemParams = new HeapMem.Params();, H: Y: i7 z7 Q5 n
heapMemParams.size = 0x4000;- Q. k+ E. J* \

# O1 K/ E* c. N4 ~) B8 qvar Memory = xdc.useModule('xdc.runtime.Memory');
+ I6 t7 {9 C3 v0 D5 ?" VMemory.defaultHeapInstance = HeapMem.create(heapMemParams);
7 Z  `: L/ E: ?: _
) i% D! K% w1 z$ z# S; b4 q我大约calloc  每次共计大小为5K*16bits,- Q. q( z+ d; q8 \0 {
而默认配置才0x4000、需要改大。  |! v1 l+ d( A' x% p# p  d- F% w
6 z+ `" S0 |/ v
回复 支持 反对

使用道具 举报

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 | 只看该作者
补充说明
- i3 T  F0 o" c5 j0 i我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下
  i, f( Y: \- b: ^! h9 k* u& g(不过疑惑的是,为何单独DSP仿真就没有问题呢?)
& @7 ~, X( g) g4 g/ P
$ z$ C& j8 X4 K6 I/ d
是不是需要在DSP.CFG中进行配置+ P8 m8 [% G$ K; o9 ^
我现在的配置为
: K2 |; D6 y" F) I7 l
9 i; _8 v8 s. |% d/*
! C4 v4 F; Y  Q! s *  ======== Operating System Configuration ========. c1 L9 ~8 R. R) n
*/
6 S% o6 ], ]# [, ^" F: E! f0 y, {& Q3 t" I9 v) e; H3 F2 p
/* no rts heap */
( Z8 q" q7 {5 w/ f7 z0 GProgram.heap = 0;4 Q- {/ x) q. v( {' M
Program.argSize = 100;  /* minimum size */
( F: U# a& S  ~& Z- jProgram.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大6 f* s+ Z) Z) e& G" ]
* N* F# B  I* p# B
/* create a default heap */- }+ M9 v8 T6 M% a+ U! P
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');% u  |3 K' _% f% d( d4 ?/ k
var heapMemParams = new HeapMem.Params();" ~( Z9 w9 G* T
heapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大
2 A5 o$ y2 U! D5 B. X6 K
+ ^* d" y) A) D) E" U) e0 {
var Memory = xdc.useModule('xdc.runtime.Memory');& g& `0 C/ J$ h3 {' o& \- A% M
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);
; N4 z' m8 @& W9 a/ p& T# p$ Q& `. J& J2 o. _$ z
/* configure System module */
. m) F7 t% J$ r5 yvar SysMin = xdc.useModule('xdc.runtime.SysMin');6 p' j; Z7 E" j
SysMin.bufSize = 0x1000;
5 _0 L2 r7 w" F$ mSysMin.flushAtExit = false;
( h1 l! ~" Y' f. @2 ]9 I3 F# l/ y* A  E
var System = xdc.useModule('xdc.runtime.System');
8 m7 o8 _, R1 t/ M4 `0 N& w( oSystem.SupportProxy = SysMin;; ~! \. L' X! y7 a( n# H: L- M7 k

  ?6 X) }3 _/ [. a/* configure SysBios to use the lower half of Timer 1 */
, f" U- z+ K3 Tvar Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');
" T; M8 ?0 g& V8 P0 C; c9 }, hvar Clock = xdc.useModule('ti.sysbios.knl.Clock');
5 \5 d1 f: n; X. oTimer.timerSettings[1].master = true;% j: D: Q- v& S# w* Y# k
Timer.defaultHalf = Timer.Half_LOWER;+ M; f: |7 p& T* H6 y# ?# f; ]
Clock.timerId = 1;7 {$ \% G/ j) N& A; ^* w
% ^4 U% f- x  C( Y% N) v
6 x( Q7 z" E4 y8 ?/ j
/*
. M% x, }5 a: h4 }( l. L *  ======== Miscellaneous Configuration ========. `9 u3 O  Q9 ]. J  X
*/1 l: R5 R! H9 X) b; r' }0 A

  w: E4 e9 V+ I* N$ Q" O0 B/* set default diags mask */
  L) Z$ y; ?  ]6 f2 {$ V' fvar Diags = xdc.useModule('xdc.runtime.Diags');
/ f3 Y1 k4 r3 f3 w7 Lvar Defaults = xdc.useModule('xdc.runtime.Defaults');, g0 V0 p; m, ]
+ o+ P! i6 h: V( \; o# F
Defaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;
% K2 c! k6 `1 nDefaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;  r" ?& S. m4 n6 Q' g3 |7 U6 ^3 H
Defaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;
$ x5 |* Q/ a3 ~' L+ h8 ]Defaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */; A( }" C3 H7 _1 ~9 G
Defaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */2 x5 ~* w9 O+ i- T
Defaults.common$.diags_STATUS    = Diags.RUNTIME_ON;
2 Q2 H: Z" d6 j) F3 K: ]4 dDefaults.common$.diags_USER1     = Diags.ALWAYS_OFF;
0 G% l; E$ B9 P1 xDefaults.common$.diags_USER2     = Diags.ALWAYS_OFF;% J1 M" }" K2 Q% k, S6 f0 K
Defaults.common$.diags_USER3     = Diags.ALWAYS_OFF;, S+ W+ z4 |/ _4 S& m+ I2 H
Defaults.common$.diags_USER4     = Diags.ALWAYS_OFF;
+ u8 L0 m% k. h6 i8 [- gDefaults.common$.diags_USER5     = Diags.ALWAYS_OFF;
% B- A- `2 \/ _# N8 iDefaults.common$.diags_USER6     = Diags.ALWAYS_OFF;6 U4 h4 B' c* U  x
Defaults.common$.diags_INFO      = Diags.ALWAYS_OFF;
& p% v/ d1 ~4 n: P! nDefaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;9 c! V! i) X# j
& G- X. p: _$ m* a1 F
/* override diags mask for selected modules */" z9 Q0 `0 r8 n4 x/ b
xdc.useModule('xdc.runtime.Main');
8 J  ]& e2 k1 ^- l' FDiags.setMaskMeta(
5 Q( M; P3 U; f  g: g3 u    "xdc.runtime.Main",
* d  |& Q0 F& U7 m. v( g4 @    Diags.ENTRY | Diags.EXIT | Diags.INFO,, Q3 ~& X$ V- g/ E
    Diags.RUNTIME_ON$ J8 I9 P* U1 {) {/ Q1 U! @, ]
);( X4 n$ a, A! {7 E/ A' g5 M

- M* z6 J: K- c0 E0 X( }# Gvar Registry = xdc.useModule('xdc.runtime.Registry');* @. e- k# d7 f2 U9 |
Registry.common$.diags_ENTRY = Diags.RUNTIME_OFF;
! W7 s2 c$ i" D' R! PRegistry.common$.diags_EXIT  = Diags.RUNTIME_OFF;
# O+ Q$ U& F9 k! p& m7 c8 q; c/ I* o" I) FRegistry.common$.diags_INFO  = Diags.RUNTIME_OFF;
0 O+ _/ I; M1 ORegistry.common$.diags_USER1 = Diags.RUNTIME_OFF;' s( ~: ]$ l% G5 Y# b0 D4 e

. C6 m+ @8 J$ l: M/* create a logger instance */
4 B2 m0 X) ~- i7 I' G. kvar LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');
' p$ h  H& u4 c. r0 P$ A0 q9 kvar loggerBufP = new LoggerBuf.Params();: k$ {1 F; g# p- l& z8 N
loggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */
% V3 {0 R3 d  t8 H8 R8 y* A" eloggerBufP.bufType = LoggerBuf.BufType_FIXED;
3 @& _: [/ }: k/ g4 O& M' B! B$ S  I# Z
var appLogger = LoggerBuf.create(loggerBufP);
) h- p2 M& e  gappLogger.instance.name = "AppLog_Core1";/ [, ]# `7 C; D6 @( I
Defaults.common$.logger = appLogger;6 ^$ c% W  _) b9 r+ G& q
Memory.defaultHeapSize = 0x8192;   
8 \6 |1 _$ w  V" X6 e( ~Idle.idleFxns[0] = "&LEDStatus";. Q& Z6 ^. {2 m0 M
Cache.initSize.l2Size = Cache.L2Size_32K;6 ^% o& t4 z% ?* n: c: b, w
$ p/ T' H' A  A+ }6 @0 |
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-11-19 15:48 , Processed in 0.041153 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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