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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2015-9-4 08:33:31 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
创龙工程师你好,我在OMAPL138单独调试DSP程序(使用SYSBIOS)时,在任务中使用calloc函数动态申请内存,用完后free,类似如下结构
. a/ q) B4 ~  ]0 C$ X2 G$ f0 [# C7 H# w) K
    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //2563 d$ e$ H9 R. a4 Y6 Q5 g; X6 ]8 z

( ~7 }# U8 u$ c8 G  ~其他程序段。。。。。0 {6 @+ ?& A; P) D0 L% d
1 i& O* M: {/ ~+ I+ F0 z
   free(x_d);
' p) o" q/ {8 [0 |
" p4 Q& O5 u3 Y. ^( l使用DSP侧单独调试功能,验证动态申请没有问题,
  x( Q# M" Z3 ^, l# x+ C+ u6 X* g2 ^9 C0 J9 F# M
但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。
/ @' g# G' I1 B

4 }$ S6 a: N5 Z1 L3 G' x  a& ~, q/ v' I& N" _

7 i9 [1 Z  f9 y5 V- b8 [' i( z4 f' _
! @, n. d5 ^& B% _

& o5 j" B7 e! ?: H, Q  _* V% N) B- z$ ]2 w  o5 f" n, G( W* x
% N1 T7 D1 E+ W% ^. Q$ b9 l7 D0 R8 w/ k

$ y3 J! ^( g/ b
5 o" `6 K3 B3 n, [8 G. g- m9 [
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2015-9-4 10:29:21 | 只看该作者
补充说明
0 Q( N8 C0 ?5 a. |我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下
: \# s5 x$ I6 c  J' \(不过疑惑的是,为何单独DSP仿真就没有问题呢?)
( b/ a. C& Z& f
5 K5 T/ E% h0 K, `( }* ?. U- f: P- ^
是不是需要在DSP.CFG中进行配置! h. x! }6 U2 X
我现在的配置为
3 ?0 T' n1 |1 u6 K4 k9 z
/ D- [% D: Y) B! H  D( U# W. q/*6 d; v, G: c$ h8 Z  J
*  ======== Operating System Configuration ========5 A8 B6 D* M" [- s7 t) K
*/
- `  h, I; F9 h. X0 ]" I3 C
4 C/ D& N- F' O( t" C/* no rts heap */
! j. D$ \4 @8 w$ E! L, k+ rProgram.heap = 0;
) E, b! Y! R  C* ^& qProgram.argSize = 100;  /* minimum size */
. m/ G/ R& z8 O2 z9 Q6 {* Q* @Program.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大" [  W- H9 _$ }. @. z1 `

' m+ ~; k) a: O1 J4 i/* create a default heap */
0 r, Z8 ~* h: g0 j/ z/ l* E  `: U# Wvar HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
' h8 u* `; z- F% j8 {) }/ yvar heapMemParams = new HeapMem.Params();
) P+ @- R' a, t& t- NheapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大
- }" R# |! H' c' e( D9 h6 }7 I1 @6 e$ Z% R! x/ Y: C. l
var Memory = xdc.useModule('xdc.runtime.Memory');9 ~2 O! a% j  y9 \8 s8 x0 K# B  f
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);# G* D5 z9 t7 J- l; k5 B) b7 X
2 k% f( e9 V' `" X, t( R
/* configure System module */4 _7 s0 F* A8 [. N' [6 G: u, e- m* ~' n4 c
var SysMin = xdc.useModule('xdc.runtime.SysMin');
3 S2 Q' A5 `+ @7 h8 ?- ASysMin.bufSize = 0x1000;' f+ U; j% T: S; b+ h9 R
SysMin.flushAtExit = false;0 f0 S2 d4 G) z/ }' K# D

% Y& ?$ n* M- f- y6 R4 ~) n9 uvar System = xdc.useModule('xdc.runtime.System');
$ i- w  C. B3 W6 w% z/ [! [* PSystem.SupportProxy = SysMin;) V6 e7 ?6 t+ A1 s' v& J* K
$ s# i0 `1 H+ l/ Q4 f
/* configure SysBios to use the lower half of Timer 1 */
( V5 P3 ~# {! u. U, A# @( z  @var Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');. f/ [1 a' o' g2 c# |$ P7 R
var Clock = xdc.useModule('ti.sysbios.knl.Clock');. Q3 U7 H3 M) `: h. \# ^; N3 S
Timer.timerSettings[1].master = true;
; }: H, S% A5 S  r: m7 _! DTimer.defaultHalf = Timer.Half_LOWER;
' R/ r: n2 g; O' |Clock.timerId = 1;
, ~/ I% t& {1 ]! C$ @& O% `  a% z/ u- d# V2 O
1 |/ S- T: L7 `, n3 G
/*
" W) R0 `! u& C! {% x# N/ z/ J; F *  ======== Miscellaneous Configuration ========
( \' O4 `0 v) D1 s( q */
* L- d4 f2 ^3 B  m0 U9 X
6 S; ?3 }( {4 y9 b/* set default diags mask */
2 k& I- h1 ~) J4 h- H4 dvar Diags = xdc.useModule('xdc.runtime.Diags');
1 v; y! S- ?. y( O+ {* Q4 ivar Defaults = xdc.useModule('xdc.runtime.Defaults');) H+ N0 p- |7 T: g( T% e" X

" d+ z( m$ O% Z; j4 mDefaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;
# M8 B9 t, Z0 \# eDefaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;
5 C) ^3 g7 l+ D6 Y+ ]Defaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;
+ C' r2 v0 t0 Y2 B7 d$ g0 TDefaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */% v' z! S3 ~0 \/ \- Y5 Z
Defaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */
( R4 I! Q+ P% o  YDefaults.common$.diags_STATUS    = Diags.RUNTIME_ON;
7 }# ^( r# c* l! K! n5 y. _7 S/ PDefaults.common$.diags_USER1     = Diags.ALWAYS_OFF;" T/ T/ Q8 m+ i% h
Defaults.common$.diags_USER2     = Diags.ALWAYS_OFF;
+ z  `4 n$ k' Z& I, fDefaults.common$.diags_USER3     = Diags.ALWAYS_OFF;$ \! C- `- D3 K3 H
Defaults.common$.diags_USER4     = Diags.ALWAYS_OFF;
8 f7 S- Z, L" pDefaults.common$.diags_USER5     = Diags.ALWAYS_OFF;5 U0 Q& _$ A, E$ \4 o, _& e
Defaults.common$.diags_USER6     = Diags.ALWAYS_OFF;7 D( v! k6 y2 i9 W. _
Defaults.common$.diags_INFO      = Diags.ALWAYS_OFF;% J- m8 t& `0 n# l" g
Defaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;
% P9 i3 f9 L! M  J* y9 `* p/ D2 u  y. Q% S$ R
/* override diags mask for selected modules */9 Q" ?: _/ g# z: P6 ^; z- [; z7 ~
xdc.useModule('xdc.runtime.Main');4 m) ^3 [1 H7 F+ |, R
Diags.setMaskMeta(
  d2 [8 T' K1 `1 U. j/ J    "xdc.runtime.Main",1 d9 g& g) m1 I& s
    Diags.ENTRY | Diags.EXIT | Diags.INFO,
+ s% z9 U% g/ ]6 \) ^    Diags.RUNTIME_ON
, ]9 a0 u+ w/ z# H1 A5 s);
* P4 f9 h( m- x7 M! \- G/ g: m' y# {0 N9 P( @3 s  v
var Registry = xdc.useModule('xdc.runtime.Registry');
: H- i% K% k' c: X$ J5 PRegistry.common$.diags_ENTRY = Diags.RUNTIME_OFF;- a7 ?3 D" w' V/ `" l
Registry.common$.diags_EXIT  = Diags.RUNTIME_OFF;
3 D! x. T9 j  t- f, |Registry.common$.diags_INFO  = Diags.RUNTIME_OFF;
- F& L# ^1 O" d& R4 ^" U; R; lRegistry.common$.diags_USER1 = Diags.RUNTIME_OFF;3 g7 N+ T! M1 |" b+ [+ u- I: P
/ ^# k, v9 q( d% w4 H; T
/* create a logger instance */
! [3 _+ H4 ]! q7 k' _9 Tvar LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');
8 y& g9 }, J8 S% W& }: _- ivar loggerBufP = new LoggerBuf.Params();+ B9 w  \+ {, `% w, {0 R
loggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */0 ~1 e* w  y* c2 D/ D
loggerBufP.bufType = LoggerBuf.BufType_FIXED;# |: N% h* h; Y8 G

) p3 q) f9 \* Vvar appLogger = LoggerBuf.create(loggerBufP);
0 ], S0 ]- k& r) ^" q$ ^+ _' jappLogger.instance.name = "AppLog_Core1";+ @* j% m! X- z6 r7 m9 b
Defaults.common$.logger = appLogger;2 y, X+ k/ Y$ T% q! |' \, z
Memory.defaultHeapSize = 0x8192;    + Y4 P* p5 Z' Q6 b' @, N
Idle.idleFxns[0] = "&LEDStatus";. f# u/ D/ p) x( `' _0 x# ~
Cache.initSize.l2Size = Cache.L2Size_32K;& T4 g! F/ p5 n6 q( ?4 j8 m9 w

  X% J+ W. {( _& E9 p- D
回复 支持 反对

使用道具 举报

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 */
- L3 F* J4 ~" \$ Zvar HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
* e; j! i+ _; \  E2 n3 w( d3 [var heapMemParams = new HeapMem.Params();, |8 w  X6 f/ o5 r# E; f
heapMemParams.size = 0x4000;
" j) f! _+ z7 d9 H0 D) p3 M( n! `& y6 r" ]
var Memory = xdc.useModule('xdc.runtime.Memory');" J+ Q! N1 b+ z# z" X1 H6 ?
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);
" Q7 J+ B/ w% ?: D
. c$ u2 n: G! s: f5 ^7 N我大约calloc  每次共计大小为5K*16bits,
8 T. F3 t: _0 u( R3 P. r而默认配置才0x4000、需要改大。
9 F; f! E' ^& N0 I- }5 y
& h+ ]. J( u0 ^6 ?7 R2 E' J
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
5#
 楼主| 发表于 2015-10-28 16:14:47 | 只看该作者
/* no rts heap */+ u: ~8 j+ K* b+ J- L, Q0 X, J% _
Program.heap = 0;; ]& F5 A7 S7 O4 u* i1 o
Program.argSize = 100;  /* minimum size */: c* R! r9 D8 q2 y9 J# B5 v
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-14 23:00 , Processed in 0.040567 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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