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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2015-9-4 08:33:31 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
创龙工程师你好,我在OMAPL138单独调试DSP程序(使用SYSBIOS)时,在任务中使用calloc函数动态申请内存,用完后free,类似如下结构
: ~7 @1 Y3 p  t# k& F) a9 I0 V+ x1 l" O4 }
    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //2569 x( ^- q; N& @, X; |2 i
) P4 J! v' B( y4 p
其他程序段。。。。。
8 B* i1 G1 K( K; u) u/ C! [( }
- z' K6 N- H$ E" H8 E/ J) E   free(x_d);( v9 S8 E8 u+ X$ l
( l8 b/ y4 @; M1 N) Y. M
使用DSP侧单独调试功能,验证动态申请没有问题,( t" h  H& W. H, s. P

% B+ ^& o2 z, L0 F' Q+ n1 X8 L7 x但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。" B, \" `- S) k  ]( j  U

* F3 G& z0 C; f+ c2 p4 Z% F" C' Y/ L9 R
/ x# p  G" I6 ^9 Y9 d
, N0 P; K$ m% G8 f
0 L% x+ s2 V8 B/ d+ r6 G! L

+ |; W6 `! Q" x7 t7 f& Q' N5 A! i2 W2 O: [! }
+ L, Q9 l7 ~( }2 a8 Q; u3 h) p

+ ]8 \' l0 K! p/ n7 S* u
- l/ A- k4 p$ F$ g+ ^
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2015-9-4 10:29:21 | 只看该作者
补充说明; A4 S6 {+ c0 _8 `! @8 S4 K  F
我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下, Z% F( q7 u' Q, Z6 r7 m! V1 c
(不过疑惑的是,为何单独DSP仿真就没有问题呢?)
1 S* j3 ~) s9 s% {2 ]
+ Z( B( R% s0 Q) T. L6 M
是不是需要在DSP.CFG中进行配置
2 M; T8 a9 o  Q9 o0 S( E6 L% K* K我现在的配置为' l2 b4 E" d# m4 h) R. `
7 ]' T( S) n3 }9 _" |7 W3 p
/*
! d4 L# l' L3 }" O *  ======== Operating System Configuration ========3 k2 u  J$ M' \- V0 E4 e" U
*/
9 i% Y, V8 I5 W0 A" I/ S( P1 x
5 O/ Q& S' s. `/ D' c/* no rts heap */
- X5 z8 O' x1 J, AProgram.heap = 0;
, y+ q! m' j  i7 c4 NProgram.argSize = 100;  /* minimum size *// L9 n% j9 y6 d
Program.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大
7 C6 Q6 `; Z+ L) w- S/ t8 F' w: |' u% g( s: Q) @1 u0 L% c, K
/* create a default heap */
7 y# W( @; U" V) Z6 j# v& U( |var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');# w' f8 Z+ \8 p
var heapMemParams = new HeapMem.Params();& P, P) T6 A+ y) n) `! Z; H
heapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大
9 H/ ]% P8 a9 }, H5 v1 [. B- N2 h; T% g- {2 D3 Q
var Memory = xdc.useModule('xdc.runtime.Memory');
$ X) r9 I7 T7 o: r4 v/ P9 hMemory.defaultHeapInstance = HeapMem.create(heapMemParams);
  q0 V1 m5 N$ S
* S2 }- L* X2 f/ E$ ?/* configure System module */8 e' z, k* ]9 V: K& N
var SysMin = xdc.useModule('xdc.runtime.SysMin');
$ r" D; Q, H! H! M# wSysMin.bufSize = 0x1000;
' a* K  ^* E& D  w3 B: H4 `. I# e, ~SysMin.flushAtExit = false;- f; B7 p' n) k% x% n
0 f  P( m7 _! v- B; Q# a
var System = xdc.useModule('xdc.runtime.System');' O( C9 ]: [0 g6 x( ^+ X8 R
System.SupportProxy = SysMin;7 K) u  _: p, F6 i0 g' q

+ z. I3 }9 I* B  z( s3 T& i1 S' ~/* configure SysBios to use the lower half of Timer 1 */
4 y# @1 s7 n. R6 I! v; {2 y9 r# l, Nvar Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');
2 t1 f% S% ^, a1 v; @3 N5 vvar Clock = xdc.useModule('ti.sysbios.knl.Clock');# _$ @7 Y& t+ E" z
Timer.timerSettings[1].master = true;
9 W0 q+ f& s: C0 R4 o7 @* |5 {Timer.defaultHalf = Timer.Half_LOWER;) J6 i# I/ n( l. l$ h0 ]# {2 M
Clock.timerId = 1;
- g' O/ m1 Y9 _! S; g' ]' A2 l5 i2 D: C- }/ z+ h
. t2 a6 Y: f; j6 H
/*
, ]/ w0 t/ Q0 j/ j/ r *  ======== Miscellaneous Configuration ========- z0 T" B: N$ g0 Q+ \/ X# J2 z/ o
*/  s+ a5 z3 j4 {& ]5 w

' B  `0 R! O+ x( S! ^5 y5 @* _/* set default diags mask */
1 d: U2 Y( Z5 n3 _. ?: z: g% hvar Diags = xdc.useModule('xdc.runtime.Diags');% M/ Y" i3 C  S+ Z
var Defaults = xdc.useModule('xdc.runtime.Defaults');
; a3 o' y5 [# s% h* Q+ @& s7 m* d/ h6 l, `4 [& t
Defaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;0 E2 D5 g4 r& g: N; S0 r* J: T& H
Defaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;: H. j, b  f5 H
Defaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;. n' }8 E6 @0 e9 ~
Defaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */* A1 S! g: q3 b
Defaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */7 N+ z& }# {) }0 O9 g
Defaults.common$.diags_STATUS    = Diags.RUNTIME_ON;' C& _* a5 d% S" _8 ]- o
Defaults.common$.diags_USER1     = Diags.ALWAYS_OFF;3 ~% `- G4 Q" K: U/ r  J& W
Defaults.common$.diags_USER2     = Diags.ALWAYS_OFF;
1 _$ G5 b, {& D8 ]$ J9 b2 rDefaults.common$.diags_USER3     = Diags.ALWAYS_OFF;
" r5 Y2 b+ G$ h5 E: o" B( d6 uDefaults.common$.diags_USER4     = Diags.ALWAYS_OFF;, b% ~! H: G( i. ^& m" {
Defaults.common$.diags_USER5     = Diags.ALWAYS_OFF;- ~1 z9 ]6 R: P
Defaults.common$.diags_USER6     = Diags.ALWAYS_OFF;
9 _: S/ J, K. b1 [& lDefaults.common$.diags_INFO      = Diags.ALWAYS_OFF;. R. C6 Z% _5 \7 J( b# Z
Defaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;* Y+ K1 {7 U7 V! r+ q5 A$ t6 B

' }* @, K4 }+ m/* override diags mask for selected modules */
; c2 k0 k0 ^1 Mxdc.useModule('xdc.runtime.Main');/ e% G' K) P% m( z1 Z7 Q7 q" ^
Diags.setMaskMeta(% t! n& Y  @3 V
    "xdc.runtime.Main",
5 T/ b$ P/ l  f- E# E) y, S# y    Diags.ENTRY | Diags.EXIT | Diags.INFO,
5 `; K! j; A6 m/ e# R) Q6 M    Diags.RUNTIME_ON
1 t  u# @; h6 }3 P$ A( h' M! ?9 ^);
3 u* h6 @  v8 i5 \- G3 _/ x: Q: N  ]4 R  w
var Registry = xdc.useModule('xdc.runtime.Registry');
: T" g; \& |3 \% b4 M( ~( b1 y) IRegistry.common$.diags_ENTRY = Diags.RUNTIME_OFF;. Y0 w  F+ Z. O2 N/ j! C! y
Registry.common$.diags_EXIT  = Diags.RUNTIME_OFF;$ D% r: s9 z/ z8 Q1 ~
Registry.common$.diags_INFO  = Diags.RUNTIME_OFF;0 |$ g$ Q: N! `/ o4 i, l
Registry.common$.diags_USER1 = Diags.RUNTIME_OFF;( U2 c% t9 Y) N

3 ^! T$ k$ Q* l1 \( v/* create a logger instance */# ~7 C0 E, f' F5 h. y. S1 q% X$ f1 |
var LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');  |- L; ?6 n' L9 Y( i3 ?, S0 \. a# U
var loggerBufP = new LoggerBuf.Params();
7 V+ n8 I2 m. I( L& _3 V7 ZloggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */7 e& g, U) ~: r# V" F1 ?
loggerBufP.bufType = LoggerBuf.BufType_FIXED;+ L0 E. n, F" d( ]
2 U$ i. t+ ]6 E5 D* O9 g; ~9 C
var appLogger = LoggerBuf.create(loggerBufP);
! W% i* ]; \$ {; F$ ]8 B. P2 C3 bappLogger.instance.name = "AppLog_Core1";
( I% c' O4 s% @' HDefaults.common$.logger = appLogger;: L! c" q. g9 h/ m
Memory.defaultHeapSize = 0x8192;   
4 n( ^; x6 A6 iIdle.idleFxns[0] = "&LEDStatus";; O7 b7 I& S7 h) `. A
Cache.initSize.l2Size = Cache.L2Size_32K;
$ I1 p% C, {' Q8 o
' }7 F( J$ i0 a' g; J5 L' I
回复 支持 反对

使用道具 举报

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 */
9 M/ B" {$ O8 _- B% Rvar HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
8 t1 X9 H2 B% e0 Tvar heapMemParams = new HeapMem.Params();
5 d6 k9 F6 ~* c4 W: D* zheapMemParams.size = 0x4000;
# L  N7 K) x1 J! y3 k: |  v5 W! J: y; p) F5 t
var Memory = xdc.useModule('xdc.runtime.Memory');
+ b* }3 I9 q0 E) X; J7 TMemory.defaultHeapInstance = HeapMem.create(heapMemParams);
9 G9 \' O, }" l' e1 d7 B+ ?$ ~* W8 w% e6 D4 }# [. _1 w) w! p
我大约calloc  每次共计大小为5K*16bits,
3 A" m6 R9 ~/ J5 \- Y0 Z4 E而默认配置才0x4000、需要改大。1 R2 Y6 X/ u( ?+ Z
; B; a9 R/ p% [4 m3 g* n
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
5#
 楼主| 发表于 2015-10-28 16:14:47 | 只看该作者
/* no rts heap */) ?) I: @" x* x! R* i; ^$ m
Program.heap = 0;
+ \0 J* S3 K8 C! E* y' kProgram.argSize = 100;  /* minimum size */
  `5 G) m9 j( j1 a7 m6 y- BProgram.stack = 0xF000;                   //我改到F000  也不行
回复 支持 反对

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

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

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2026-2-17 14:06 , Processed in 0.044843 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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