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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2015-9-4 08:33:31 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
创龙工程师你好,我在OMAPL138单独调试DSP程序(使用SYSBIOS)时,在任务中使用calloc函数动态申请内存,用完后free,类似如下结构5 _0 B' ?* Z) \, E! ^
0 |: r) J. x) h/ C
    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //256
, J7 `6 D1 G) t) x$ l5 N. j" u% _( I2 d" V' L( r
其他程序段。。。。。
% s7 }1 |8 ^$ ~# _0 r+ w 6 ?: Y) [( x) C! d3 r8 M- W0 h
   free(x_d);
! ~8 @4 H7 W* _0 ^, k' f8 L4 |( v% {4 E+ o. Q
使用DSP侧单独调试功能,验证动态申请没有问题,
  f" c5 {+ x) l; W% X( o- p. N1 n# S5 }3 H6 D
但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。
' x( X  `) g( F) ~
8 L8 ?' u1 @: f# B+ S. X! V
& d& q$ ]$ i1 W1 v  H: H

1 k6 s6 Y( G  b  S+ r* E
( G# [: G& r1 O1 ]% z$ z* q
# P8 t4 e* Y( w2 h
2 _/ I3 l  l5 J. Q: u
& s4 E0 a/ }  I! L" {
, ^9 c+ p7 {* E; V6 J2 Y3 D
# g( G# U+ ]& U( t( N3 v3 S% D( {9 x* Q1 s
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2015-9-4 10:29:21 | 只看该作者
补充说明8 H' J4 ?  N6 s. W" C$ O. {3 L& h5 e
我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下
* v* K1 A( y  C3 k. D* k$ t; d# I(不过疑惑的是,为何单独DSP仿真就没有问题呢?)0 L" p: ~  V+ |7 @# D, v, U- S
' K' v9 q  M5 v) ^3 j- Y
是不是需要在DSP.CFG中进行配置
. t$ D( p' h9 K* e我现在的配置为
, ~- Q: H0 j( S9 n4 c! [' E# X: T* q+ Y% [
/*
" b$ l# F# O1 C9 ` *  ======== Operating System Configuration ========
2 m/ N0 T* g; I# F" {! o* i */. ]/ Y6 \0 j2 w% E" N

0 X% r* @; M/ a$ g  D2 b/* no rts heap */
8 w: w* L/ W- S: XProgram.heap = 0;4 G6 [5 p5 f/ Z% X, z) r  I
Program.argSize = 100;  /* minimum size */
7 [0 r& t! E+ ^9 t6 b) V1 c  w; cProgram.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大# ^) P( {; Q* L* [& ^( ~

4 F2 Z$ b+ H7 F& O/* create a default heap */. S& R& \. I6 Z% m% G; k& r0 e
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
5 s3 E& T. U. T( X+ a( Wvar heapMemParams = new HeapMem.Params();2 h5 D) G. Y7 S( d& N
heapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大  D3 ]) g; s; i& t" o) L  c5 w
& x$ F/ s  x3 U. r; y5 t! z
var Memory = xdc.useModule('xdc.runtime.Memory');6 x4 Q% _2 ]0 k4 G7 k8 F
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);
9 N/ w; u! \; w# ]
( F' |: G$ [8 V' z) D/ Z/* configure System module */9 w6 p6 c4 y0 V4 V: L
var SysMin = xdc.useModule('xdc.runtime.SysMin');2 \& c6 I" j4 ~& Y
SysMin.bufSize = 0x1000;& y4 g, H& v# \; B* m3 \  v
SysMin.flushAtExit = false;
' p7 N$ C, k6 |
; M  v0 w4 c( e$ j. Kvar System = xdc.useModule('xdc.runtime.System');% r* l( C* B4 C+ ^! L6 h9 ~
System.SupportProxy = SysMin;5 [# `3 a, `. H8 C& s/ ~* J
3 Y9 i* D6 e3 o2 W+ p1 P4 M6 {
/* configure SysBios to use the lower half of Timer 1 */" m5 O% A/ `- l$ l
var Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');4 P# e/ F2 w% S- ?
var Clock = xdc.useModule('ti.sysbios.knl.Clock');/ v2 J) Y- a! S. Z4 I6 ^
Timer.timerSettings[1].master = true;5 |% c7 a* v# z
Timer.defaultHalf = Timer.Half_LOWER;: n( @# v( i0 [4 R* l# }* f
Clock.timerId = 1;2 k) q& x7 L9 |4 q/ U$ c
( O1 c" f5 x5 o. l. b
: t, @! O, @! S( X7 T5 `
/*
3 L) k5 Q+ g- x- s6 ^2 e+ p- w% D% V *  ======== Miscellaneous Configuration ========% X  ~" k3 Q' F
*/& {1 Q  c* F) L0 w9 }

) Y% u7 b, e8 J: K- ?/* set default diags mask */
+ ^( h4 |& i8 l3 nvar Diags = xdc.useModule('xdc.runtime.Diags');! ?+ R& P) s% W
var Defaults = xdc.useModule('xdc.runtime.Defaults');9 C( R' w+ B8 X2 w8 X6 C

! v% p8 Q, p8 w) h1 w% fDefaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;- c* k9 m( s. w9 E1 e. X9 Q7 O& G
Defaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;+ _! ]! V# o$ p" S% }
Defaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;6 R; @7 J: y, Y5 r, E" V  j
Defaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */4 D4 n2 |  D& n/ o/ s# c' K
Defaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */
6 E6 |1 y# o: z2 M9 J8 z$ z# r. xDefaults.common$.diags_STATUS    = Diags.RUNTIME_ON;. d9 F+ {! E$ Z: F( S- B
Defaults.common$.diags_USER1     = Diags.ALWAYS_OFF;
2 q) |4 ^( C( h8 IDefaults.common$.diags_USER2     = Diags.ALWAYS_OFF;4 Z; G7 V5 p/ L! C& i
Defaults.common$.diags_USER3     = Diags.ALWAYS_OFF;
* y2 Y9 D# X7 C: YDefaults.common$.diags_USER4     = Diags.ALWAYS_OFF;0 S% G$ j5 y' L, W: S- b: e
Defaults.common$.diags_USER5     = Diags.ALWAYS_OFF;/ j+ p% E' {$ q; }5 Y' Z
Defaults.common$.diags_USER6     = Diags.ALWAYS_OFF;
" `7 s* v2 q/ F  ~6 dDefaults.common$.diags_INFO      = Diags.ALWAYS_OFF;
* n: d' ?7 [( WDefaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;) T* W7 R  ]  S9 q9 e

& q& |- Q0 e. S! i/* override diags mask for selected modules */
/ u1 {; g4 {- ]8 f  t- u( dxdc.useModule('xdc.runtime.Main');5 @, c) i/ m( Y5 h' i
Diags.setMaskMeta(3 a+ `- k8 _0 Q: ~/ P
    "xdc.runtime.Main",
: q6 H6 ?0 e5 ?% B    Diags.ENTRY | Diags.EXIT | Diags.INFO,2 u7 s0 Q7 r- Y: u( M/ q- i
    Diags.RUNTIME_ON
8 V) t4 O& g' G" B);
. t+ \- S0 x& [5 B& M
6 h; ~- G$ d. s2 L) _6 Y3 Hvar Registry = xdc.useModule('xdc.runtime.Registry');
4 a6 z& c1 w, HRegistry.common$.diags_ENTRY = Diags.RUNTIME_OFF;$ q. h7 X# h" n! [% _0 U7 ~
Registry.common$.diags_EXIT  = Diags.RUNTIME_OFF;
8 r. L2 j3 N- B% \0 }" X, BRegistry.common$.diags_INFO  = Diags.RUNTIME_OFF;* C' ~7 ^4 D" \! b/ A4 u
Registry.common$.diags_USER1 = Diags.RUNTIME_OFF;6 h3 ^% I  Q8 \/ _# I' v. D
9 j: A- u$ x  q( @5 o
/* create a logger instance */, R3 K* t% ]" z# A# Y
var LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');* b- f2 L) k- o$ l, z" o7 G" V; `7 h' _
var loggerBufP = new LoggerBuf.Params();
3 c* T2 [& {& Y/ a! c6 q8 p3 W1 a# KloggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */* o. m! U  Y) K
loggerBufP.bufType = LoggerBuf.BufType_FIXED;8 o" Q: J/ X0 @: z( L: m. _6 n$ w$ @
0 p8 F- u- [% X- R9 u
var appLogger = LoggerBuf.create(loggerBufP);
0 |+ Z$ z7 U4 T' NappLogger.instance.name = "AppLog_Core1";) S  Y! Q' K( n6 _& i
Defaults.common$.logger = appLogger;
) j1 T5 g0 r+ \$ GMemory.defaultHeapSize = 0x8192;   
; L  c0 x- g* TIdle.idleFxns[0] = "&LEDStatus";3 l* |8 Y+ I. L+ g% X2 z) k4 T
Cache.initSize.l2Size = Cache.L2Size_32K;
9 P# ^" R5 k  `6 {) q' R9 O" _  l# J4 j7 a2 Y) g
回复 支持 反对

使用道具 举报

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 */* ~. v+ ?: z  h+ E' ?* A
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
/ \8 [- Y6 q! v! s$ H5 ivar heapMemParams = new HeapMem.Params();) p# G: m( B. l$ r
heapMemParams.size = 0x4000;! P5 m$ |; Z8 D  r- _" V

4 i; X& m2 D! h& J, D0 c" Uvar Memory = xdc.useModule('xdc.runtime.Memory');
5 `5 d8 a% m7 ~0 a- wMemory.defaultHeapInstance = HeapMem.create(heapMemParams);$ F$ `3 L7 x2 [8 U  G: K: u
3 y; ]& j2 V( k4 z- `2 [5 Z; J
我大约calloc  每次共计大小为5K*16bits,
3 @8 R6 H2 ?3 e% x3 R: |而默认配置才0x4000、需要改大。: X; y) N0 a! e, e6 v$ U

' {" }+ |" ?3 B
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
5#
 楼主| 发表于 2015-10-28 16:14:47 | 只看该作者
/* no rts heap */
! Q7 U9 S* C6 ^7 lProgram.heap = 0;/ K; @) v; S) i! J, @6 w& A4 l
Program.argSize = 100;  /* minimum size */, @- g% I3 H3 u
Program.stack = 0xF000;                   //我改到F000  也不行
回复 支持 反对

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

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

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2026-1-19 13:11 , Processed in 0.042157 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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