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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2015-9-4 08:33:31 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
创龙工程师你好,我在OMAPL138单独调试DSP程序(使用SYSBIOS)时,在任务中使用calloc函数动态申请内存,用完后free,类似如下结构
4 u6 r/ @. _$ n0 L2 U9 w+ [$ X: B* f3 i! ]( Y6 |: o
    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //256) B. o9 M: B0 x  f3 W# U* c' O
, C! a2 x; S6 ]+ B0 g$ ~/ @! A
其他程序段。。。。。
, O0 h* B2 J$ w# ^) U& Q' u3 |3 { 4 F$ K/ b9 k' |5 T6 _* }9 f" _/ X
   free(x_d);
/ w, q( }; y9 _2 N% L- T
1 l; a/ |2 {8 o" k2 y使用DSP侧单独调试功能,验证动态申请没有问题," d6 T) \3 o, D) @8 i" |+ e1 X4 E
8 F/ a! f* l: a+ e. c
但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。0 O3 r, f( b( X# d+ L# c& j: @

/ u' u' `, }/ b3 J6 k% Y! Z. M; A

, h# z8 D1 B( H+ F8 ]( Y0 x, j, b, F& ?+ g

2 I) U  [  D2 S9 h/ N1 h/ X' h" |* ^

- v7 {1 r' z* R( r& V# s2 C& }! r* ^3 z- \* l3 {

  W4 {5 |# u: H- ?" r& ]7 t& K. A7 j: j( L, u3 J8 {+ C
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2015-9-4 10:29:21 | 只看该作者
补充说明: [  l0 V6 M0 v4 b6 i
我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下
( A! @) |$ r. U0 t2 D. Z(不过疑惑的是,为何单独DSP仿真就没有问题呢?)
7 X3 V& s( L8 K- w6 C# C6 Q

' K* H- |; D; E, v! a% N$ E3 N是不是需要在DSP.CFG中进行配置. l  a% v$ p) I/ L7 W" X5 W0 i
我现在的配置为
5 Y8 h/ f5 B7 @2 G
1 e; P- `# P2 ]( M& @' a$ Z: \% v3 `/*
7 j0 u( v/ t+ s *  ======== Operating System Configuration ========
* I6 Y  M4 S. w% c- _$ V */
+ [. z/ @) D6 K  Y3 r+ _" N3 o" F$ T
/* no rts heap */% s) Y  P' U  i. ?" `& E5 G
Program.heap = 0;' C* g$ Q( V( S# C. I5 q
Program.argSize = 100;  /* minimum size */5 @# c+ a- u. b# U* s
Program.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大- E" h* y# u0 T5 i
+ y0 Y& b( y  u( I0 w
/* create a default heap */
( b8 V: ~$ u6 J4 ]- Q- Lvar HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');, |, Q( |  l$ o. C
var heapMemParams = new HeapMem.Params();
6 a& d/ m- W) A; p5 j( K; xheapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大2 V1 K; G9 L/ \2 R' f

( T) \0 E4 G. Z/ @5 S& @% w
var Memory = xdc.useModule('xdc.runtime.Memory');$ t1 y' d0 b8 }1 O  ?" P4 U7 u
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);) h- e! f: o$ {2 M' l" Z

. R& J+ ^  b! c5 h! H" x! ~/* configure System module */% z- j7 m& D+ _. V: i% b. H# \
var SysMin = xdc.useModule('xdc.runtime.SysMin');; j: x3 W' h0 l( @/ F: D' @/ y+ X0 I
SysMin.bufSize = 0x1000;
! X  L: U4 s  t) K  Y% vSysMin.flushAtExit = false;1 w: `+ o% X4 i2 C/ p  F1 m4 r$ g6 s
& K# G( I: A# b- H, D+ }& K
var System = xdc.useModule('xdc.runtime.System');
: W3 j% K  D* |9 s3 OSystem.SupportProxy = SysMin;
+ T0 Q7 c% r6 {
7 H( G; R' H% w/* configure SysBios to use the lower half of Timer 1 */
* i$ }/ o( I! Nvar Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');% Q9 k" ]$ Q- U" `
var Clock = xdc.useModule('ti.sysbios.knl.Clock');
) c* S2 d6 f% G8 TTimer.timerSettings[1].master = true;
6 e' ]- U, T; V; E% eTimer.defaultHalf = Timer.Half_LOWER;
, T1 g$ T. O1 k* gClock.timerId = 1;
- j* ]+ Y3 Z9 b& Z- d+ E( k
3 Z; i/ p# @1 q: ~, Z
* I9 E) o( n7 k  v4 H/*
+ Z- Q, h2 d; j# [ *  ======== Miscellaneous Configuration ========0 t8 k: [6 s3 _- a1 M
*/' k+ L' z9 H& W- E9 N

: R' f( R2 C+ j0 `/* set default diags mask */
( u1 V: y( b5 R5 X3 G% Bvar Diags = xdc.useModule('xdc.runtime.Diags');- H6 g; F( k' f& G. ?' N; j6 D6 M" |
var Defaults = xdc.useModule('xdc.runtime.Defaults');; Y8 \' I2 Q: {% u; e) r) C3 A& W; c* n, x

- O0 c& q! ?  Z6 }( q8 z1 tDefaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;
4 F8 G' ]5 y( l$ uDefaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;
# n! R2 _9 t& w; ^. Y; J1 `# d3 XDefaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;
* B1 w9 x$ A9 e2 D% O! _9 @5 [) GDefaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */
0 g4 P7 w% ?2 E; {Defaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */- v8 m$ _# T1 n; f& B
Defaults.common$.diags_STATUS    = Diags.RUNTIME_ON;
% k. c% V. n+ x5 V, F  C) Y- _) qDefaults.common$.diags_USER1     = Diags.ALWAYS_OFF;
. A# z& G9 |3 W% e" p/ n$ {Defaults.common$.diags_USER2     = Diags.ALWAYS_OFF;% h; p- D% O+ F( d
Defaults.common$.diags_USER3     = Diags.ALWAYS_OFF;/ g6 X: U. q- ?- ?& z
Defaults.common$.diags_USER4     = Diags.ALWAYS_OFF;0 d( Z: }$ \. Q
Defaults.common$.diags_USER5     = Diags.ALWAYS_OFF;2 j0 e- {# H! A/ l/ b
Defaults.common$.diags_USER6     = Diags.ALWAYS_OFF;
3 J) @$ P3 V8 D7 P5 t& G. M) W, ?, FDefaults.common$.diags_INFO      = Diags.ALWAYS_OFF;; ]2 x6 g- y. J  z* O
Defaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;
$ [( U; N3 T6 ?- ]$ e5 j+ O5 w. |: y9 h  k! r( v4 W
/* override diags mask for selected modules */, b3 N9 f# _! x0 g" O0 P8 C
xdc.useModule('xdc.runtime.Main');
6 F2 [$ L/ T/ }6 CDiags.setMaskMeta(1 k% z7 C/ i1 f
    "xdc.runtime.Main",
# q5 S* M6 W( a! }% C1 f4 I  t" p8 _    Diags.ENTRY | Diags.EXIT | Diags.INFO,8 J! T- l+ ~. B  K5 f& m
    Diags.RUNTIME_ON/ G4 c" `! Y" Z) R8 _# j+ C
);6 {/ O* L  P# F& F' A" U8 w

: ^( j* l# S$ ^8 z. a' U- bvar Registry = xdc.useModule('xdc.runtime.Registry');+ h/ W& h0 `) S+ W- h$ M
Registry.common$.diags_ENTRY = Diags.RUNTIME_OFF;" E2 D3 m+ f2 {7 V# o0 a
Registry.common$.diags_EXIT  = Diags.RUNTIME_OFF;
0 T* E3 m% o) R9 P* W+ ]* IRegistry.common$.diags_INFO  = Diags.RUNTIME_OFF;) n$ ?! P+ f* D/ J* R
Registry.common$.diags_USER1 = Diags.RUNTIME_OFF;  a. [/ C% F. P7 I# N+ S

0 g$ J* L3 x: U) i' Z! c  l5 y/* create a logger instance */( `! s. |. D- M) \" W/ t
var LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');
7 \" q8 K& C+ w, o4 jvar loggerBufP = new LoggerBuf.Params();
5 _1 g- T+ |0 t; q6 M1 S% r+ r( KloggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */
) n& e3 C3 D- ]% `3 E9 H4 l+ u6 O! YloggerBufP.bufType = LoggerBuf.BufType_FIXED;
  Q% T( \& e! V2 w1 }! X7 j
6 `0 P( O& N# A' a7 {' Vvar appLogger = LoggerBuf.create(loggerBufP);* ~( S4 p2 a- Q- F
appLogger.instance.name = "AppLog_Core1";! X" X" b$ m0 ?
Defaults.common$.logger = appLogger;
. ^" l1 {  }1 z. h2 nMemory.defaultHeapSize = 0x8192;   
6 O: m) l1 r: }/ ^: y" ZIdle.idleFxns[0] = "&LEDStatus";
/ o' G7 a7 X% r9 c, OCache.initSize.l2Size = Cache.L2Size_32K;% R7 W: ^- i: ~8 h% E9 C- `! E
) }1 v5 a* N9 }6 m( y% o. b4 t3 w' h
回复 支持 反对

使用道具 举报

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 */
; O9 L8 Z) P8 j/ t( o% W  rvar HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
! {) ~5 S* t4 A3 }3 F7 ^5 ^% R4 _var heapMemParams = new HeapMem.Params();
: F3 Q7 j2 ^, |  I( C' b8 |heapMemParams.size = 0x4000;0 j% f/ H) \: {) F2 F* P  @
( S! a  B9 F+ G# J4 t5 t5 n' k
var Memory = xdc.useModule('xdc.runtime.Memory');+ H2 I, `4 d: Y  q. \) f5 V, N
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);
3 S( b3 |: N$ n5 \( c1 j$ b1 s6 H# C! [, o% a
我大约calloc  每次共计大小为5K*16bits,7 h" W, J$ s  s& i9 B. ]) l
而默认配置才0x4000、需要改大。$ O$ V0 O0 g/ a8 L- S

/ G+ t! a/ A; j+ S# O, Y+ w
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
5#
 楼主| 发表于 2015-10-28 16:14:47 | 只看该作者
/* no rts heap */0 I2 m" p  A5 N2 z0 S
Program.heap = 0;6 n: Q- B  L! h, f4 G# L3 E  Z
Program.argSize = 100;  /* minimum size */
% y) ?6 d" q% B- G/ B9 T9 c2 {5 ?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-16 19:41 , Processed in 0.042977 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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