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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2015-9-4 08:33:31 | 只看该作者 回帖奖励 |正序浏览 |阅读模式
创龙工程师你好,我在OMAPL138单独调试DSP程序(使用SYSBIOS)时,在任务中使用calloc函数动态申请内存,用完后free,类似如下结构) A8 g5 N$ {! {2 o( M

- b: |6 j/ K# V, e7 w$ p( P/ e    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //2565 D! s+ Z2 E: u
3 E! Z$ V& i$ h4 E( d5 e: c0 Q
其他程序段。。。。。. u  B' S5 }! g3 v+ y7 v

7 q; _3 }5 {$ d# \5 D" N   free(x_d);
5 `$ ^2 m" A: A+ ?0 W  |* Q/ i& x6 ?/ r& ]1 A7 g2 m
使用DSP侧单独调试功能,验证动态申请没有问题,2 t  I6 M% C5 S0 l

  j! j% i$ f# v# {6 }" A# [( R' D4 g但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。
) X, y2 j* b- J

; ?2 Q$ L& ]8 n% A% T# N1 |" x7 k
# e) |) v" F7 q
! t: ]2 g+ o6 l) |1 q5 T+ X1 F% B: k3 m) \* z) Z0 t2 R

) h) w  ?0 s% B9 ~7 [- P3 S0 T
8 Z9 m, b" d# T, L' m0 Y- p. Z
, s9 V* M1 e: g. b, G
. \3 l- E' S; _% x% K- l4 t$ [4 x( X  H
1 V& A3 s" O8 x  g4 ]
分享到:  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 */
/ ^1 X2 e' V  x& lProgram.heap = 0;
# P# U0 {5 ~% ?: XProgram.argSize = 100;  /* minimum size */
) v/ p6 B7 M3 b1 f# g. s5 C9 XProgram.stack = 0xF000;                   //我改到F000  也不行
回复 支持 反对

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

积分
1093
地板
发表于 2015-10-28 09:51:31 | 只看该作者
/* create a default heap */
9 B& H; ?7 e7 [$ F2 \" f; r+ _var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');! P" F3 u2 c" g! T  l) Z
var heapMemParams = new HeapMem.Params();
1 C8 E' x, O7 t3 [( ]( [& z+ `' b: F8 aheapMemParams.size = 0x4000;
9 s! k/ U, d2 i
* H+ b" F  Y5 `+ m& u8 H' Qvar Memory = xdc.useModule('xdc.runtime.Memory');
' l* l2 }, f  V+ o4 s" a8 x' XMemory.defaultHeapInstance = HeapMem.create(heapMemParams);
; ~0 `9 r# v4 z) s$ r( C9 U% _6 v. y4 g8 H; p9 `
我大约calloc  每次共计大小为5K*16bits,) ]! v1 r- N2 U2 I
而默认配置才0x4000、需要改大。# g2 D" k9 b0 c/ c

+ e% }3 p2 a2 @# P. I' Y
回复 支持 反对

使用道具 举报

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 | 只看该作者
补充说明
2 Y/ P# l; z* G0 C* [2 y我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下8 A* M  j% ^9 h$ t1 q
(不过疑惑的是,为何单独DSP仿真就没有问题呢?)
$ i3 t! }7 P8 @. x

1 ~/ P+ ^! {; M) n! r1 h是不是需要在DSP.CFG中进行配置
8 U) L- ^: e9 J- ^; x0 }4 Q我现在的配置为, {) W% f3 w! G$ t0 z3 M1 i
& w( G: F4 P( k, A
/*' |" M1 e6 ^/ O! G. B
*  ======== Operating System Configuration ========2 D9 x( [6 W/ Z8 ]& j9 e$ z
*/1 K+ R  m1 o4 i

- E# M+ @/ |8 z8 X$ B9 ^& {8 h7 P' ?/* no rts heap */; Y( [  D* d( a( D6 a3 b
Program.heap = 0;
0 a& G6 y1 E, L' t! v, P: ^1 S# wProgram.argSize = 100;  /* minimum size */" r  g: S- D* |: X# u$ l2 E
Program.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大
3 i4 ?4 v& N' o
1 g- t) c5 }, \4 Q/* create a default heap */
& v, _8 C/ a6 J2 v; lvar HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');' P$ w% W' T; K
var heapMemParams = new HeapMem.Params();- K% X; J1 H8 u
heapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大
$ l* u/ y5 o7 O5 U3 i* a4 x0 }. z9 q4 `% w7 X4 v+ N" O' G
var Memory = xdc.useModule('xdc.runtime.Memory');
, \/ U7 K. B$ L! s% v1 m+ vMemory.defaultHeapInstance = HeapMem.create(heapMemParams);
5 ?1 A1 b, ^( T
: v8 t0 ~. v* w2 ?/* configure System module */8 V8 G$ c+ U# A
var SysMin = xdc.useModule('xdc.runtime.SysMin');
6 X* g6 X+ d3 V' E% J0 n- Q. VSysMin.bufSize = 0x1000;
* C2 w) ], }" u1 X$ n6 b9 nSysMin.flushAtExit = false;3 ?% x( k4 \3 o
$ u  o, m% Z6 G2 @/ V" }0 u- N/ y
var System = xdc.useModule('xdc.runtime.System');, ]2 d6 [. h' x  t- r9 R5 E5 M
System.SupportProxy = SysMin;5 L# D  o7 D+ d, A; ?

: U1 ]$ u/ [$ T) V6 k. a/* configure SysBios to use the lower half of Timer 1 */7 ?* P4 H- s1 j; F0 H+ K
var Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');$ y4 J2 [- b4 l& \
var Clock = xdc.useModule('ti.sysbios.knl.Clock');. b5 ?2 e/ b* U& Z7 T% j
Timer.timerSettings[1].master = true;
8 v' v0 t, W+ g! J* HTimer.defaultHalf = Timer.Half_LOWER;
# ?. G4 x4 B! H! U; M0 \0 C! KClock.timerId = 1;
* m; S; r- o7 j! o; I5 N6 }7 q& V  D# Y) S1 r* {6 L
- {/ l: m3 D8 O) _9 S" w/ a/ j
/*# g/ c& p: g$ Y$ j* {/ q
*  ======== Miscellaneous Configuration ========$ r- t  v; V, a5 Q: Y
*/
! U1 Z* {0 d8 I" M6 u
  \5 Y% C  c6 Q6 {/* set default diags mask */
) ?- l0 T/ D8 W1 w: c+ V, S* rvar Diags = xdc.useModule('xdc.runtime.Diags');
+ e: ?# G+ k) |* ]$ xvar Defaults = xdc.useModule('xdc.runtime.Defaults');5 M, [' D( b% K* F: x1 f
- E1 n# }9 k& u' R
Defaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;( c% s6 r) S1 T- F
Defaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;! K: M* _4 x7 Y  j* v  |( ^
Defaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;
  _# H0 E+ k; D) HDefaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */( Y: b7 u% c( O2 G9 `
Defaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */+ z6 X# k; R5 |% k% o
Defaults.common$.diags_STATUS    = Diags.RUNTIME_ON;! q* q, z& E2 s3 P, t! ^/ M
Defaults.common$.diags_USER1     = Diags.ALWAYS_OFF;
; A' T4 J6 z' b9 J' NDefaults.common$.diags_USER2     = Diags.ALWAYS_OFF;
; [- [( [7 H0 d0 RDefaults.common$.diags_USER3     = Diags.ALWAYS_OFF;9 b+ m4 E, \1 {& U
Defaults.common$.diags_USER4     = Diags.ALWAYS_OFF;- W# ^) \: t/ I' o, b9 B) ~/ D
Defaults.common$.diags_USER5     = Diags.ALWAYS_OFF;' q0 Q9 A) O, z: _1 w
Defaults.common$.diags_USER6     = Diags.ALWAYS_OFF;
) T8 u- Y+ w; x+ h4 P7 ^8 SDefaults.common$.diags_INFO      = Diags.ALWAYS_OFF;
5 W6 {+ m( e# V% n6 sDefaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;
6 q& G3 O( Q0 T0 h; t& j# M7 {2 g6 ~" r) ]
/* override diags mask for selected modules */
' {+ `, o7 m( f3 V. M' O4 Z- Q& s3 {xdc.useModule('xdc.runtime.Main');
4 o% W" l( X4 j3 V& U6 ^. sDiags.setMaskMeta(# k, U% A% X$ s' o% H
    "xdc.runtime.Main",+ V# Q) a8 B2 b: \8 f* b& y
    Diags.ENTRY | Diags.EXIT | Diags.INFO,
% @! `0 j0 Q# B    Diags.RUNTIME_ON/ w) N$ U3 B4 |, K
);
( v% h3 o  h) N; y3 x) r/ ~0 J7 K
+ T& X% Z- b. a! Y# M  Wvar Registry = xdc.useModule('xdc.runtime.Registry');
) Z! c- s2 r# O, |) e3 i7 ARegistry.common$.diags_ENTRY = Diags.RUNTIME_OFF;
- Y6 Q6 D* u) y% Z# E) ?5 R9 tRegistry.common$.diags_EXIT  = Diags.RUNTIME_OFF;
' z( x& t, @# Z# o- A! NRegistry.common$.diags_INFO  = Diags.RUNTIME_OFF;
& R8 d* v$ b0 y+ T( QRegistry.common$.diags_USER1 = Diags.RUNTIME_OFF;
. f8 j9 u+ V$ i# d
& i7 x6 \& q5 p/* create a logger instance */
. x3 U( ]. ^5 uvar LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');
: S+ ]$ k  y8 V: K) w6 ]var loggerBufP = new LoggerBuf.Params();
7 L' m0 u& v6 O4 M+ N( V# h7 SloggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */" O, r( b4 k! d- p" q; j
loggerBufP.bufType = LoggerBuf.BufType_FIXED;
" Q, z3 K( B2 D; u& S5 k# W& i, u* _- e8 W* z/ e. ^* F1 A
var appLogger = LoggerBuf.create(loggerBufP);
" [) C& n2 J  g7 vappLogger.instance.name = "AppLog_Core1";$ y( ?  V+ V* U9 H0 Q
Defaults.common$.logger = appLogger;/ w- C; p9 c; C" l) V! Z% ?* M
Memory.defaultHeapSize = 0x8192;    / v6 P7 F. ?2 X' W0 e* {, t
Idle.idleFxns[0] = "&LEDStatus";
/ X: |4 `! m. d$ uCache.initSize.l2Size = Cache.L2Size_32K;7 P% F8 T2 v, ^( H2 K7 m

7 r" Q" g/ [; B8 V
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-12-16 20:52 , Processed in 0.042949 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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