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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2015-9-4 08:33:31 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
创龙工程师你好,我在OMAPL138单独调试DSP程序(使用SYSBIOS)时,在任务中使用calloc函数动态申请内存,用完后free,类似如下结构  i0 u; ?# L( l% \3 f) L
3 A" B( T2 P( s3 O( H" F5 v7 _
    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //256  ?) k- y+ O( u: c3 T
7 @* b0 {1 ?( _, U+ l8 d
其他程序段。。。。。) ^# T) \0 h+ L  w6 L1 F
+ I% f0 i! U7 g% A. b
   free(x_d);
6 q& Y6 p3 B- k" ^) n
9 H8 R/ ?3 c8 b! i& R5 a$ G0 t使用DSP侧单独调试功能,验证动态申请没有问题,
3 g' O  C% |: u0 X
) b3 o) [. d2 z( u' z但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。
3 Y) S3 ?! [" m
  `' l9 ~7 Z, U3 O/ _# t

- H/ {  a6 c; u% h- Z3 `% i3 _/ ^% l6 Z5 }: Y5 y! f3 [+ q8 A

! ?- E3 E* D" A. [; q1 z) L5 |; R. ]) K6 K2 m
; Q4 b7 t& x2 y6 \( R: S% s
9 }2 U3 `7 I/ b
( k1 T3 `( h+ e6 K4 E" _+ ?

6 [) s; p0 o8 {; I: ?1 q9 T' U1 n8 B- h! }9 O9 E& y0 n
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2015-9-4 10:29:21 | 只看该作者
补充说明
! z- g' G( n& L3 p1 S3 B. A% w% E% f我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下' B' d! u3 x$ J2 C9 c2 O
(不过疑惑的是,为何单独DSP仿真就没有问题呢?)
, v# r. V4 b+ i4 t0 t5 Z0 B

" Z7 e  I  w1 t+ l" b7 R是不是需要在DSP.CFG中进行配置% ~3 R- P- L3 |
我现在的配置为
6 d& V% J3 a. j4 M$ F! a  o9 S/ w1 Z, R
/** b+ M6 z+ s! N
*  ======== Operating System Configuration ========
: W6 u3 b5 E, X9 i, o  U- W */) |7 U; N( q- P- L1 r
( j- O  r0 z$ ^6 m9 i8 X
/* no rts heap */
# p# S9 P& r& {! D8 r5 uProgram.heap = 0;
" h, V1 m. e# ^; D. V6 T/ pProgram.argSize = 100;  /* minimum size */
5 E* Q$ k1 l* I* S3 ^7 g" b" uProgram.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大
3 M9 i& u& c7 ^6 r0 A, r( G' |2 k; {, Z- u8 }2 }- Y4 N1 _- }
/* create a default heap */
3 ]2 K- h$ P# _- D  ~( r( pvar HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');3 O9 ]; s3 Z0 R2 g3 u! ~$ u+ k) A5 l9 J- D
var heapMemParams = new HeapMem.Params();9 [. Q, w7 o" [/ V5 O8 {
heapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大  y9 U! d3 q6 H& V9 M5 h+ k* ^
, q$ v( Q4 `4 _* i7 J. n5 e
var Memory = xdc.useModule('xdc.runtime.Memory');+ R$ B; S" X' n$ P
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);
  b! }! D. K* w: {7 D' ?: j9 h' O1 |' r& z
/* configure System module */
$ g, @1 K; [# @' O  Hvar SysMin = xdc.useModule('xdc.runtime.SysMin');5 E' R" x5 l9 S; x
SysMin.bufSize = 0x1000;
! p  _. W3 N5 X& D5 ]SysMin.flushAtExit = false;! ]/ E2 K' o+ H4 ?1 E) |; z

8 X5 C  \4 E$ H; p* D* _. Mvar System = xdc.useModule('xdc.runtime.System');+ D0 J' N$ u% q  y4 z2 v
System.SupportProxy = SysMin;
) H4 I  E8 K6 \: _4 W. H$ W& M$ O& A# V7 ~) G; r% k! K- ]
/* configure SysBios to use the lower half of Timer 1 */7 _* i2 o" X+ U& u
var Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');
$ H  I4 B6 y9 C0 M8 evar Clock = xdc.useModule('ti.sysbios.knl.Clock');$ r! v$ _* X. Y* y2 A
Timer.timerSettings[1].master = true;& E# ?5 Q, ^( n3 W7 }
Timer.defaultHalf = Timer.Half_LOWER;
& t, d$ n' U! i" ^5 ?, F7 ?Clock.timerId = 1;% z% K* [' o7 P9 b- @& ]. F
: W* `4 V, C& G: Z

  p" y# r5 R. K( L( v" F/*: n: |) ]3 U0 L( Y- ~. x& w! X
*  ======== Miscellaneous Configuration ========' z, D# Q  z. U2 F8 n" h
*/
0 I  `% \( M  _/ R. k# t$ h& j( m" W, [. v, ]6 {* f( D
/* set default diags mask */1 v$ V8 ?) Z( [
var Diags = xdc.useModule('xdc.runtime.Diags');( o5 }$ |3 C# i; E1 o6 z& C* e0 I
var Defaults = xdc.useModule('xdc.runtime.Defaults');
3 c2 G3 X& S8 k0 Q8 i8 b6 ^# `- `1 T
Defaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;
4 p' T+ S5 M1 Z0 w- z  RDefaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;
$ r/ M0 @# U; |7 j4 t- D" vDefaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;7 Y7 H) C9 M1 ?7 [0 T$ y7 w
Defaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */
) |3 l2 m1 N8 }0 u" ?5 xDefaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */, f, i0 w# O+ b
Defaults.common$.diags_STATUS    = Diags.RUNTIME_ON;
2 \0 R* ~( i  I6 UDefaults.common$.diags_USER1     = Diags.ALWAYS_OFF;
7 F" a& h; F% a3 tDefaults.common$.diags_USER2     = Diags.ALWAYS_OFF;: q. O, u/ `( d* ~
Defaults.common$.diags_USER3     = Diags.ALWAYS_OFF;
* M, ~2 }/ h$ Q- oDefaults.common$.diags_USER4     = Diags.ALWAYS_OFF;5 p+ G- m; Q% F$ r# z
Defaults.common$.diags_USER5     = Diags.ALWAYS_OFF;
5 z* V, D; F( y9 xDefaults.common$.diags_USER6     = Diags.ALWAYS_OFF;- y: G! T, F) n9 G) W
Defaults.common$.diags_INFO      = Diags.ALWAYS_OFF;: ?- ]- Y, m/ y( {
Defaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;
6 z5 V5 g" P# \; j
. Z" J! |* p3 ~; K/* override diags mask for selected modules */( Z$ g9 U& \' w. V) q' W6 ]
xdc.useModule('xdc.runtime.Main');, t% @  T7 c/ K) k6 o# z. s& r
Diags.setMaskMeta(
. o' _1 Q0 e/ O; q  A9 Y5 U    "xdc.runtime.Main",* J, {  x  I: i" ?% g
    Diags.ENTRY | Diags.EXIT | Diags.INFO,
0 P5 }) b! \) E: t+ d    Diags.RUNTIME_ON' \. P% b: J; V, G* N" C! W
);" C5 R# @# d) d# z6 c

4 _7 ~1 O) [& Kvar Registry = xdc.useModule('xdc.runtime.Registry');0 I+ r# X- u& o6 A# n
Registry.common$.diags_ENTRY = Diags.RUNTIME_OFF;
6 N# h4 _0 ~$ N7 ]% i) Z& yRegistry.common$.diags_EXIT  = Diags.RUNTIME_OFF;
+ X# F7 O; p6 f* P& k( A* O) ~Registry.common$.diags_INFO  = Diags.RUNTIME_OFF;. h% _+ |2 F) N& u& Y
Registry.common$.diags_USER1 = Diags.RUNTIME_OFF;' g: M4 z, m$ K4 }
3 Z$ ~! I/ L/ B
/* create a logger instance */
2 w, |& s* J1 y( Vvar LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');
" A& C) Y0 E+ [" f" ^* m% z7 `- [var loggerBufP = new LoggerBuf.Params();
# B! F2 B/ k; {, H8 x) k' R  h- {' MloggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */
6 k5 r2 w7 V* D% a' ploggerBufP.bufType = LoggerBuf.BufType_FIXED;
! y- n) T/ f0 S6 H, E: m
+ z7 H  H; w4 T+ U2 o" [var appLogger = LoggerBuf.create(loggerBufP);
2 y3 m: y8 |6 M( XappLogger.instance.name = "AppLog_Core1";
# K* t9 b  N/ MDefaults.common$.logger = appLogger;0 ^% T& S7 d/ u( ]1 D
Memory.defaultHeapSize = 0x8192;   
3 q# K. d- F' P" h. ~, bIdle.idleFxns[0] = "&LEDStatus";
/ K. r3 t% k: q4 ^- vCache.initSize.l2Size = Cache.L2Size_32K;
( Y& ^6 s) D" r* m' b$ \
; N- ]2 y9 R  b  |+ ^5 D
回复 支持 反对

使用道具 举报

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 */
1 i% F: b1 R9 x! rvar HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
: b; W: d: @$ j7 d+ svar heapMemParams = new HeapMem.Params();
, ^" e4 S- W( f; o0 zheapMemParams.size = 0x4000;; G; A" D" R( X( R# ^" D! _! w
- E$ w: S$ D7 v5 `% j) L2 f
var Memory = xdc.useModule('xdc.runtime.Memory');3 @' F" e& X& ]% X; w$ h$ R
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);
0 D" x4 _) O% m& j& U/ k
. o  K& F/ ]* T  S7 U- N我大约calloc  每次共计大小为5K*16bits,
7 d) z# D( F1 Y. J而默认配置才0x4000、需要改大。) C7 D1 A: I% _# b( A+ P5 ]( K
) o8 u1 w. M& g
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
5#
 楼主| 发表于 2015-10-28 16:14:47 | 只看该作者
/* no rts heap */2 A& x: z: p% K$ }
Program.heap = 0;
; k+ h' J* C" J5 w( C! l1 KProgram.argSize = 100;  /* minimum size */
7 V8 H$ Y2 o$ U6 WProgram.stack = 0xF000;                   //我改到F000  也不行
回复 支持 反对

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

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

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2026-2-11 10:58 , Processed in 0.059656 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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