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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2015-9-4 08:33:31 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
创龙工程师你好,我在OMAPL138单独调试DSP程序(使用SYSBIOS)时,在任务中使用calloc函数动态申请内存,用完后free,类似如下结构
1 w' [' D" D7 y; J, w' N9 @% ]" G: z4 [: v
    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //256
# J" P5 z  ?9 s/ i3 [9 g9 Y3 X! {' B) Z
其他程序段。。。。。
( e4 p5 E7 R  v( g- D/ S. K4 ~! t
: Z: I: Q& c. Y2 s+ F+ u: k   free(x_d);" J) |8 \  g1 m/ ]5 I9 h$ b1 ?

8 U$ e8 A/ H" {" x: ?) ]使用DSP侧单独调试功能,验证动态申请没有问题,6 u) H/ C, `$ ]" O

6 R/ s2 m' M% z, _5 j$ U" g, z/ O6 K但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。% `5 k' c$ n( A9 R
5 y& g5 t( V! ]7 G6 P6 A  {
- `" O: H5 P2 ~0 C) I- b
! ^, r" [  k- H0 m

! x6 F  U. W& L; Z( c& N! z5 S9 R/ |+ z" y# M7 r6 m
. n# T" C  c! ~* l. k' m
( Z: Z) q  ?. E: S
  J* G1 v( T9 z8 |2 D

* N6 b* {4 d/ q7 O% }. I4 ?- s6 B
% {- X+ `4 h% L; a9 n
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2015-9-4 10:29:21 | 只看该作者
补充说明/ I8 s- G" ]( S$ X; y' q
我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下9 I* d- |% s  \
(不过疑惑的是,为何单独DSP仿真就没有问题呢?)9 r6 j/ n2 L& F

* z0 q* P4 i) _: O6 L& x是不是需要在DSP.CFG中进行配置$ Q$ f* j# @+ a$ {5 s+ o
我现在的配置为
4 ~+ B9 \$ K5 p! _+ Z1 Q" G9 K
. r2 g# q# O2 S& ?" @/*
/ D! Y5 W( Q2 W: h  w" A *  ======== Operating System Configuration ========9 `3 K  r4 C4 A4 A
*/
: q, e5 ]4 d& }- C
" s/ Z) X( h/ K' K! I/ T2 N% G4 O/* no rts heap */+ q( \) s! T  H  @# |- R
Program.heap = 0;8 ?2 i6 q) [. W+ l% R0 ]. J
Program.argSize = 100;  /* minimum size */  h9 o7 q. a3 u( f9 c# J3 C/ M
Program.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大7 n3 R6 J4 I' F

8 S- A+ _" C; F2 {- ^; c/* create a default heap */4 Y1 _) ~& ?. G% u5 ~, M& q/ {
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');( `2 j3 M6 l, f/ i
var heapMemParams = new HeapMem.Params();& A- e6 g; L3 U/ H
heapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大
: l1 ~! ?& w5 r
, t/ {  A& S0 b( I- Y% U. j
var Memory = xdc.useModule('xdc.runtime.Memory');
2 H) V% J+ y. t/ q7 ]. |Memory.defaultHeapInstance = HeapMem.create(heapMemParams);
& ]( n. {3 L8 }& S/ ^% K" n, m4 V- B* n3 U$ T
/* configure System module */
' s( `1 v: ~, g' |7 Z4 }4 W  Kvar SysMin = xdc.useModule('xdc.runtime.SysMin');  v9 ]9 S4 \) f; O7 A
SysMin.bufSize = 0x1000;7 s' o! T5 U4 ~4 r4 m" [& Q  S! e
SysMin.flushAtExit = false;+ o" c: R- X2 z

9 o: X% U, ~% fvar System = xdc.useModule('xdc.runtime.System');/ k3 V8 J( Z) S
System.SupportProxy = SysMin;  Z) E4 @7 |* A6 r. G9 |
3 I! ~  k/ R, o
/* configure SysBios to use the lower half of Timer 1 */7 x* N! G- x' J& _: B
var Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');, y& i; \; ^6 [, o0 f( m7 u
var Clock = xdc.useModule('ti.sysbios.knl.Clock');
4 f  @" r7 u2 c) bTimer.timerSettings[1].master = true;
1 c' J# |) ~) i# R$ N: n& M9 M7 ?Timer.defaultHalf = Timer.Half_LOWER;
8 i: c% Q7 _' s4 z1 ~Clock.timerId = 1;( P2 E  G$ o9 n2 M

7 X( v3 U6 B2 N( ]1 g' @0 w. ~, h% N1 X6 p6 m; ~
/*
" z& J' s( e( E1 \; k *  ======== Miscellaneous Configuration ========* A* J" t. J: G
*/$ ?- Q+ {. B+ P+ U1 G- k

- K# H, F9 y* n9 S9 B1 ~/* set default diags mask */" ^& {& O, D6 Q  M/ g
var Diags = xdc.useModule('xdc.runtime.Diags');2 U. O6 Q2 [( v$ Z$ C
var Defaults = xdc.useModule('xdc.runtime.Defaults');
" N5 Q: N  Z" q+ [* h0 j, k! r/ M4 t+ f9 j, u; U
Defaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;
) x: Q$ D- v; Z' LDefaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;
( E; B( X7 R! ~1 v$ v: yDefaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;
/ _2 B. E+ \- U2 G4 i5 [3 oDefaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */
7 B2 |4 D2 ~2 }# W& N6 g5 W! [Defaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */
! O# N% P. Y9 n9 G% P2 U( g: \Defaults.common$.diags_STATUS    = Diags.RUNTIME_ON;9 A# [: d' i  x+ A/ x: L
Defaults.common$.diags_USER1     = Diags.ALWAYS_OFF;
# ?2 [/ |# K+ H' h7 c4 w" O' hDefaults.common$.diags_USER2     = Diags.ALWAYS_OFF;. r# |6 `4 ~, i% y! Y, K  K3 N4 J6 p
Defaults.common$.diags_USER3     = Diags.ALWAYS_OFF;
$ d4 a$ e: c9 B) eDefaults.common$.diags_USER4     = Diags.ALWAYS_OFF;, q  @1 B0 z0 M& C9 a# p2 L  D
Defaults.common$.diags_USER5     = Diags.ALWAYS_OFF;% L: h# ^; M! t3 |" Y" r
Defaults.common$.diags_USER6     = Diags.ALWAYS_OFF;
" o2 P( j/ W+ Q1 ~" V3 \Defaults.common$.diags_INFO      = Diags.ALWAYS_OFF;
! O. W$ f1 f# sDefaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;8 H6 f) @+ ?1 M. l; G. F
( `5 ]" _( Q7 X7 q1 T  a
/* override diags mask for selected modules */6 }0 z$ I2 Q+ L# Z0 F2 @
xdc.useModule('xdc.runtime.Main');1 ?* Z. C8 C3 B
Diags.setMaskMeta(% N& c5 g7 p% F, k0 D
    "xdc.runtime.Main",9 U+ _! L4 N( b& T
    Diags.ENTRY | Diags.EXIT | Diags.INFO,) _+ }  |- }7 c8 J' I9 ?
    Diags.RUNTIME_ON5 s0 [* m6 L0 W) ]9 U0 j7 O
);
' ?" C* D+ m, `1 k
$ w8 w$ d$ O3 ^2 ivar Registry = xdc.useModule('xdc.runtime.Registry');1 \* `- e5 l- N- H9 E
Registry.common$.diags_ENTRY = Diags.RUNTIME_OFF;
: T+ M% c: k8 F/ k9 D% \+ F/ URegistry.common$.diags_EXIT  = Diags.RUNTIME_OFF;
3 O- A: H# l& F# V1 V8 Z6 V* dRegistry.common$.diags_INFO  = Diags.RUNTIME_OFF;& ^8 t% E# N& d- A' ^
Registry.common$.diags_USER1 = Diags.RUNTIME_OFF;
! e4 E5 H5 Y* E3 [: M" Q; J, |, `$ V# W3 B2 G4 q6 h' \0 N6 S0 s
/* create a logger instance */, A1 J2 D+ }6 O. U8 v
var LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');' c& E% r% R/ H+ ~) a$ m% g- g5 E
var loggerBufP = new LoggerBuf.Params();
6 {  g& Y) V9 OloggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */
; J" k' P: }2 Q7 H4 jloggerBufP.bufType = LoggerBuf.BufType_FIXED;
' d4 m7 A6 f; d+ l) J) o
, Y9 c* N. V' R3 lvar appLogger = LoggerBuf.create(loggerBufP);2 ^6 g& L( v( W" b
appLogger.instance.name = "AppLog_Core1";  j+ {& |5 N) y0 F* y+ e6 n
Defaults.common$.logger = appLogger;$ ~4 b3 L) L$ l5 W) P6 N
Memory.defaultHeapSize = 0x8192;    # R  H1 {1 p" Y! |
Idle.idleFxns[0] = "&LEDStatus";; Q2 G. q0 K) I: z5 p0 [0 @5 B
Cache.initSize.l2Size = Cache.L2Size_32K;- c5 n# i$ [2 T) t+ a0 z0 J8 O

+ H/ E! Y9 Y) f2 x$ p3 T, B- P
回复 支持 反对

使用道具 举报

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 */
  r+ ]9 \5 O* Q& `( ivar HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');- f4 h) f: o- u' F- g* ]5 \0 g6 @% U8 j
var heapMemParams = new HeapMem.Params();
+ v% d0 Y, M5 x- a' J# q1 sheapMemParams.size = 0x4000;
% t5 N& \4 l" X9 E4 U9 B& W& d, P: e( h6 R+ I) K3 |/ d: N
var Memory = xdc.useModule('xdc.runtime.Memory');
7 g$ U- n0 e" n% S# X$ [! BMemory.defaultHeapInstance = HeapMem.create(heapMemParams);: q, E( Y! }$ `( ]% n

$ R* D- y7 h# Q我大约calloc  每次共计大小为5K*16bits,+ L+ B/ I3 o) A. E0 G$ u; _) n
而默认配置才0x4000、需要改大。
0 x  P! w. ?+ ]5 g9 r/ O6 M1 c* w" g  v5 W: q. P* F6 q0 R
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
5#
 楼主| 发表于 2015-10-28 16:14:47 | 只看该作者
/* no rts heap */
& X* k6 B; Y- w0 B  wProgram.heap = 0;0 H3 h  s- ?* ^
Program.argSize = 100;  /* minimum size */
* r; j# e3 H+ s* p7 sProgram.stack = 0xF000;                   //我改到F000  也不行
回复 支持 反对

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-12-2 22:05 , Processed in 0.046615 second(s), 26 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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