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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2015-9-4 08:33:31 | 只看该作者 回帖奖励 |正序浏览 |阅读模式
创龙工程师你好,我在OMAPL138单独调试DSP程序(使用SYSBIOS)时,在任务中使用calloc函数动态申请内存,用完后free,类似如下结构
. N) J, L( {4 }; i/ d2 |+ Q, ~2 p: F8 r9 u( [6 X" s
    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //256
4 r6 ?' f0 h, @0 p" ]
' O0 I  w# L; U; @! ^其他程序段。。。。。( W, R! L. G6 A6 R
3 B' P$ w& ~" {+ W! o9 q) n
   free(x_d);
( M( ~6 \' g" O# F% v* n0 V% M) i
使用DSP侧单独调试功能,验证动态申请没有问题,
, x" b. t" i9 K% s- J8 b  o  A
* t/ U' |( T) B- c! ?" m! {但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。: J& k2 r! p7 k7 B& J( P

4 z: V: v* h! r( w/ c: k0 H
8 L; S) C" k: W  P3 o5 s5 ?- Y! K$ D! A! ?) o

/ {* W! f* {9 b$ b# G2 y! x0 |, [2 [
8 p: M5 t4 y2 K4 ]: H% G% Z9 s; f8 W9 k1 n
; B1 o# _- s  V3 }. ?. @! h! T
& K% u* o# r3 P2 ?+ Y
( S( E' G9 l; k3 D3 {: K# O

6 B9 @" Z2 M0 v5 F+ {8 g
分享到:  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 */4 W) _6 A* k! w) c% n' u
Program.heap = 0;
: z' s8 [: x0 j8 T- d; M3 B+ u0 p1 G" xProgram.argSize = 100;  /* minimum size */
5 d8 |3 r/ z( q% k' Y( }Program.stack = 0xF000;                   //我改到F000  也不行
回复 支持 反对

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

积分
1093
地板
发表于 2015-10-28 09:51:31 | 只看该作者
/* create a default heap */
# x$ z/ q- \) d- u5 o. R' d7 ~var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
; N) E5 B4 J& a3 m. G! _' m  E2 vvar heapMemParams = new HeapMem.Params();8 \3 u& `6 \# I1 B# A. @
heapMemParams.size = 0x4000;  Z2 p, Q$ U, l; f  ]

( x! @# U! q, H; a. Lvar Memory = xdc.useModule('xdc.runtime.Memory');
: S, l, ^' O; R; W- cMemory.defaultHeapInstance = HeapMem.create(heapMemParams);* R9 L$ V. H; S1 C! z1 x( a

% \# o: n) f. v我大约calloc  每次共计大小为5K*16bits,
: i" A1 {, N. J8 J) A+ a( t1 N而默认配置才0x4000、需要改大。: q/ \4 P+ b; A

5 g' }1 g7 ^; ?5 n" J5 W* u0 C
回复 支持 反对

使用道具 举报

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 | 只看该作者
补充说明
5 E& L9 P; |9 ]3 Z2 C  P我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下
' _' I3 p* C: _/ T9 T(不过疑惑的是,为何单独DSP仿真就没有问题呢?)5 u/ Y5 C1 U9 B  F+ n+ a

/ p' o( t4 b8 A# ?是不是需要在DSP.CFG中进行配置
3 j. m8 P6 f6 a4 E% a: L4 t& [) S我现在的配置为4 B" G! [9 a: v6 _+ L

4 |3 n, X% p* d. \3 E6 E7 k1 T/*
0 D4 `  _9 W' T# z *  ======== Operating System Configuration ========
$ a9 x8 K2 L' _% v) M( p: t */
' D; o) V; L7 y! e/ G1 z
2 e& L. v4 m4 o! e. O3 j* U/* no rts heap */1 @- N7 p# F4 j5 K. _- U, T8 A* q- E
Program.heap = 0;# f- \5 x1 h8 L, h, |
Program.argSize = 100;  /* minimum size */
8 p6 i3 i* R9 LProgram.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大
3 f; u$ v2 Z' A; ?$ n. Z; G
6 f. b% N0 Y8 m. p% E/* create a default heap */& _$ \3 i3 w  R# H9 l# I9 E
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');4 \7 [  Z6 Y  }1 f5 k5 j
var heapMemParams = new HeapMem.Params();
' r* G0 ^( H3 I  M) FheapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大) i- V, N; F& \

0 _/ c8 _2 {$ q1 c! ]
var Memory = xdc.useModule('xdc.runtime.Memory');! F7 S. E. j% m( B9 C
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);
& O, ?' _2 ]; F6 P, z7 i* C% J& }* H% }) \& r/ m7 K
/* configure System module */) Q9 M! |% o7 d/ T2 R
var SysMin = xdc.useModule('xdc.runtime.SysMin');
3 M3 C0 \6 t# b0 m$ X" [' iSysMin.bufSize = 0x1000;
( T9 ]( n- J2 Q6 F5 h5 j0 WSysMin.flushAtExit = false;2 ?. o8 ~8 d: y; z* b

4 U$ e0 z  D) V2 z+ @var System = xdc.useModule('xdc.runtime.System');
5 F/ w5 S3 s  T" S# uSystem.SupportProxy = SysMin;
" G0 r% s* }" n
# q8 @8 B! E  `3 P; W1 |/* configure SysBios to use the lower half of Timer 1 */
* o6 r+ s8 S0 x, ]0 @var Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');
* j2 ?+ {) f: F" I4 gvar Clock = xdc.useModule('ti.sysbios.knl.Clock');' T- ^4 q# o5 L3 @8 r
Timer.timerSettings[1].master = true;
/ ^' O7 D5 H2 X7 h; Z: t7 R& VTimer.defaultHalf = Timer.Half_LOWER;& m8 g$ e. f& M0 F2 S1 o% `1 x
Clock.timerId = 1;: N1 b' A. ~& p6 o! m
9 k/ W  Q- m6 {3 X; ]
- u, t- T# m$ m3 u. p
/*  M( G/ x0 d- }. C( z3 B4 b: \
*  ======== Miscellaneous Configuration ========
' }" E/ \5 x8 `& B- G( z */
" e: Y# u5 d5 x& ]5 D
' n3 H6 q/ z5 \9 k- j6 K+ @/* set default diags mask */
! D9 q3 E: F5 q1 W: Mvar Diags = xdc.useModule('xdc.runtime.Diags');! Y0 W9 K% i% {8 D
var Defaults = xdc.useModule('xdc.runtime.Defaults');
, ^' O7 U8 l& V" x3 C( y" w3 ]6 v9 `/ Q  W" D. J2 W
Defaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;" n, |  r4 Q  q" x( z, \  N* M
Defaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;, p- M  q9 M  C& t7 ?
Defaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;1 R& |9 f6 [0 F1 n! N% q: y
Defaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */
  z- p4 \# T9 y2 H7 U) GDefaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */
; u& P2 L& c" P1 i! mDefaults.common$.diags_STATUS    = Diags.RUNTIME_ON;
1 e. a9 S' G/ T/ ADefaults.common$.diags_USER1     = Diags.ALWAYS_OFF;
+ c  d! H9 s2 e- C" CDefaults.common$.diags_USER2     = Diags.ALWAYS_OFF;
! l* v8 `8 k  F; S( {5 S8 r  vDefaults.common$.diags_USER3     = Diags.ALWAYS_OFF;) ?# L8 }2 Z1 G$ e
Defaults.common$.diags_USER4     = Diags.ALWAYS_OFF;
2 q9 I( l9 R/ S/ E" M6 W3 LDefaults.common$.diags_USER5     = Diags.ALWAYS_OFF;
# i, s& d/ Y; ^+ R" f* g' HDefaults.common$.diags_USER6     = Diags.ALWAYS_OFF;
* c5 E: S" b, N" v( c) k8 IDefaults.common$.diags_INFO      = Diags.ALWAYS_OFF;
6 ]8 _( k/ y8 r8 X2 u0 X. }/ z- W7 mDefaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;4 N8 \. N" q& N& c0 v0 H

0 m$ {7 B( K. r# m/* override diags mask for selected modules */
9 x0 P! q6 D' i9 w+ b! O' Txdc.useModule('xdc.runtime.Main');5 ?1 a) s5 k  \
Diags.setMaskMeta(, L/ z5 M6 X4 `
    "xdc.runtime.Main",
  g: t. D- ]& C# ]0 z" d  w9 T' E    Diags.ENTRY | Diags.EXIT | Diags.INFO,
0 v0 ?9 x# X6 S    Diags.RUNTIME_ON- O  t* L( T, V2 a) ^3 B5 g
);7 z* O. ~7 H8 W1 T# I" J: D

& W+ \$ V; B( P$ nvar Registry = xdc.useModule('xdc.runtime.Registry');
! n6 H6 u/ F8 C' z5 \& p$ tRegistry.common$.diags_ENTRY = Diags.RUNTIME_OFF;+ y# o+ G4 j+ P! p+ P
Registry.common$.diags_EXIT  = Diags.RUNTIME_OFF;" V; I' w* }, [9 e. Q, i
Registry.common$.diags_INFO  = Diags.RUNTIME_OFF;
; R/ P0 g5 L& o2 K5 FRegistry.common$.diags_USER1 = Diags.RUNTIME_OFF;
: l. \) _' i# {) P- s
. z# `( r9 o0 v- t/ r8 Z) w/* create a logger instance */( d/ Z2 I) L8 x& E( y4 `: T* e1 w
var LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');' S# {1 W9 p8 [$ q/ v$ E% z
var loggerBufP = new LoggerBuf.Params();) w- {" Z# n( B& d) U' Y3 a
loggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */
& B- g2 l3 q" Z9 X* F" l( X+ @: RloggerBufP.bufType = LoggerBuf.BufType_FIXED;
% I" l: Z6 R2 A8 t5 H7 n- f
5 u8 J, i; x9 O9 w9 S! Bvar appLogger = LoggerBuf.create(loggerBufP);
# `2 V* H8 N  |+ ^5 T4 ^; z' DappLogger.instance.name = "AppLog_Core1";- v& D" g; C" L$ |% Z' D
Defaults.common$.logger = appLogger;5 G: l, {9 ^8 J' E+ L. }
Memory.defaultHeapSize = 0x8192;   
: [' s% Z1 W# |7 U$ [. kIdle.idleFxns[0] = "&LEDStatus";* G# L+ V, v- c- g  s& U  z
Cache.initSize.l2Size = Cache.L2Size_32K;: X' B* ^7 H2 v/ S

5 n8 Z3 ]* X8 e6 }6 F. `
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-12-18 13:55 , Processed in 0.039583 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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