关于OMAPL138在SYSBIOS下DSP侧动态申请内存问题 - OMAP-L138 - 嵌入式开发者社区 - 51ele.net
设为首页收藏本站

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2015-9-4 08:33:31 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
创龙工程师你好,我在OMAPL138单独调试DSP程序(使用SYSBIOS)时,在任务中使用calloc函数动态申请内存,用完后free,类似如下结构
+ B2 X" M6 p. U8 v! W& O
, L$ Y8 q5 `0 C  L- U  r* O+ [    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //256
: k' P* r& }. Z- _: O9 V5 }( H& G6 e0 a
其他程序段。。。。。
' w2 n( S- Y3 M3 k3 w$ \1 F 4 E! ~2 ^0 j  S# i6 Q, h5 |2 K! p
   free(x_d);4 W8 U2 u1 f; F$ B" U# S& g. o

! i' b% p$ C, c使用DSP侧单独调试功能,验证动态申请没有问题,- K" c' q8 L$ C; X& q- f
& n/ M2 p/ Z- ]5 q+ q
但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。! }- g$ J9 `' r3 E9 S  r" X. }
3 M! ?7 N" }$ k2 @& L
6 a  p+ N+ r/ s6 w% ^8 G

! t9 h+ w  r" d7 `+ h( ?$ o* |9 x/ J3 R& U. h9 {* p9 z2 O: B
3 U) R, B' ^2 Q7 z% Z* l

& V4 p# m' V, A: _  o8 v8 n: f% H4 p/ j4 R
6 C% f2 [+ e" y# k: s, W0 ?' F

2 [$ V5 ]% X. ?: |/ T' }$ ]0 C/ x, c; [( L( v
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2015-9-4 10:29:21 | 只看该作者
补充说明
( v  F6 C1 P0 O, W我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下+ l9 f, y5 q2 B: c) `
(不过疑惑的是,为何单独DSP仿真就没有问题呢?)
  S. K% a1 e0 `, H2 Y/ r

/ A. b# K/ _  I& R' C, q: f; I是不是需要在DSP.CFG中进行配置  y& _  O6 g" _3 @# ^- n# }
我现在的配置为6 }- P: f/ C5 T8 ^
; ~) L+ H+ {. o) t+ q; }
/*
3 [% J3 R6 W2 s: W1 T1 t *  ======== Operating System Configuration ========/ ~: Z, J& d; a
*/
9 `$ G8 t9 _  Z# E3 l
4 q1 W0 P9 f0 F2 j7 B8 v/* no rts heap */1 |( m& I' i8 A' \. V! j2 [' z3 a5 `
Program.heap = 0;
& A& R3 S3 ~: G& r* H( H. C& s. ~Program.argSize = 100;  /* minimum size */
* N) P" w0 Z$ tProgram.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大
7 x9 E* f+ p8 j4 Q! `3 x" b$ A7 i3 @9 ]6 j* ]8 P/ T
/* create a default heap */
) K* A: V% z' ~# |( d6 |var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
  G2 y& `% ^: hvar heapMemParams = new HeapMem.Params();0 e! [2 _& R- F9 e, p% }+ w0 @0 U
heapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大1 O+ ^8 ]% J0 x
2 q- f& A6 Y$ g  m/ ^3 e( n3 y6 c
var Memory = xdc.useModule('xdc.runtime.Memory');
& H( y+ U+ H8 V& UMemory.defaultHeapInstance = HeapMem.create(heapMemParams);
# z/ ^/ N& P' a
3 V; k/ d- N  t7 T/* configure System module */
" e: K% g7 R+ j3 qvar SysMin = xdc.useModule('xdc.runtime.SysMin');. b& F3 r' Z2 O* z3 a, e. `& Y- X- {
SysMin.bufSize = 0x1000;
+ d% a0 S$ C' R, M2 C7 }9 }SysMin.flushAtExit = false;( a1 Q8 B. g" C

( }# {% {! H) v! `! kvar System = xdc.useModule('xdc.runtime.System');
1 T& @! i/ G, N- MSystem.SupportProxy = SysMin;
+ P  ]$ |' H8 h" p: |7 J$ m8 M9 }6 X' S
/* configure SysBios to use the lower half of Timer 1 */& P9 _! e  O& E% q3 H* a, x) @  E
var Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');
( B2 {% u  m# C$ k9 C) M( Zvar Clock = xdc.useModule('ti.sysbios.knl.Clock');4 }7 l  t/ ?! g* f
Timer.timerSettings[1].master = true;! I8 l. _1 J- ^  b6 A
Timer.defaultHalf = Timer.Half_LOWER;/ c7 R: b  A' l" T! t. c
Clock.timerId = 1;( Q, S6 ]1 g( Q9 c- y

; G% k0 Z- l) b; u' I/ v
& H, P! f; R7 D$ G/ _$ v% Q: M/*
) T/ j) A3 `9 z- _ *  ======== Miscellaneous Configuration ========
6 y9 B9 W  @* q1 ]/ t */0 h% f. C9 u4 T2 }% G+ g1 p4 s
! R/ x  e# W1 g! q5 h- _
/* set default diags mask */% e: y! ~; g  j) k! E
var Diags = xdc.useModule('xdc.runtime.Diags');
- `- i5 u$ W3 A- q( o. J' _var Defaults = xdc.useModule('xdc.runtime.Defaults');- k/ `- i2 P  l1 x

3 g1 f! h7 w/ D4 l, i" l' \Defaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;
" U6 A5 d3 j1 N/ G3 gDefaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;
& M* T: C% f6 s1 x  _2 `Defaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;
. I1 b7 s( p. Q0 l7 _( F3 x. SDefaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */
. a7 `$ @5 U* Z5 UDefaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */4 v5 z- @& J- E
Defaults.common$.diags_STATUS    = Diags.RUNTIME_ON;
  E& n+ X- ~/ g" j# vDefaults.common$.diags_USER1     = Diags.ALWAYS_OFF;
5 ]. U! ]4 h7 Q" EDefaults.common$.diags_USER2     = Diags.ALWAYS_OFF;& l, \9 c& t- z. ~+ ?
Defaults.common$.diags_USER3     = Diags.ALWAYS_OFF;
$ R# V8 X+ D, @0 c% F( e$ d! LDefaults.common$.diags_USER4     = Diags.ALWAYS_OFF;$ d) \& D) G" D( Z0 i& H7 m
Defaults.common$.diags_USER5     = Diags.ALWAYS_OFF;
  R* L/ e) F; k& M. p7 U3 _Defaults.common$.diags_USER6     = Diags.ALWAYS_OFF;9 Y% C  C' G- a
Defaults.common$.diags_INFO      = Diags.ALWAYS_OFF;+ M) |) s$ R3 O
Defaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;8 U% A' o4 X7 ]* l6 q/ I5 e. |

. U9 C' h0 C5 ~+ Y" |5 t3 k/* override diags mask for selected modules */
% B6 O) s5 P5 b$ X* xxdc.useModule('xdc.runtime.Main');
) Z/ w7 Q: s& N' C: hDiags.setMaskMeta(
8 a% S, h" G+ }9 s3 z% L' F6 I/ K8 T+ Z    "xdc.runtime.Main",6 o; t' t9 u& U# A7 Y; N9 E
    Diags.ENTRY | Diags.EXIT | Diags.INFO,
5 M& J0 L9 F3 t1 \2 ?% t) L. a8 l    Diags.RUNTIME_ON2 l0 O1 U3 R) O$ W
);
" K/ S$ x' X/ O9 Y5 w# ~; t( M. Z' ?1 ^2 {7 v3 ]
var Registry = xdc.useModule('xdc.runtime.Registry');
4 }# R4 ^/ L; E7 p* L! N/ F* \5 SRegistry.common$.diags_ENTRY = Diags.RUNTIME_OFF;
# a$ ~' b2 e0 U: c; F% s) p) h; b- URegistry.common$.diags_EXIT  = Diags.RUNTIME_OFF;0 O7 Q. @% T1 \3 @; P7 p
Registry.common$.diags_INFO  = Diags.RUNTIME_OFF;9 u. S; w" j1 A: E; F  v
Registry.common$.diags_USER1 = Diags.RUNTIME_OFF;: A2 |+ l4 z$ K7 r
+ l; h8 V  R% L0 X; K& R! ~3 ]# l; T
/* create a logger instance */0 {* ?* l/ g6 }7 C6 G
var LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');! L8 @7 A) N* Z, D: l7 |* X; g& v
var loggerBufP = new LoggerBuf.Params();! @9 H0 A8 Y! m" f; K4 I+ I
loggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */( x7 f" A& x- N  T( [
loggerBufP.bufType = LoggerBuf.BufType_FIXED;
* G' M: \$ q* ^/ n; P
( m  X. A! K! J3 w8 ~' ~( t+ pvar appLogger = LoggerBuf.create(loggerBufP);
1 N; a/ E5 i/ M+ z# L" {appLogger.instance.name = "AppLog_Core1";& O& ~# j8 G: u9 f, f* I0 \, d
Defaults.common$.logger = appLogger;" t$ [1 k1 o- A0 J; m) P
Memory.defaultHeapSize = 0x8192;   
# m2 T# d6 z( H( k1 @. z& }Idle.idleFxns[0] = "&LEDStatus";
; g. w# ~) X( A. P6 m0 YCache.initSize.l2Size = Cache.L2Size_32K;' h" r- x5 ?/ g
) Q6 f* j4 Y$ E# q$ ~- |, Q
回复 支持 反对

使用道具 举报

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 */. Q. \. C, Z5 A2 @
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');4 o% {. u; K# v  U. A4 u9 x
var heapMemParams = new HeapMem.Params();. B; i$ {# Y6 D( _. I5 j0 S
heapMemParams.size = 0x4000;7 _/ H% ]2 B, \

0 A% U, n$ t7 ~2 @  [4 M. T6 U( @var Memory = xdc.useModule('xdc.runtime.Memory');7 |: J0 ?! F: M
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);
: }" n$ a0 @+ k  x
4 i0 T: c0 k, o% V3 |我大约calloc  每次共计大小为5K*16bits,
+ C/ f% F! v1 |2 F而默认配置才0x4000、需要改大。
7 Y- L) C  J! |( C7 X9 K
. ~1 d# J, S+ U* n. V& w
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
5#
 楼主| 发表于 2015-10-28 16:14:47 | 只看该作者
/* no rts heap */, K" k# x0 B- B. j
Program.heap = 0;7 N. s. w2 b$ C6 a' N
Program.argSize = 100;  /* minimum size */
3 A0 D' u. n, OProgram.stack = 0xF000;                   //我改到F000  也不行
回复 支持 反对

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-12-12 15:07 , Processed in 0.041385 second(s), 23 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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