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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2015-9-4 08:33:31 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
创龙工程师你好,我在OMAPL138单独调试DSP程序(使用SYSBIOS)时,在任务中使用calloc函数动态申请内存,用完后free,类似如下结构
/ T* S4 u' n9 [$ c6 ~- Q& V& j: H: z) P# W
    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //2566 L  Y9 D4 Y; D6 f+ P, ~

: d/ l0 q& g6 j其他程序段。。。。。# F$ }, Y- Y+ z& D) G$ Z* e; X! {( n

' s- l0 B7 K5 I, d$ s. i   free(x_d);& ?, z' l( P4 X  o* W
  R+ p5 A% }! w! y; T
使用DSP侧单独调试功能,验证动态申请没有问题,2 {5 j* O% Z) j5 t
5 ~$ s6 i" `* G8 U. N( H2 H- G: P8 g
但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。4 T3 ?) [$ y6 y9 o( r" ?

4 v4 z, |3 Q7 ^
% X: Z: t# u0 m' E
. p: P% D  N  P1 h% w8 ]6 z' I; f& D
) v3 x) A) [+ T- k8 r" A8 Z4 D2 e9 {. H* k9 c. q( O
* z$ e$ S" E' [- z6 o: B

3 N$ z; |& l0 ~9 P- @! m/ J# n* u0 C; l! }4 n
! S# \" p% i  d8 X, v5 k+ j% y8 {
; G& m# n5 V1 ^& `4 s
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2015-9-4 10:29:21 | 只看该作者
补充说明
0 U  J6 L  }" m1 w7 M我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下
3 |8 s( {5 @2 O# f2 v(不过疑惑的是,为何单独DSP仿真就没有问题呢?)! t0 }9 t, z- A9 l$ l9 o7 t
' R* ^! x2 b9 U
是不是需要在DSP.CFG中进行配置
( ]# x$ ~2 _3 u1 l, i/ l我现在的配置为8 t+ e* L7 t8 i, I* `# g2 u% x$ z
4 ?; e. v0 I. K9 d0 q! T
/*
% F9 g. e8 a- u6 }% x *  ======== Operating System Configuration ========* _$ |( Z' [, `4 G3 ^$ V7 ?+ N; h! l
*/
/ n/ @( v9 G3 o# u
1 H3 M" u. O7 P' p9 d/* no rts heap */( o: b" j6 I2 E1 J
Program.heap = 0;
5 Q4 j& U- y0 t% h; fProgram.argSize = 100;  /* minimum size */( b' B" F# v1 ?
Program.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大
' H% t8 t7 m$ ~5 Q* ]$ Y* U0 N. L: g9 E# M3 L4 e' i9 u. [
/* create a default heap */  X2 [" o& J% X3 [. }
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');" B& E9 d) s! i" ^- e. |
var heapMemParams = new HeapMem.Params();1 T8 |4 i. u2 K, _& P8 d9 T
heapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大* y4 {1 ]: @4 B6 k

5 C  [/ r! N8 S* }
var Memory = xdc.useModule('xdc.runtime.Memory');" b! d  I' t1 m
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);
, J0 j4 W, E8 {
5 u/ X3 [1 T" h  Q  ^: T/* configure System module */4 `' w8 H, Q5 w
var SysMin = xdc.useModule('xdc.runtime.SysMin');
  q$ z7 d! P5 ~! N3 e4 ]+ xSysMin.bufSize = 0x1000;9 D+ ^& n( Z& v: r
SysMin.flushAtExit = false;
) n( N( {2 }. ~4 O
. P' l7 n. u" M( lvar System = xdc.useModule('xdc.runtime.System');
& k3 V, G/ A/ l8 n' [5 bSystem.SupportProxy = SysMin;
# ]2 y4 t# Q1 q# K! q, f
, v* ?+ Q7 J9 S" c, T( I/* configure SysBios to use the lower half of Timer 1 */- a# V" D$ s) P
var Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');. [. I: ^, s# X% X, F
var Clock = xdc.useModule('ti.sysbios.knl.Clock');' V$ Y- @; ~" M& O  D; A' t9 H
Timer.timerSettings[1].master = true;
& b% K) e1 O- ?% j; G3 fTimer.defaultHalf = Timer.Half_LOWER;6 ~9 S- \$ f" b) m
Clock.timerId = 1;
, G7 g4 S5 J5 P! B/ m, P8 V  n7 t1 f4 `6 I3 b3 i2 P" j& P/ m
+ y: T2 }* E- e- E* s
/*
/ L6 M' `- E  u3 p *  ======== Miscellaneous Configuration ========. E; R/ s" i1 U- Y
*/
9 K0 h$ j9 Q7 v. c/ \' R
/ T! d2 J  n) V5 _/* set default diags mask */
6 k% U/ E0 _4 S3 G" k- svar Diags = xdc.useModule('xdc.runtime.Diags');
5 B' _( I3 Y1 c* [var Defaults = xdc.useModule('xdc.runtime.Defaults');* N1 }2 O9 {) U5 \

+ e" D9 U6 Z! \4 M" HDefaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;
* T* `9 `$ C6 ]# ^5 dDefaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;
. U" ~* n4 b1 {$ _$ {, m  _Defaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;
% \" t1 Q3 c% I6 f; b1 @Defaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */" Z4 T- k* d8 p4 A$ Y
Defaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */3 s. ~8 M! d8 [% ^
Defaults.common$.diags_STATUS    = Diags.RUNTIME_ON;
2 _( i$ d' b9 c5 fDefaults.common$.diags_USER1     = Diags.ALWAYS_OFF;
5 J9 T1 A- a7 u6 Z/ F, W" F5 KDefaults.common$.diags_USER2     = Diags.ALWAYS_OFF;
3 z% y& ^* O/ b) NDefaults.common$.diags_USER3     = Diags.ALWAYS_OFF;6 h/ n% c* b  u, z# i* _$ k
Defaults.common$.diags_USER4     = Diags.ALWAYS_OFF;2 i! `7 i: D- N2 U
Defaults.common$.diags_USER5     = Diags.ALWAYS_OFF;
  N. h+ q7 s+ b+ qDefaults.common$.diags_USER6     = Diags.ALWAYS_OFF;/ e# O7 c2 u# ?, W$ T1 T+ x, @
Defaults.common$.diags_INFO      = Diags.ALWAYS_OFF;
2 _' o0 J3 d2 ^2 ~- KDefaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;
0 {$ W0 r1 A" Y- s6 D% q
2 Y& D& I: _4 A% ~3 P  y/* override diags mask for selected modules */
7 j: p' r* `9 s) w) r0 `7 }3 a2 Rxdc.useModule('xdc.runtime.Main');
6 z: ~  }/ M6 x& YDiags.setMaskMeta($ o/ q% e' S' Y5 B3 Y" a( z
    "xdc.runtime.Main",) S% |8 T$ S: x4 O1 g' ]
    Diags.ENTRY | Diags.EXIT | Diags.INFO,
2 t( x* y, J. o; N' e% \' A% r$ I( y    Diags.RUNTIME_ON
2 x7 e4 a. p5 V+ k);4 ?+ `* v! ~5 l( ]. j% W! j
1 Z  X5 U& r; Y. J
var Registry = xdc.useModule('xdc.runtime.Registry');
0 M* D+ t- R$ p# i7 lRegistry.common$.diags_ENTRY = Diags.RUNTIME_OFF;3 |1 F9 g  I- W. B; r0 I' w. D8 l
Registry.common$.diags_EXIT  = Diags.RUNTIME_OFF;
+ m) r; F& z# C8 V# J& ]Registry.common$.diags_INFO  = Diags.RUNTIME_OFF;
; O1 i! f- i8 }$ Y: NRegistry.common$.diags_USER1 = Diags.RUNTIME_OFF;
7 H% H# R0 `4 R8 }9 J
  `5 O) J* P+ h- M/ ]7 e7 V' |2 O/* create a logger instance */. V& r! `- y# q1 a3 J! k: y
var LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');
8 T2 n8 O% ?. Bvar loggerBufP = new LoggerBuf.Params();
8 U0 M* R% x, @3 O# Y' F5 y- EloggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */
; y; e  {# J* M; kloggerBufP.bufType = LoggerBuf.BufType_FIXED;; t8 I; W0 E/ V: A5 D" h
7 M5 [! \& j) I6 X# x; k
var appLogger = LoggerBuf.create(loggerBufP);
6 T# R/ Z7 E* V+ d  g/ f3 AappLogger.instance.name = "AppLog_Core1";
1 V7 r( K+ g: s9 tDefaults.common$.logger = appLogger;& F4 B+ V9 t  C! X: m3 X
Memory.defaultHeapSize = 0x8192;    5 X7 @( C( |) A, C0 |+ `
Idle.idleFxns[0] = "&LEDStatus";% A3 j; T6 Z% M3 G+ ~/ e5 s* y* b* ]6 ^
Cache.initSize.l2Size = Cache.L2Size_32K;
/ L) _; }. v9 s' _
5 s$ H! k2 |4 K. h
回复 支持 反对

使用道具 举报

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 */
8 r9 [9 f) u+ n# P' ?+ m" Lvar HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');2 \6 y# w1 n# W0 ]8 j; J
var heapMemParams = new HeapMem.Params();; b' n* Z0 i! i! M
heapMemParams.size = 0x4000;6 o* x5 H5 f7 ?+ ?7 m! T1 ]* O
2 T# c* Y( D  H. t, E5 x  V) {4 X
var Memory = xdc.useModule('xdc.runtime.Memory');
. `! U$ o7 o$ S+ `% ~1 P8 ~Memory.defaultHeapInstance = HeapMem.create(heapMemParams);! T+ W( k+ S% d' G+ ~) o# R1 l

* o3 Z0 v1 W' \. [我大约calloc  每次共计大小为5K*16bits,+ d! r2 [( d; l7 v+ ?- Y5 t
而默认配置才0x4000、需要改大。
  K( j0 I/ O! E. W3 |6 H/ u6 g' n& V) I: g3 ?0 W* s3 C
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
5#
 楼主| 发表于 2015-10-28 16:14:47 | 只看该作者
/* no rts heap */
0 G& e! o6 V( }5 O- G2 rProgram.heap = 0;+ i8 `5 t+ H# a7 j2 F- w9 I, y
Program.argSize = 100;  /* minimum size */& b2 J+ H' @% I  m
Program.stack = 0xF000;                   //我改到F000  也不行
回复 支持 反对

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

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

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2026-2-20 06:21 , Processed in 0.057209 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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