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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2015-9-4 08:33:31 | 只看该作者 回帖奖励 |正序浏览 |阅读模式
创龙工程师你好,我在OMAPL138单独调试DSP程序(使用SYSBIOS)时,在任务中使用calloc函数动态申请内存,用完后free,类似如下结构; |# P1 Z9 L' Q
  Z. [1 |) O+ R0 G% q! J
    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //256
( j2 L7 \9 p3 J: j) T7 z: q0 s' M1 G" u1 g0 i6 y' w
其他程序段。。。。。$ J) @& n/ w0 J3 M9 X2 C7 z. ]* t8 ~

3 n6 s% Y4 d: ^" j( H$ p   free(x_d);. J: x4 m# Z% m1 W/ T

% p6 g0 {! {& R2 m! V8 _# q使用DSP侧单独调试功能,验证动态申请没有问题,
3 @8 H3 ?! L; M8 a! a5 |- F6 q2 W  r
但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。
, h) d  J2 r5 x5 I6 W

+ ~* t* v9 U) C# C; F. ~/ ~% G
9 s1 b' W# k2 Q5 U8 E4 W" C4 }$ x" [( O

, }) j) J3 M: w; ^: R! s) t: f6 v3 f/ C* N- M' N/ ?
& M' g; e" B: w( O

8 S( \' p6 w$ I( E' w2 S* T3 b8 |: o6 Z  }

8 N& ^" p, Q# k' ]% K3 i, P2 \# }- {  U
分享到:  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 */
2 C) o5 O. }4 @$ E( LProgram.heap = 0;9 ?+ L5 D1 {3 P/ \
Program.argSize = 100;  /* minimum size */9 ^" f' n/ M% _
Program.stack = 0xF000;                   //我改到F000  也不行
回复 支持 反对

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

积分
1093
地板
发表于 2015-10-28 09:51:31 | 只看该作者
/* create a default heap */4 W7 O  n- b! B  A) X
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');8 o  R8 d4 S  v$ d- k' y) ?
var heapMemParams = new HeapMem.Params();
1 _0 j% ^4 [. T1 \: m/ r& r% iheapMemParams.size = 0x4000;; x3 H8 R) ]/ o, m" g
6 ^  v: k4 O" _" w
var Memory = xdc.useModule('xdc.runtime.Memory');
- a0 ?. X' Q/ _% T- G. G% p$ VMemory.defaultHeapInstance = HeapMem.create(heapMemParams);
: Q0 C" D6 X9 X9 H5 m4 c7 J. ]- J
我大约calloc  每次共计大小为5K*16bits,
4 v+ ?/ \" |# T& [而默认配置才0x4000、需要改大。6 @- f1 a  k+ F, {9 ~. e3 ?4 a. D7 m3 S
! G  |; n; h. f3 A, `9 J/ H5 _
回复 支持 反对

使用道具 举报

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 | 只看该作者
补充说明
$ i+ z! z/ b6 }) y, {, D我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下: M( b% ^+ F9 a3 `$ @5 v
(不过疑惑的是,为何单独DSP仿真就没有问题呢?)
% I! d  u9 W% \3 d

4 ^% G; \' }2 L4 Q& q是不是需要在DSP.CFG中进行配置9 q* Q* H" ~3 X8 E5 P5 j
我现在的配置为
: A3 U3 {5 a+ y5 O- A) A3 l
* _$ I2 X" G; J* h" L7 y/*% A6 l$ Q0 X9 B3 J
*  ======== Operating System Configuration ========
! g( s2 \4 P% \8 p& s7 e */
( X. O4 K: k* s) {: o& ?5 O" k9 z" r7 E4 w1 s0 x2 q2 C
/* no rts heap */
- _' P% X2 v" P1 AProgram.heap = 0;
" H+ J+ z5 G# c3 R1 i6 A1 y5 w7 `3 j3 \Program.argSize = 100;  /* minimum size */; z$ ?1 t+ E; {( ]- ^
Program.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大* ?0 O# O  F3 K" o

; e. @6 n+ X- v, g# l7 }/* create a default heap */$ N+ r/ i3 D: b8 ~! s% {9 t
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');# ?" G: K; i1 y2 _, a" ]
var heapMemParams = new HeapMem.Params();
6 V& r" U# {; N  H# eheapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大* |* L* z$ _: o+ ]; v
- q6 L& f, p* y* s
var Memory = xdc.useModule('xdc.runtime.Memory');
1 ?0 W% X; W. o' a' ?& {2 p6 ZMemory.defaultHeapInstance = HeapMem.create(heapMemParams);
$ W: i+ W0 I/ y9 q+ ]: j+ h5 j
4 o/ {* k  J& D  ?* K" S7 d/* configure System module */
7 e" s- v) z: q8 ^2 Q, o( U; |var SysMin = xdc.useModule('xdc.runtime.SysMin');9 Z1 g4 x1 G5 a9 ^- j
SysMin.bufSize = 0x1000;; @% Z( V7 v: m( y
SysMin.flushAtExit = false;
2 a: f& g$ t( M
6 o2 Y! g, \* h# Y. i/ l/ B+ nvar System = xdc.useModule('xdc.runtime.System');
" Z7 ]1 V$ U. _3 \System.SupportProxy = SysMin;
$ m- c- O* O2 W& t% I. y( m: g0 |2 s! C, x( K. z, P" |# Y3 Z
/* configure SysBios to use the lower half of Timer 1 */3 `% R( E0 M! U/ b8 H
var Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');
7 ^- n' m. ^; M+ J# [var Clock = xdc.useModule('ti.sysbios.knl.Clock');, a% v* E/ Q+ T
Timer.timerSettings[1].master = true;
% W" ]: \" |- F6 ~/ M/ n) PTimer.defaultHalf = Timer.Half_LOWER;+ c$ o: v. D; Q) k+ ^* I% F
Clock.timerId = 1;5 z) h# a) s! I
6 H, A5 E; u) d% x' E
) m+ \6 a- e0 b6 i7 O6 X: T4 o2 U# Y
/*
8 H) }  \: _4 P& r# \( a *  ======== Miscellaneous Configuration ========
0 P& R4 C1 O" Y$ ` */2 c! d3 |9 `9 t5 O# Q9 }
) ]6 ^% u6 R! R9 v" }4 q
/* set default diags mask */
  U! Y; |; a& L/ m" o: n2 ?, Bvar Diags = xdc.useModule('xdc.runtime.Diags');
6 O# K" C1 \: A( s* ovar Defaults = xdc.useModule('xdc.runtime.Defaults');, z  n4 R2 A7 ^# ?: a3 @
# b. F( P$ d, C* H  K# G0 U
Defaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;) `: U+ L) ~/ r. K. N3 z8 [
Defaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;* I, k9 W# s1 V' \3 `
Defaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;
; J7 L3 B6 T3 P5 l, gDefaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */2 S; E5 u0 A9 W) C
Defaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */
! d6 N4 t# x4 @9 b- o8 H4 E7 m! BDefaults.common$.diags_STATUS    = Diags.RUNTIME_ON;+ U! T, }. i( {" p4 I: M
Defaults.common$.diags_USER1     = Diags.ALWAYS_OFF;
+ B9 Y/ L" @6 w3 F8 f5 lDefaults.common$.diags_USER2     = Diags.ALWAYS_OFF;
" F, w( x2 G1 V) H4 F# f, qDefaults.common$.diags_USER3     = Diags.ALWAYS_OFF;
4 y- {8 L6 B! Y/ P1 A& g/ ZDefaults.common$.diags_USER4     = Diags.ALWAYS_OFF;
4 q* M- b+ F1 A+ ?2 P; dDefaults.common$.diags_USER5     = Diags.ALWAYS_OFF;
5 P) i% H6 a. V% iDefaults.common$.diags_USER6     = Diags.ALWAYS_OFF;
+ W! X+ J5 A9 I* z3 l& J# U/ ZDefaults.common$.diags_INFO      = Diags.ALWAYS_OFF;
- R7 E7 L, y; M, }% fDefaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;
) B  Y. M2 R1 ^9 U/ V/ a+ e
7 _3 I& M* v9 {; N4 h/* override diags mask for selected modules */
, X$ [4 }% h2 o. axdc.useModule('xdc.runtime.Main');
  _7 Y+ H+ M& E$ y) D5 |  FDiags.setMaskMeta(
2 N, ?' W) f8 x0 ?3 ~- x( g% V. p) x    "xdc.runtime.Main",- d. W* T, p+ O5 J
    Diags.ENTRY | Diags.EXIT | Diags.INFO,2 O/ s( O. f" v0 A1 Y: t
    Diags.RUNTIME_ON
. r% z3 V: t3 x);
# ?& x  w$ X2 [8 K$ n5 a* `7 c4 l
# C+ K" g- P7 mvar Registry = xdc.useModule('xdc.runtime.Registry');
- W2 q9 A9 `8 I, I. `6 m4 IRegistry.common$.diags_ENTRY = Diags.RUNTIME_OFF;
0 `' P+ P% R8 A; \4 nRegistry.common$.diags_EXIT  = Diags.RUNTIME_OFF;
; @/ G% @5 I5 o; x2 T: dRegistry.common$.diags_INFO  = Diags.RUNTIME_OFF;- ^$ {- y2 y5 [5 _
Registry.common$.diags_USER1 = Diags.RUNTIME_OFF;! \& @) r1 b( u0 s) @! L# z: g
- G1 E5 c2 A6 Q8 r; s
/* create a logger instance *// e1 D: c! I3 [' x9 o0 x$ w, Y! `6 B
var LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');! y2 }) m. M2 n$ U) k1 p
var loggerBufP = new LoggerBuf.Params();5 G) ]' l/ _* _. {) b; q
loggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */' f; O3 g7 A' o
loggerBufP.bufType = LoggerBuf.BufType_FIXED;. z0 d9 R( u  p; Y
+ n7 |2 y& T4 K8 b! M4 K; _) ]0 I
var appLogger = LoggerBuf.create(loggerBufP);4 D; b3 ]1 H9 c: e5 r8 v. b
appLogger.instance.name = "AppLog_Core1";
: c# V+ o; }1 ]5 u& ?Defaults.common$.logger = appLogger;: L" i3 z1 N% w! u5 ]- D
Memory.defaultHeapSize = 0x8192;    ) Y  K9 K9 y' ^2 Z( r
Idle.idleFxns[0] = "&LEDStatus";
1 Q( n) _/ e  e& S; D$ DCache.initSize.l2Size = Cache.L2Size_32K;
& A4 F, f7 o, m8 q. H! B  H* A+ t5 x: ]" B7 f5 C
回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2026-1-18 13:10 , Processed in 0.041394 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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