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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2015-9-4 08:33:31 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
创龙工程师你好,我在OMAPL138单独调试DSP程序(使用SYSBIOS)时,在任务中使用calloc函数动态申请内存,用完后free,类似如下结构
' x- P6 V- d0 Q1 U# B+ ?( H% {+ {
8 ^* q3 H& ^8 M    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //256, I# g4 p: ^5 [+ q) @. C0 O1 [8 x: w

3 F% C$ k& q, t, K$ L# e+ C/ [. f! Q其他程序段。。。。。4 J+ T9 x. a, V/ b3 N0 E
- K9 z0 L$ Y7 ~8 _2 O7 f- M
   free(x_d);/ K+ L0 Z* h# j. O- u- ?7 J- M

  G0 r1 H3 p+ t$ o! r) I3 i使用DSP侧单独调试功能,验证动态申请没有问题,# b0 v4 u/ t' v% @2 U8 i7 G

6 X# p* x; H5 y3 A8 \8 M但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。
/ F. T/ U; M, P( i5 A0 v

+ {9 b1 Z- x: N% e; p; j% h$ h
8 k1 r. g  Y: k6 H/ ^: G) L; a( F, ^! F' a6 x! [) h
, r8 r1 C: x, x1 f. \
; f# p+ s6 B8 P: H& j
9 }, O& F1 T  q) |' S

% n$ l  |6 l4 Z' }* T' G/ N$ j( O( b. Z& ~
* D+ |! c" i5 |5 H4 R9 M5 p

- E5 C0 `& k9 h  o/ y
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2015-9-4 10:29:21 | 只看该作者
补充说明
  C9 a8 c7 r, r2 \我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下" e8 h. _$ g# u; q- K; O; N1 k
(不过疑惑的是,为何单独DSP仿真就没有问题呢?)
4 R5 l4 `9 f! h2 s6 Q$ H
* q7 D. P) `9 q7 X. M0 z! x9 L3 {
是不是需要在DSP.CFG中进行配置
7 S9 ?1 }# `2 n$ q我现在的配置为4 f9 S7 }9 K& P; Y. I2 o5 l
/ J) G/ u3 j; G( @6 U0 [$ |
/*
' B. G- R9 W9 e3 D *  ======== Operating System Configuration ========. \+ ^! O/ N' b
*/
) x% ~) M+ e" ^* D. q7 g8 S8 e2 q: i: ?! ~2 ^
/* no rts heap */
+ z' o( B) e, D+ G% l1 s3 C0 ^Program.heap = 0;
0 V: o: h* _; q0 Z! h3 S; lProgram.argSize = 100;  /* minimum size */
  O" K! G. `' W7 k5 H2 QProgram.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大9 {$ o& }2 q; R
6 X1 |7 ~/ w; b4 {
/* create a default heap */6 v0 g) e$ Z+ D7 G0 E% v
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
9 C6 L2 H2 s5 Z- qvar heapMemParams = new HeapMem.Params();; e2 e" I' h- H* r. J
heapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大4 ]$ n. c" x1 i/ X0 c& ^: F$ l

& x$ c2 I6 B3 ^* f+ R; |+ [( l' D
var Memory = xdc.useModule('xdc.runtime.Memory');* j* I- D) }1 P2 L6 n, R7 ]. Y. m/ N
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);0 s! }9 u' \' `

- ?$ b% N3 L* A7 c( x7 d' L/* configure System module */( F; b0 F1 D! Q7 \
var SysMin = xdc.useModule('xdc.runtime.SysMin');9 d2 T- X5 r5 m- H: }! b
SysMin.bufSize = 0x1000;
: l0 m7 F, c+ B* a0 [& U) V. dSysMin.flushAtExit = false;
% c! D$ g  p* d+ X) ^& B4 r  X1 l! n4 K! m
var System = xdc.useModule('xdc.runtime.System');2 _8 ^3 Y# a( B
System.SupportProxy = SysMin;1 e- x) K8 @5 \; G* A& i& H
% @( \  w. R" O! c2 T  g# \
/* configure SysBios to use the lower half of Timer 1 */. n' ^+ z; p2 ~# C+ i
var Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');  {# O$ O' C7 B* }
var Clock = xdc.useModule('ti.sysbios.knl.Clock');
) |: @" ~3 e7 ]0 X& f1 j( ZTimer.timerSettings[1].master = true;% t  `+ M, ?0 [
Timer.defaultHalf = Timer.Half_LOWER;* I2 r( T) C. }* x0 H  O
Clock.timerId = 1;
: R) K" {4 G4 j* f2 M- d8 R4 U( ~  \
; U& _5 {6 R4 U6 u
/*2 U; p4 |! q$ ~, Q
*  ======== Miscellaneous Configuration ========9 {0 o. u+ _7 V
*/
& [( W+ j" e$ t4 \8 `3 R( O
6 J$ r9 |9 J* G1 W& g/* set default diags mask */
) P; H2 k( S. h- Q% h! B. i5 }4 {var Diags = xdc.useModule('xdc.runtime.Diags');
+ J$ ]$ p3 p4 Q! fvar Defaults = xdc.useModule('xdc.runtime.Defaults');
  }0 W& V- ?$ v8 }8 r! Q8 Y) T) ?
: |& F% N- M1 P( v% bDefaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;0 I; L' R$ J4 k/ p
Defaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;
# I' p0 p5 Y( K; bDefaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;% \6 _% t! {" {
Defaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */
/ A) o4 ?: G' xDefaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */4 c+ E& \: Y; _! a- U1 S
Defaults.common$.diags_STATUS    = Diags.RUNTIME_ON;
: Q& R0 m5 p: K) k2 m' n% [9 Z- JDefaults.common$.diags_USER1     = Diags.ALWAYS_OFF;
" x2 m( ~  e! M3 i4 Y. o+ wDefaults.common$.diags_USER2     = Diags.ALWAYS_OFF;' @8 O" o) Y! C; p6 _+ Z
Defaults.common$.diags_USER3     = Diags.ALWAYS_OFF;
/ m1 \5 l9 h, j% z- |Defaults.common$.diags_USER4     = Diags.ALWAYS_OFF;% Z* U* j0 E- M. r5 K4 y
Defaults.common$.diags_USER5     = Diags.ALWAYS_OFF;
1 q/ t3 ?& p0 n7 W+ \- Y$ r* _! j5 ~Defaults.common$.diags_USER6     = Diags.ALWAYS_OFF;
5 M/ w" o) q- {; x, l5 S( VDefaults.common$.diags_INFO      = Diags.ALWAYS_OFF;' A+ |7 C! Q+ f! d4 Z
Defaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;) Z( _$ @% W* O! W/ L6 I1 d

) e* a3 b* }8 W4 g0 ~2 }/* override diags mask for selected modules */
8 |4 v) ?4 ^, R/ ]xdc.useModule('xdc.runtime.Main');! h" p$ X9 z; B0 b/ \
Diags.setMaskMeta(
  h& P: |' ~) Z    "xdc.runtime.Main",4 p7 h( T: l4 ]0 V1 C2 f: b
    Diags.ENTRY | Diags.EXIT | Diags.INFO,5 Q. V5 u% P5 @* m; v
    Diags.RUNTIME_ON
/ o' q, E+ Z# ]- C5 Z+ S  f);
( `0 W) ^% R5 P: u- `5 n% l/ M% e3 w% I* n! G3 }/ n
var Registry = xdc.useModule('xdc.runtime.Registry');6 _$ A' y9 l# k! _
Registry.common$.diags_ENTRY = Diags.RUNTIME_OFF;1 Q3 a: W+ D  k( t/ c5 v" o
Registry.common$.diags_EXIT  = Diags.RUNTIME_OFF;
* @; `3 q; L6 c* nRegistry.common$.diags_INFO  = Diags.RUNTIME_OFF;
: ~5 d' a: }4 D; f: X% t# i+ \8 `$ |Registry.common$.diags_USER1 = Diags.RUNTIME_OFF;- }9 X5 Z- o1 I/ J" ~% Y& p

# [. f5 Z/ H! N  [* n+ |2 W- K/* create a logger instance */
1 e( M- d! q1 J: Evar LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');
0 s( Z4 p7 z8 X) \! C" n- t, T6 d8 |, fvar loggerBufP = new LoggerBuf.Params();
7 F6 d$ m8 I" d; ~% [" x: SloggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */) Z. k* a3 I6 C5 }
loggerBufP.bufType = LoggerBuf.BufType_FIXED;4 F5 }% g! ?* L- z8 c& C# s
. p, ?1 j2 l, w1 g- P5 R
var appLogger = LoggerBuf.create(loggerBufP);
& \1 W( h( L' eappLogger.instance.name = "AppLog_Core1";
  T/ n9 z, O/ W; M$ yDefaults.common$.logger = appLogger;% K) e* l+ Y4 ]' r5 m* g8 h8 c
Memory.defaultHeapSize = 0x8192;    ! W, q" S3 N* S( \& E5 ^
Idle.idleFxns[0] = "&LEDStatus";
: _' b& j- e7 Q- A. {7 a4 w% b5 eCache.initSize.l2Size = Cache.L2Size_32K;
9 D/ b' ^( }# @$ i2 k* @
/ r2 K# l  B9 b; `
回复 支持 反对

使用道具 举报

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 */! s' }" i, C: t- e2 y
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');& I0 E4 s. V" Z" p6 j' V+ m
var heapMemParams = new HeapMem.Params();7 B6 @/ E7 U1 L* A3 y  |  v
heapMemParams.size = 0x4000;
- X& J8 d: M8 O# R5 U- ~. `7 E+ W8 n* k, `
var Memory = xdc.useModule('xdc.runtime.Memory');
2 u! ~' y8 G! C! Q; A: q+ H# _Memory.defaultHeapInstance = HeapMem.create(heapMemParams);
; i3 e+ C; S$ x9 u- n9 T2 n. {" R; B( a+ m
我大约calloc  每次共计大小为5K*16bits,
& d& y# R/ E2 p0 v: \而默认配置才0x4000、需要改大。
: S3 J+ S4 V; m6 c- e$ ^5 W4 F& n2 R6 O
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
5#
 楼主| 发表于 2015-10-28 16:14:47 | 只看该作者
/* no rts heap */* a6 o: c# J. f: u9 Y3 B
Program.heap = 0;
* ]2 _" }' S2 ^/ v, {Program.argSize = 100;  /* minimum size */
0 ]) i. o6 R8 |4 C8 y% ~) wProgram.stack = 0xF000;                   //我改到F000  也不行
回复 支持 反对

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

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

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2026-2-15 17:41 , Processed in 0.037407 second(s), 23 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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