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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2015-9-4 08:33:31 | 只看该作者 回帖奖励 |正序浏览 |阅读模式
创龙工程师你好,我在OMAPL138单独调试DSP程序(使用SYSBIOS)时,在任务中使用calloc函数动态申请内存,用完后free,类似如下结构
/ x+ ^: N6 o4 V/ Z* o: A0 g1 p& o3 T$ m/ ^1 L$ N8 O) r! K1 @
    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //256
: K1 z. M- v' Z# t
% @* z. [& C! `8 R. Y  c9 B: A8 G其他程序段。。。。。
& [. _. f) H# f; } # Y% c# P4 ~0 ^
   free(x_d);
* W! y8 g, h9 ^
# ^8 Q) C9 J4 a" F8 o使用DSP侧单独调试功能,验证动态申请没有问题,0 t9 S7 \3 e% T+ `
- W2 ^) J8 a7 ~. a! R
但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。% x; }* g9 s9 I) B, i& ?

; P+ \  M* X' B# f  B5 a: ^5 ~3 R7 L% ^1 m( n! L% p% d

) q( d' `/ }- a6 J' I( V. u, m: R5 `" o2 p3 l; L$ t8 M

8 f7 J) ~4 Q2 j# V7 x
. i  g3 [, s% q' o
# \1 r$ c6 B" z8 z9 o. _. f7 F6 R" A  K+ B0 b( ]3 m, c4 f

* h! F5 m1 }6 f, ?+ |, T, c& b' n7 I( R0 g, T/ }( q* k, q
分享到:  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 */& f- K6 k- Z# K
Program.heap = 0;! T- d3 _) A0 |- p- b. v) B1 J
Program.argSize = 100;  /* minimum size */
7 K  u$ d' M/ ^% j# Q' l* G: mProgram.stack = 0xF000;                   //我改到F000  也不行
回复 支持 反对

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

积分
1093
地板
发表于 2015-10-28 09:51:31 | 只看该作者
/* create a default heap */
9 M& j) j6 J& Jvar HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');5 D: J, J5 `0 ^# J7 H7 R) X+ q
var heapMemParams = new HeapMem.Params();/ |" F2 i6 k- C9 Y; a# y/ V  U
heapMemParams.size = 0x4000;- K# x) M$ Q# P/ @7 L2 p1 ~2 U

+ N$ ?  {$ k) S3 b5 L" Z( lvar Memory = xdc.useModule('xdc.runtime.Memory');6 C9 ?/ }% Y! N
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);
  }6 d& |+ T- }3 d# K$ U; Q! B- m
我大约calloc  每次共计大小为5K*16bits,5 k2 M( k- U! O0 ?" Y
而默认配置才0x4000、需要改大。
+ {* j: t4 W4 F$ L; m( h! O; r/ _( R1 e
回复 支持 反对

使用道具 举报

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 | 只看该作者
补充说明
& {+ Q; b  z. z& X  h( Y我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下
0 p0 T- F% U5 C" V) G/ T(不过疑惑的是,为何单独DSP仿真就没有问题呢?)% ]3 s: L# o) u' g+ A; I
1 Z& p0 e8 h3 h; j2 |9 q
是不是需要在DSP.CFG中进行配置, B6 O* @9 ]; R' N7 r+ I
我现在的配置为
3 E0 S5 E4 _3 r" }" ]
, K4 ^# g- q; j* w7 Y/*
7 {4 ~# j+ v. `7 {" F- S' @1 B *  ======== Operating System Configuration ========
! A8 G3 @1 {5 z; P. s *// P) V, \) r- k3 r
, c3 b  f% @2 Q# E& P! p
/* no rts heap */
) q; ]4 E4 Z4 k7 n9 s2 cProgram.heap = 0;7 |/ I7 R( X. [6 a
Program.argSize = 100;  /* minimum size */$ V% Q' t4 T+ w, v! N/ u
Program.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大
0 t+ m$ ?  i+ i- C3 F6 r0 s; U( O/ K5 e( Q" h& b
/* create a default heap */! h8 N5 V4 Q5 v, K; A; \6 C
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
; s2 a; x! D! F3 i" T5 w* t8 [var heapMemParams = new HeapMem.Params();
! j7 |! N: N9 l. A; @  r/ KheapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大
; W9 t$ {! `; A+ |' @* G4 @8 e- }3 q  |* O
var Memory = xdc.useModule('xdc.runtime.Memory');
$ m. S2 R7 W0 ?: y7 S& K. W8 FMemory.defaultHeapInstance = HeapMem.create(heapMemParams);& r; b. {6 [. ^# a& @

0 a9 Q& U  A4 K. E4 q1 l/* configure System module */+ r- k' t& F/ M
var SysMin = xdc.useModule('xdc.runtime.SysMin');
, M( O2 s  N" xSysMin.bufSize = 0x1000;
) [' F8 [, g0 y* _SysMin.flushAtExit = false;
& E) U* w9 U* i: {* s( m& k# k4 b9 i2 `+ b0 V8 _" ~1 ~
var System = xdc.useModule('xdc.runtime.System');
* ]( Q' V, @; N9 }# l7 NSystem.SupportProxy = SysMin;& D' Y# m6 [; l: P1 E/ q
( x- |% q" S1 U
/* configure SysBios to use the lower half of Timer 1 */
. [3 a. t% b+ F/ m9 nvar Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');4 y3 k9 `" g% h+ q* H2 H' d
var Clock = xdc.useModule('ti.sysbios.knl.Clock');
( j7 _# g+ T3 z8 Q5 L( @) e( {Timer.timerSettings[1].master = true;- J. F! D7 c+ q3 ^  y4 V
Timer.defaultHalf = Timer.Half_LOWER;
) \" F% E  U- {2 }3 GClock.timerId = 1;
, `$ o* M% `" v- h! ]9 z$ O8 x8 w
5 B6 D4 Y/ z% j; K% ~
' b) t2 |8 k  f; `, }- Y/*
1 g1 L7 F& T$ E. r *  ======== Miscellaneous Configuration ========0 m. _: H' x) O( h. k" {% y
*/
  [0 M. N1 \8 {9 e
" R2 \& K& O$ V/* set default diags mask */
: n' [% i! z; W6 e% U2 q# c$ bvar Diags = xdc.useModule('xdc.runtime.Diags');
, B3 K: V: |6 M7 i4 Tvar Defaults = xdc.useModule('xdc.runtime.Defaults');- s) U( J6 l6 A
' V! G8 s. v  W+ f' K" l3 h
Defaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;) |5 B; J7 t- J) m, n' M8 Y( @) b! g
Defaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;" \7 B  V! w: O5 }, k5 [
Defaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;
  `+ \& d( m9 N% h$ J- l  Q' |; NDefaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */
! x2 `& P. p% t4 r. ^% ZDefaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */8 F$ s: [/ \. J# l8 u* P
Defaults.common$.diags_STATUS    = Diags.RUNTIME_ON;" e8 q0 A2 |  N; ^3 Z
Defaults.common$.diags_USER1     = Diags.ALWAYS_OFF;
# @+ ^& Z/ W$ K" PDefaults.common$.diags_USER2     = Diags.ALWAYS_OFF;5 b& E1 e+ }3 P4 {9 k9 g/ O( T
Defaults.common$.diags_USER3     = Diags.ALWAYS_OFF;
1 k+ C, \. y2 e3 \$ a, m# [Defaults.common$.diags_USER4     = Diags.ALWAYS_OFF;* A1 E6 w% m: s, {7 u$ B$ {
Defaults.common$.diags_USER5     = Diags.ALWAYS_OFF;$ v  Z& C% ]6 D; @. s: Z6 f
Defaults.common$.diags_USER6     = Diags.ALWAYS_OFF;
1 f" o: e( e/ t" x! q/ j* ADefaults.common$.diags_INFO      = Diags.ALWAYS_OFF;  U& ~9 ^- Z( V; t' @9 u
Defaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;
$ j; s% m7 n8 b  q1 |6 \
- O# h% w6 Z; B8 {7 h5 e0 Z& r/* override diags mask for selected modules */' f9 i  U4 x+ ]5 v9 h0 V( r
xdc.useModule('xdc.runtime.Main');6 g. q$ A0 W! |' Y/ x" R
Diags.setMaskMeta(" G8 q- U5 g8 |9 h4 r
    "xdc.runtime.Main",$ l) {7 Y9 L; Z0 X) @4 m
    Diags.ENTRY | Diags.EXIT | Diags.INFO,6 `8 Z' y; U3 f; O; p6 S8 A$ h
    Diags.RUNTIME_ON
& V2 M7 c, w: X0 n$ s);" R+ x4 K9 y/ O3 H- i
* u5 |: O3 j, p8 U
var Registry = xdc.useModule('xdc.runtime.Registry');
: k) j# {5 |4 X4 M1 ERegistry.common$.diags_ENTRY = Diags.RUNTIME_OFF;; {9 M  g; n% a, w, X- o1 e% w( x
Registry.common$.diags_EXIT  = Diags.RUNTIME_OFF;7 H/ M' t) k  g- H9 }0 |3 ]; x
Registry.common$.diags_INFO  = Diags.RUNTIME_OFF;1 _! p. R, t- y* D
Registry.common$.diags_USER1 = Diags.RUNTIME_OFF;) ~: g, i' D; P5 B  p9 g

" ^3 S6 z! X) J- f- k4 N" L* I4 P/* create a logger instance */: h% O4 ^/ l6 P( R
var LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');
( i* _! a4 B5 R# M# n3 u% R' Wvar loggerBufP = new LoggerBuf.Params();
- u4 a, ?* x# ?! ^  d! uloggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */. E) q( z1 }. P& H; Q: Z
loggerBufP.bufType = LoggerBuf.BufType_FIXED;
7 W; e2 o4 y1 o0 Z. B" w8 a( w% i6 v
var appLogger = LoggerBuf.create(loggerBufP);0 d% C. q) {1 a) i4 [, w1 }. V( X
appLogger.instance.name = "AppLog_Core1";
: C6 @0 p, d% c1 YDefaults.common$.logger = appLogger;
0 j4 \7 \" {& }7 o' J: ?5 VMemory.defaultHeapSize = 0x8192;   
  q0 G; a" s: ?Idle.idleFxns[0] = "&LEDStatus";) {+ S5 o3 R' c/ w, u8 ~% E' N
Cache.initSize.l2Size = Cache.L2Size_32K;: t. @  ?8 T/ D) ^& G* S3 W! ]4 T3 ?
4 X% B" x& }7 r
回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2026-1-15 10:58 , Processed in 0.043565 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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