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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2015-9-4 08:33:31 | 只看该作者 回帖奖励 |正序浏览 |阅读模式
创龙工程师你好,我在OMAPL138单独调试DSP程序(使用SYSBIOS)时,在任务中使用calloc函数动态申请内存,用完后free,类似如下结构( Z' V4 Y' m% N4 O
& x4 R2 [( Y: f
    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //2562 Q) w) V5 S& Q/ ^( B
8 v  R( \  s3 f, C; D- y. a* T
其他程序段。。。。。
* m8 _0 @5 L4 ]
8 m  [, [8 H: D   free(x_d);
; C- O- }1 R+ }4 l/ x3 y
  J- Y1 Z) t) [5 [0 y使用DSP侧单独调试功能,验证动态申请没有问题,
& Z! @6 U$ N: X" X: i- u) a% i
但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。! v# K; r! x2 B! n8 F/ ~! r

- H) }" ~9 b. ~6 I9 a
% g' [: M5 @9 M1 h1 _% H/ M" F; D6 }3 T; }) @* c; Q4 L+ i
' \4 ], H. v, n( p
+ }, K: e( k/ O! K( A- K4 `7 g
( m* I; b7 c. f4 {5 ?0 r+ A
5 y" o7 B/ y% t9 j

- I9 ~0 b, H4 s: r3 G2 v4 i+ u7 X: C3 n- }

: g. F' Y$ S0 b! S! V
分享到:  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 */% C' B0 s+ S5 Y+ o, f2 X, y
Program.heap = 0;
* }6 T( P  L$ d6 l/ @' aProgram.argSize = 100;  /* minimum size */
  Z5 [! d! u- \Program.stack = 0xF000;                   //我改到F000  也不行
回复 支持 反对

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

积分
1093
地板
发表于 2015-10-28 09:51:31 | 只看该作者
/* create a default heap */7 \7 [/ H( D1 {# F& f- D$ z8 t) P6 ]9 T
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');' ], h& M  v4 }
var heapMemParams = new HeapMem.Params();
% g2 e6 x& N/ v" d5 u' |- LheapMemParams.size = 0x4000;
+ m- ^; h- E' T7 s
* R: Y  I. G$ @# ~var Memory = xdc.useModule('xdc.runtime.Memory');
* h" `- Y9 L2 _- F) MMemory.defaultHeapInstance = HeapMem.create(heapMemParams);  V9 S; i8 j; E3 C$ r5 _/ q5 S
( _5 z. Y  v/ I
我大约calloc  每次共计大小为5K*16bits,, h4 s  t% U! U: |4 M
而默认配置才0x4000、需要改大。$ t1 q0 R- e, [) Z) p0 ^0 e
8 h! f7 D( x2 w6 W" l: T; i
回复 支持 反对

使用道具 举报

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 | 只看该作者
补充说明% [( o4 e0 W. S. h1 {9 s
我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下
  j! p1 x( M1 o" T1 X(不过疑惑的是,为何单独DSP仿真就没有问题呢?)
9 i$ c: c* D3 A8 s) t5 k

- G9 E. E: K* t+ C, c0 f是不是需要在DSP.CFG中进行配置: X4 R" K' ^7 Q7 d  F2 F
我现在的配置为4 P- E6 N1 A4 h( K* U
" D; V* S; v* z6 B  u# q
/*$ I& N3 n, j6 d# ^& O8 D
*  ======== Operating System Configuration ========
- L. }! }0 |8 b, k */7 m. V1 i0 c0 _  o/ j

1 k  d7 d1 ]: y5 d; f" A3 a/* no rts heap */
' o0 ]3 m! R, f" CProgram.heap = 0;
' _: k" W+ d2 Z% o6 PProgram.argSize = 100;  /* minimum size */1 K, B) L( c" b- m, l8 t
Program.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大: E+ s; d0 i% n( r6 H- S

8 h/ b+ g! u* E) q0 R8 g/* create a default heap */. |) ^$ r  F  P; y
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');6 n9 @- l" U& ]$ Z
var heapMemParams = new HeapMem.Params();
! t2 l7 s5 L9 L: D6 FheapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大5 S/ I2 i4 I1 W+ d& \1 v
/ z% Q. g8 k; W' f% L, J
var Memory = xdc.useModule('xdc.runtime.Memory');& H3 b5 c2 h6 R; Q+ |4 l6 `
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);( O' R/ o" V3 V3 \" D- A. `
- H$ e+ z% z* N  M# \
/* configure System module */
/ B- s' J8 t9 Nvar SysMin = xdc.useModule('xdc.runtime.SysMin');
+ o$ N+ w1 ]8 y, a7 Y: ?* OSysMin.bufSize = 0x1000;# _) z% i' C2 H: {
SysMin.flushAtExit = false;
+ o7 Q- S; ]+ K1 h0 ^# R
0 w, A/ l, C/ o$ |" g4 Yvar System = xdc.useModule('xdc.runtime.System');
+ Z2 `, [; c) D: C; i# nSystem.SupportProxy = SysMin;
' R$ P; O7 T/ @
4 g, _+ N' y- o. V/* configure SysBios to use the lower half of Timer 1 */
) U8 a. q- U8 x$ K1 X- xvar Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');4 l) ~7 x4 Q0 t( E1 Q
var Clock = xdc.useModule('ti.sysbios.knl.Clock');
; X! r6 G* q+ ]Timer.timerSettings[1].master = true;
* L/ ]) u/ C2 ~9 U! q7 `) ]+ vTimer.defaultHalf = Timer.Half_LOWER;& d* ~4 b/ S' s  g9 t$ m$ w
Clock.timerId = 1;$ ^& _4 \# h4 ]1 O6 h9 v

- f/ x, p  N- `
+ W$ v; `* ?( a( E1 t/*: j/ P/ m: I) E; S2 Y
*  ======== Miscellaneous Configuration ========
/ _+ F7 W" A2 \3 e9 {5 ? */
( X/ f( s: U/ M, z: }7 Z3 ]
, s, @6 M- E( P/* set default diags mask */
: M( [' \  S! j% Y  l/ Q' mvar Diags = xdc.useModule('xdc.runtime.Diags');) w6 |" m/ j$ n
var Defaults = xdc.useModule('xdc.runtime.Defaults');6 e! E9 L" j' W' V: R& I1 l

: B, y! x( U  A* oDefaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;1 x& _) x2 n8 ]9 x
Defaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;: M& [: p. O+ p0 a* U. }( `
Defaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;# \6 W/ e% I, r: ]( {1 q
Defaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */
# @; W2 D' b+ R1 C! r% ~3 ~Defaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */
6 r. M; `- l5 |4 I$ M+ P, vDefaults.common$.diags_STATUS    = Diags.RUNTIME_ON;2 M6 h! V0 ]1 k
Defaults.common$.diags_USER1     = Diags.ALWAYS_OFF;3 ?4 W5 p. _$ h1 u
Defaults.common$.diags_USER2     = Diags.ALWAYS_OFF;+ ~& F* _  s1 x! m
Defaults.common$.diags_USER3     = Diags.ALWAYS_OFF;
9 ]7 p! I: ]- V4 @8 QDefaults.common$.diags_USER4     = Diags.ALWAYS_OFF;
' ~1 w- e& G9 z! a) o/ I, tDefaults.common$.diags_USER5     = Diags.ALWAYS_OFF;
" Y9 ]6 M; n& p7 DDefaults.common$.diags_USER6     = Diags.ALWAYS_OFF;3 F$ U8 o* s0 k4 O- Q  [0 `4 ]
Defaults.common$.diags_INFO      = Diags.ALWAYS_OFF;
9 o( q7 M; H: M4 c# I" i1 CDefaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;" o2 Q1 s; h5 |) h& b1 a

4 c2 q' r3 ~% g! X, y8 j* l) Y! z/* override diags mask for selected modules */. V5 d' s6 f# C) h
xdc.useModule('xdc.runtime.Main');5 {2 P# G5 D; r: a" h# [; K
Diags.setMaskMeta(+ l& T/ M1 A8 u! N( f; Z% N% J
    "xdc.runtime.Main",  ^5 p( Q; E# \3 `* d3 l
    Diags.ENTRY | Diags.EXIT | Diags.INFO,
% ~* O% L% I" @) K    Diags.RUNTIME_ON, M% s/ q3 R& C
);1 ^8 R( p& X- `: L. U
; j$ m) ?; F/ ^. k
var Registry = xdc.useModule('xdc.runtime.Registry');
2 Q$ |, @' I0 v, \  l; d/ H* ~Registry.common$.diags_ENTRY = Diags.RUNTIME_OFF;; \% s# B7 C& R0 ]0 y8 |* t) c. N
Registry.common$.diags_EXIT  = Diags.RUNTIME_OFF;
) _2 q/ K) j" v+ {2 tRegistry.common$.diags_INFO  = Diags.RUNTIME_OFF;" T! I% V1 c" G; a
Registry.common$.diags_USER1 = Diags.RUNTIME_OFF;3 q! W$ p! b! i/ ]; m* j) `6 w

: s8 |$ n6 e  q: r/* create a logger instance */
1 T+ u( u7 G) l! G0 Bvar LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');0 j$ w# ~/ Y3 ]! V9 s: B
var loggerBufP = new LoggerBuf.Params();
) ^* a' \! i" U4 `0 WloggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */6 e0 d+ Z8 }( v% j
loggerBufP.bufType = LoggerBuf.BufType_FIXED;
. [, D9 w  g  `2 |( E6 K( b& U! u
var appLogger = LoggerBuf.create(loggerBufP);4 O: H7 `5 \2 w
appLogger.instance.name = "AppLog_Core1";
0 g- }! C8 y# }* CDefaults.common$.logger = appLogger;
: J  G+ r: Z0 \4 k6 h* l# V7 U2 iMemory.defaultHeapSize = 0x8192;    7 Y2 Z# ?  p! d$ M
Idle.idleFxns[0] = "&LEDStatus";5 x0 x, k; k6 F) m/ r$ @
Cache.initSize.l2Size = Cache.L2Size_32K;9 W" p& w5 ?5 U+ e) x' n: I

6 Q2 l8 `7 I( w; X# p' a
回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2026-1-16 18:36 , Processed in 0.043985 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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