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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2015-9-4 08:33:31 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
创龙工程师你好,我在OMAPL138单独调试DSP程序(使用SYSBIOS)时,在任务中使用calloc函数动态申请内存,用完后free,类似如下结构
/ v+ l: A: v. O, B
* F" @/ i1 ~& w  d" Y0 t    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //256
2 q- T- v0 Q* V. m: D5 `! f2 k" I1 V  J  z5 E6 T
其他程序段。。。。。0 P$ V0 S1 i) v1 _* G* b
% _: ]9 A4 \7 O5 p  R
   free(x_d);. b; z# a& T  R3 q
* I' q; f- h! \8 \' b" G  E+ ~/ Q' C5 e
使用DSP侧单独调试功能,验证动态申请没有问题,4 J# e, k: r8 M9 r

/ n& t  P: g4 w) y: I但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。1 G- G3 b! S! N9 H' K! n' Z+ U
0 b* n4 R# y+ ]9 W) h, y& M! {4 l- p
. w, s) D! M2 X( f0 c
3 b0 ]; G( k; u2 c% Z3 N: h" c7 j

1 n$ E+ s2 w( Q' S5 @# m# t) K" x" k* B! s
2 U& ~- d# W9 N

  N; U8 c0 r7 N" b4 N+ z8 k2 ^7 M, U) F) h
  k* g% t$ J) b& [2 c
1 L, _' A3 f! t: y* x4 C4 o  p
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2015-9-4 10:29:21 | 只看该作者
补充说明6 j" V& y5 M  S4 S7 T& I
我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下
7 _# R$ Z! s. s6 g3 r(不过疑惑的是,为何单独DSP仿真就没有问题呢?)
1 B6 o/ U& O* L0 K2 N  s

5 X" t/ _: t9 L1 \是不是需要在DSP.CFG中进行配置
* p4 `7 G+ B* ], N9 r, A  X; D$ K我现在的配置为
! ^: X) U2 P1 R! z' f
# D* g) U2 T! c, k5 O! T7 S2 [/*
5 Z% w1 P) }7 t$ k# |' m *  ======== Operating System Configuration ========
/ N( G0 o4 G. r */( T& I. r5 Z( P- `

& Z: I# w1 |; n) s$ ]2 u/* no rts heap */2 x" \) \! T, ^: D4 D% p1 `
Program.heap = 0;
* G2 h3 g5 C  x9 I( ^+ W" ~Program.argSize = 100;  /* minimum size */
- g" H( v/ l" c& x1 j8 aProgram.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大1 Z- m: e! d; X2 A9 l& E0 ^* F

2 F+ f1 R. F: c3 i2 K/* create a default heap */
/ A# n* \  T. b3 R* y0 Cvar HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
% Q1 z" Z4 e# K4 v9 svar heapMemParams = new HeapMem.Params();" E, r  l& ^& j/ N. L( `) j
heapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大
. G$ x0 B( R! l
) J$ B* y, w) z% c
var Memory = xdc.useModule('xdc.runtime.Memory');, E: ?8 t' }% z* ~/ M% U
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);
. f: H$ T0 p+ F
- L" ~, d9 ^$ @3 _/* configure System module */8 y2 x! v" E6 i% B# B+ h0 i
var SysMin = xdc.useModule('xdc.runtime.SysMin');
1 c8 z; W1 o! H* q* G$ J5 FSysMin.bufSize = 0x1000;. }+ l/ A# e/ o" H# l
SysMin.flushAtExit = false;
: M4 O6 w; A) y: n, X) I- e0 _$ B, A2 m; n0 L5 I% n. o
var System = xdc.useModule('xdc.runtime.System');
/ b2 B9 B; M1 I: M0 B% v8 YSystem.SupportProxy = SysMin;3 ^* g7 T. u( C1 `1 @# Q
" h5 f) i1 w: I6 V, _/ A' O3 n
/* configure SysBios to use the lower half of Timer 1 */
  c$ W+ i: E6 a8 e" Ivar Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');$ P% {' Z- B$ g- I) D
var Clock = xdc.useModule('ti.sysbios.knl.Clock');
; K0 `/ V, R7 Q% ?/ R5 w8 E* K& ]' b& ]Timer.timerSettings[1].master = true;7 m8 Q1 b) @+ T8 ]" O6 j7 h( p) D
Timer.defaultHalf = Timer.Half_LOWER;
( H. ~, s3 D- ^: D+ G/ M; oClock.timerId = 1;
6 j6 }  F1 `7 U
7 c8 f" M, K. Y: S5 Q( b! e7 t( J: Q2 a" ], B  E. I7 l' \  V3 t
/*
& q) n/ n# u' o *  ======== Miscellaneous Configuration ========
2 M! d  }5 H1 _& R1 X$ o */
3 {5 y5 F2 I2 E) z4 J+ N
( b2 R! t7 [, T8 K8 ?; y: c5 _/* set default diags mask */5 V, X# a, a& H! J  B% u
var Diags = xdc.useModule('xdc.runtime.Diags');
& Y2 D0 I0 L% C' g' q6 pvar Defaults = xdc.useModule('xdc.runtime.Defaults');
' O: n0 @  Z. ^5 ?- R. D8 T* `4 z; _) d# o# `2 a
Defaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;2 a3 G; `3 K3 A% }' j
Defaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;
( |: ?! D/ |- m- W! CDefaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;
8 K* [. d% N1 }( [, xDefaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */
& J0 K% D# U( k, sDefaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */& X5 j% r$ k/ ?+ k, ~5 b5 E
Defaults.common$.diags_STATUS    = Diags.RUNTIME_ON;
  F" P- j, [* IDefaults.common$.diags_USER1     = Diags.ALWAYS_OFF;
9 G" k& |  y3 CDefaults.common$.diags_USER2     = Diags.ALWAYS_OFF;' e- y% z9 W4 Z. z- F( y
Defaults.common$.diags_USER3     = Diags.ALWAYS_OFF;
4 S7 q/ J0 s* H" G' [, fDefaults.common$.diags_USER4     = Diags.ALWAYS_OFF;  c/ |7 S3 I/ T) l
Defaults.common$.diags_USER5     = Diags.ALWAYS_OFF;% n5 E" j( {8 T! P
Defaults.common$.diags_USER6     = Diags.ALWAYS_OFF;
7 A! Z7 L4 Q! p5 l( W, P( ^Defaults.common$.diags_INFO      = Diags.ALWAYS_OFF;
# @; u7 g- ]7 K: {+ \Defaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;7 x  y. O9 u$ w0 U3 d8 Q
+ h: L2 B' k- ?7 o
/* override diags mask for selected modules */
& P* I0 ?- e) O$ r: txdc.useModule('xdc.runtime.Main');, w# T  D, B3 E* d0 b; Y
Diags.setMaskMeta(% S( q4 N! h7 e1 v
    "xdc.runtime.Main",
1 A: z. m+ a: F. B3 ?$ M    Diags.ENTRY | Diags.EXIT | Diags.INFO,- V% t2 e# L6 i% X
    Diags.RUNTIME_ON- J' N& x; N6 G
);
# D7 Z  r/ D- J1 i8 n+ ]5 H3 s/ d& A5 G  A' x+ X0 L
var Registry = xdc.useModule('xdc.runtime.Registry');# c! ?; x0 m* I4 j5 t* Z. h
Registry.common$.diags_ENTRY = Diags.RUNTIME_OFF;
( u" v! T# o/ J2 \! ~. M2 LRegistry.common$.diags_EXIT  = Diags.RUNTIME_OFF;9 i& B9 F/ Q4 @; |1 _/ g5 U+ a1 @
Registry.common$.diags_INFO  = Diags.RUNTIME_OFF;7 X' p5 Y3 N$ v  ]$ V4 I
Registry.common$.diags_USER1 = Diags.RUNTIME_OFF;) }& ~9 V) F( t1 {8 x4 l

6 h* Z4 p* k, K6 K/* create a logger instance */
9 a* |7 `9 A8 w& v6 f. m  Pvar LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');8 d% \3 ]& H8 x# B$ I
var loggerBufP = new LoggerBuf.Params();9 ^( G; o" V3 z) L
loggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */
; e4 S/ T% \4 B3 Y9 s' ZloggerBufP.bufType = LoggerBuf.BufType_FIXED;
6 H( R8 K. u1 E! D, L6 V+ @8 u% f+ ?0 u# Y9 j, o* w$ J
var appLogger = LoggerBuf.create(loggerBufP);
: s) a  H7 Q* vappLogger.instance.name = "AppLog_Core1";
$ O9 O" F6 f3 S5 }3 EDefaults.common$.logger = appLogger;
6 c/ T; z7 H0 _0 SMemory.defaultHeapSize = 0x8192;   
/ D+ p) x4 o$ d( }Idle.idleFxns[0] = "&LEDStatus";4 N  s( p: C4 Z7 G- |
Cache.initSize.l2Size = Cache.L2Size_32K;  m% ^7 u& O- |
! F& q5 {  w* z) b! l1 J- Y
回复 支持 反对

使用道具 举报

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' d6 y: E' u8 ]+ b. _
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');/ Q- O( ]" [  W8 g! \
var heapMemParams = new HeapMem.Params();+ c0 ^! l0 U9 k2 J8 l
heapMemParams.size = 0x4000;
% m* F( t; w# ^: C6 S; ?- C5 Y' a- }& V) C, z
var Memory = xdc.useModule('xdc.runtime.Memory');
( I+ {1 Y% i3 t7 Y! O( t: d) @- lMemory.defaultHeapInstance = HeapMem.create(heapMemParams);
6 @& T" R7 T: j. q/ z) }) P' K5 }  ~4 N+ ]
我大约calloc  每次共计大小为5K*16bits," F# s2 S* `+ S! f# s( t9 {1 l
而默认配置才0x4000、需要改大。
# K! A- @# D4 a- s
8 O* a4 p4 r* Z7 m9 g
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
5#
 楼主| 发表于 2015-10-28 16:14:47 | 只看该作者
/* no rts heap */& Z  W; |5 \( \5 a
Program.heap = 0;
/ h3 A9 q5 ^. X' T$ F* ~3 ?Program.argSize = 100;  /* minimum size */3 {0 ~  U6 z! M/ ^# `
Program.stack = 0xF000;                   //我改到F000  也不行
回复 支持 反对

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

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

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2026-2-23 14:48 , Processed in 0.040495 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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