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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2015-9-4 08:33:31 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
创龙工程师你好,我在OMAPL138单独调试DSP程序(使用SYSBIOS)时,在任务中使用calloc函数动态申请内存,用完后free,类似如下结构- l- F) W* j, @5 S
4 b( l4 K' R# x2 N4 F
    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //256
4 \0 y# a/ c- g$ d0 ]+ P! {3 r4 a! h  Y8 v' V( y0 A" A' ]. ?
其他程序段。。。。。5 N: \) u9 l- J, c+ J2 |
8 {5 |/ g4 k+ j6 ^% j) p! ?/ ~$ s1 u
   free(x_d);
5 O' n) v; |) v$ f6 m5 N  Z. ]& B' L9 S
使用DSP侧单独调试功能,验证动态申请没有问题,
! i- U# x( L- s( K1 B; H9 r, I- F' z) c) i' \. B6 r  X
但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。
  O* E% W) ]0 U" @2 M, O* W+ T
& C/ W1 ^3 d+ Z" r/ [" O5 y8 V
" S1 T8 M; |, a
! P/ W& N3 G1 G+ r- w
3 J( @& y1 D3 f) \
- A; y+ d% G5 E" f# e. j9 q
  o2 f8 i# _3 C3 R+ P

* _+ C7 K: a2 y3 g. ~# _, ~2 G( u/ q! X
! C# F) I  Z4 A& R
1 b3 ~$ \" b* f5 a
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2015-9-4 10:29:21 | 只看该作者
补充说明
8 Y) m* V4 N5 [5 a  n我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下0 h. K; {0 Z' ~. \
(不过疑惑的是,为何单独DSP仿真就没有问题呢?)0 y7 F5 M7 p8 ?$ y

7 L) G8 V" k. l% J/ \& x" w8 ?, _是不是需要在DSP.CFG中进行配置
4 l9 S' o7 ?6 ]" _- a1 Z% g3 b0 I我现在的配置为# m& h  S* n2 B! C$ \$ J

0 y6 l/ l, M& \# E/ f$ ~/*; S% w4 q  a1 @+ ?
*  ======== Operating System Configuration ========
  l) c- W8 m( h */' h5 z3 J+ K" g5 ]! P7 b
" n) W$ r3 [8 u( o
/* no rts heap */
9 w( A2 g, d5 }& z+ t' ~( @: uProgram.heap = 0;; R8 W8 L2 o  b% C9 o
Program.argSize = 100;  /* minimum size */0 a& n0 u; w  f  V; H( u
Program.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大- e5 i/ J9 N' p; n% ?2 p
. p% E" _6 K, y5 k2 I% N* S2 E" a
/* create a default heap */3 e2 ^5 V' b" ]( }0 Z+ S( m; y& y
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');$ ~# W& v) W6 N7 Q9 X' i/ \9 w
var heapMemParams = new HeapMem.Params();0 a" N6 W: X, j% z; Q& v! f
heapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大$ ]& V8 S) @5 z0 T+ ~4 b+ r- L

: \, c( n, r4 J  g
var Memory = xdc.useModule('xdc.runtime.Memory');1 l0 K+ T% a1 `- Y7 H( S
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);: t  i1 J' [5 j4 a
+ o+ a( f0 W. ~
/* configure System module */1 I  R8 C& P' A  Y8 w/ p- e
var SysMin = xdc.useModule('xdc.runtime.SysMin');/ Y! ]; L( @# o* J: x9 y9 H) \0 K
SysMin.bufSize = 0x1000;
( ~, A/ y6 F* SSysMin.flushAtExit = false;, D% D$ F$ p3 Y5 B) x

/ i4 q4 J% ~2 H+ K9 X1 Bvar System = xdc.useModule('xdc.runtime.System');4 l9 P1 P+ \$ y( A
System.SupportProxy = SysMin;
, `# \  @  {, l" j( R7 l5 X2 C: y8 n, e8 `
/* configure SysBios to use the lower half of Timer 1 */
9 n2 A/ m# Z$ A3 a$ ~5 a9 rvar Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');$ h; Y7 Z, k6 Q0 z$ z7 n8 o
var Clock = xdc.useModule('ti.sysbios.knl.Clock');
) ]4 j! t, h$ ~1 |# c4 bTimer.timerSettings[1].master = true;
* y, I/ D5 ?. e9 n5 n( E; wTimer.defaultHalf = Timer.Half_LOWER;( m, _% k* v# |* o# O
Clock.timerId = 1;
: A% U0 s" ^& D- e' t. H7 g, E; w
' j6 L8 R; \7 I' q5 j% y2 E2 Y  C+ o( d; K. I2 S4 _) G
/*
8 M  Z( t% x- b, d, ?" ] *  ======== Miscellaneous Configuration ========* F/ B4 ?2 J  R1 h) m
*/
9 ]3 L9 E9 w  ^9 \5 }  u5 b- O1 }2 z& H2 d
/* set default diags mask */
( Y9 @, z* @. c& ]2 q& hvar Diags = xdc.useModule('xdc.runtime.Diags');1 j1 p2 m: d7 t; A0 F
var Defaults = xdc.useModule('xdc.runtime.Defaults');
6 q: y; ~/ d/ S- [; t" w0 \' t3 h( `  U( v- k$ o
Defaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;- `5 q/ p% u1 ~7 d- u5 Z- x# r$ L' p. y
Defaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;
& f% z2 v. S  j$ l2 P1 r' kDefaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;/ S0 y( b# T, W! a. Q
Defaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */
# [. z0 o4 N, i, G6 q/ EDefaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   *// S6 m2 D) C, f
Defaults.common$.diags_STATUS    = Diags.RUNTIME_ON;
7 i$ F2 p5 V$ b2 I0 i$ FDefaults.common$.diags_USER1     = Diags.ALWAYS_OFF;6 d% Z, }# d' ]4 R7 T
Defaults.common$.diags_USER2     = Diags.ALWAYS_OFF;0 m$ m' @5 h0 {' {, T- L3 J' q3 P
Defaults.common$.diags_USER3     = Diags.ALWAYS_OFF;- v  x" |) d5 e' V; Y* p
Defaults.common$.diags_USER4     = Diags.ALWAYS_OFF;% V: E6 ]+ n. j" J
Defaults.common$.diags_USER5     = Diags.ALWAYS_OFF;
; p& A8 U  C9 \Defaults.common$.diags_USER6     = Diags.ALWAYS_OFF;7 I9 x3 Y' q; o# `) M% R7 L+ K$ Z
Defaults.common$.diags_INFO      = Diags.ALWAYS_OFF;3 }" \- a3 J: k/ ?1 s
Defaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;5 w6 |0 o- H+ [5 n6 U8 K

* \1 y, g5 Z% x7 x/ s8 o4 b4 Z/* override diags mask for selected modules */# m6 }! ^9 \' v. U4 y
xdc.useModule('xdc.runtime.Main');' r8 j3 d) n! _$ p( o7 N1 z/ Q
Diags.setMaskMeta(
( x% C* g! b7 R" ]! g5 h$ O9 H3 v    "xdc.runtime.Main",% r+ x& C9 G, a
    Diags.ENTRY | Diags.EXIT | Diags.INFO,
$ H, R8 O: c" b3 c. W  F/ v    Diags.RUNTIME_ON
& P/ [( E7 o4 d2 J);
8 @0 u5 A3 S$ |; L+ `& j9 @- M* Z! m
var Registry = xdc.useModule('xdc.runtime.Registry');$ H/ a! C  P5 G$ n( u' m
Registry.common$.diags_ENTRY = Diags.RUNTIME_OFF;! I# b$ Y- E5 ]3 {* C
Registry.common$.diags_EXIT  = Diags.RUNTIME_OFF;
  e5 o/ s  c2 w; }Registry.common$.diags_INFO  = Diags.RUNTIME_OFF;
, e" p% I  r7 G+ tRegistry.common$.diags_USER1 = Diags.RUNTIME_OFF;* h0 o) B% ?3 {3 ]( \# r

! C3 n. b( M  C: f  G9 f/* create a logger instance */
2 P) |, t1 U' \! t! @7 Ovar LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');$ f! C9 {0 Z# }! _+ J* R' y7 |! P
var loggerBufP = new LoggerBuf.Params();
& ]' a) X' ~- b' u, n8 Z" \loggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */
1 W1 o* t" O4 TloggerBufP.bufType = LoggerBuf.BufType_FIXED;
- @5 X; G, `4 ]2 s, j7 ^! U% ]4 u+ z- b# G" b
var appLogger = LoggerBuf.create(loggerBufP);
  o/ h' g2 p% n& V- r0 }  bappLogger.instance.name = "AppLog_Core1";0 ]  [  x( B! X$ e+ U9 g- U2 h9 D
Defaults.common$.logger = appLogger;
0 ?% h6 S; N# _3 FMemory.defaultHeapSize = 0x8192;    1 O+ Q9 d7 q; x* {  u( U7 u( K
Idle.idleFxns[0] = "&LEDStatus";" R% C  o7 e* |. \( u
Cache.initSize.l2Size = Cache.L2Size_32K;, Z, U( N3 t& O  X+ _1 Z; G# d
9 C5 X4 Z9 ?# @5 t/ \; H
回复 支持 反对

使用道具 举报

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 *// p" v" f1 _6 Q$ v  ^# T. g# Z) i  T3 y' L
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
% L( f$ {# ]$ `/ Gvar heapMemParams = new HeapMem.Params();. B0 U% Y1 L9 p
heapMemParams.size = 0x4000;- Y: y; {; c6 x
  q  ~* v+ d) b, E- w& Z
var Memory = xdc.useModule('xdc.runtime.Memory');
" w& Z4 p: h: E1 b/ Q8 x* z9 \; LMemory.defaultHeapInstance = HeapMem.create(heapMemParams);# F4 G5 R. t: h) ?
& z/ c8 U- i) G. p+ Z+ M9 z
我大约calloc  每次共计大小为5K*16bits,8 X9 Q: \- p" C+ V
而默认配置才0x4000、需要改大。2 h. L( v/ G/ U

" `' I) |) c( ?: F: I, ^1 l+ R
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
5#
 楼主| 发表于 2015-10-28 16:14:47 | 只看该作者
/* no rts heap */
  N8 L; \  h/ }2 JProgram.heap = 0;
: F& o0 m- r$ m) ~Program.argSize = 100;  /* minimum size */
1 |  M9 d7 ]5 l# LProgram.stack = 0xF000;                   //我改到F000  也不行
回复 支持 反对

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-11-16 12:58 , Processed in 0.041990 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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