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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2015-9-4 08:33:31 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
创龙工程师你好,我在OMAPL138单独调试DSP程序(使用SYSBIOS)时,在任务中使用calloc函数动态申请内存,用完后free,类似如下结构
  X" j) ]2 E) U' z
) ~& P$ t# m5 x+ ?$ w    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //256
8 ~# |6 @6 @/ M5 F- p$ v
% v/ J5 d  @  i* U1 j其他程序段。。。。。
0 ^$ |" L! H$ w. J- N" M5 S
; ?3 n, S# g% }5 W1 v4 j4 l   free(x_d);. ^* W/ T4 u3 }

* j( ?" I4 w. |4 I4 m; |使用DSP侧单独调试功能,验证动态申请没有问题,9 T( S" Q# P$ C( z* v) m
& q4 ]( W  d, V/ o1 c$ o. V
但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。
9 k6 P" v$ L' u0 Z

2 ~4 ]) }4 @$ a5 [4 u/ ?- P: q, ]
3 j+ g. Z- r/ Z
  d* f3 o  I5 c$ l
6 d+ N$ J, R- v  n
  B5 W4 g! l. K' f, N& {8 Z* K4 A' }
& Q+ x$ [! ~  l& A4 h8 v  o9 F! I) i( q

" L- o! e) L- E: x  p4 e! Y: q, U) P1 i; v& \& T# e, t* H
6 x$ S: [: P2 o. z0 {
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2015-9-4 10:29:21 | 只看该作者
补充说明
; r9 g. Z) e" A$ r2 J: @) |* D我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下3 z4 Z, U# R! ]# u
(不过疑惑的是,为何单独DSP仿真就没有问题呢?)4 U8 O3 ^9 r% N7 |$ d0 T% S
) d" e5 [4 w$ g1 ?& T  s
是不是需要在DSP.CFG中进行配置
! Z! z; K$ c! {我现在的配置为* I7 V$ `' `! ~1 x
5 a1 s5 e1 ?6 U  l; x
/*2 c( z, E0 [" \' ?# I; x$ g
*  ======== Operating System Configuration ========* b9 o0 ~3 G8 c' U+ f/ h. E) q
*/. I3 m) s/ n- L- ]. `4 x' ~2 p6 e

3 k6 ]0 W( S$ ]( l: h/* no rts heap */
7 \9 q( C! f3 r3 V) HProgram.heap = 0;
! ]7 ?$ X6 X* CProgram.argSize = 100;  /* minimum size */
# Q, s) t7 p: n& |! @1 MProgram.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大; C% w1 V3 n3 H2 W! d0 D2 z
& w3 A1 ~* z6 y9 C2 @7 T
/* create a default heap */
- n, q9 |" f2 e! Xvar HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');  k1 v2 p, |( u( b. C
var heapMemParams = new HeapMem.Params();; d5 A  W! n* U9 @
heapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大
+ q) ~" P7 z  V% C' k3 V2 ?" J. U( a8 y* h' ~
var Memory = xdc.useModule('xdc.runtime.Memory');
" q  j* y+ Q  {3 W" o7 QMemory.defaultHeapInstance = HeapMem.create(heapMemParams);
1 q2 J! C+ ?4 v- {) T8 [3 f# n1 T) `+ [1 W  c: Z
/* configure System module */) r; Y! ]4 g5 C# j; D" U
var SysMin = xdc.useModule('xdc.runtime.SysMin');2 h( z! A( ]: R7 e/ H& n# I
SysMin.bufSize = 0x1000;
5 c  `0 J0 I9 G2 J/ ^SysMin.flushAtExit = false;! q: f. R: I- v. q7 v6 H( X8 a* T

8 Q, ^  R' G6 Uvar System = xdc.useModule('xdc.runtime.System');0 p$ t- s; o# L, q
System.SupportProxy = SysMin;
1 Q  ]5 M  I. f( v( k& p
: Q& }, b, {+ \! |/* configure SysBios to use the lower half of Timer 1 */
( U/ t5 U, n) T" H, uvar Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');' r/ a# L$ L7 Z) B- R/ E
var Clock = xdc.useModule('ti.sysbios.knl.Clock');6 E6 X, F; ^8 e8 d/ y
Timer.timerSettings[1].master = true;
8 p, L& L! Y& d+ ITimer.defaultHalf = Timer.Half_LOWER;
, l, G: r0 `( A4 ]( oClock.timerId = 1;
5 C8 |0 i5 j- ~+ O; s" v
/ d: L" [' Q) k
8 R) z; r6 A2 R+ _. M/*4 e" p# z5 y$ `$ q) V3 S
*  ======== Miscellaneous Configuration ========) g5 l# u7 F  w- O2 c' R! O
*/
5 @9 P" @! ~% c8 ]# @  \
% Y) P  v: {0 l/* set default diags mask */( U, K3 z. W* ~& ]; ^8 N
var Diags = xdc.useModule('xdc.runtime.Diags');
& K7 @8 ]/ U5 |# x) _/ o* rvar Defaults = xdc.useModule('xdc.runtime.Defaults');4 Y$ q5 G# j2 t3 N. G& ~
7 |5 a" }+ D2 A
Defaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;* Q3 ]# z5 K5 z9 M$ n# ^
Defaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;
/ |$ w7 n  }: X! GDefaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;
% `. f# F8 E4 w! S+ ~- z1 f$ \Defaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */
' p& |: P0 r( `Defaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */
% V: ]2 D+ H1 a9 SDefaults.common$.diags_STATUS    = Diags.RUNTIME_ON;4 I+ D: {% g5 [9 Y9 U. i
Defaults.common$.diags_USER1     = Diags.ALWAYS_OFF;
  Y+ L0 G. A% {, N5 k4 [) KDefaults.common$.diags_USER2     = Diags.ALWAYS_OFF;7 F8 C& e& R) U0 r3 `$ T; d
Defaults.common$.diags_USER3     = Diags.ALWAYS_OFF;+ M! O  V. T3 v7 R# H, `$ d
Defaults.common$.diags_USER4     = Diags.ALWAYS_OFF;+ F8 s+ D' E# a' t
Defaults.common$.diags_USER5     = Diags.ALWAYS_OFF;1 ~; g# K& G2 ^0 y
Defaults.common$.diags_USER6     = Diags.ALWAYS_OFF;
  d$ j" K" f' O) n7 e9 MDefaults.common$.diags_INFO      = Diags.ALWAYS_OFF;
& R/ m3 e/ i3 U8 h( nDefaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;' D- w/ H! `, {. v9 Y

$ C) E2 O/ ?" ~7 T6 q+ u% b4 `/* override diags mask for selected modules */
" g( H$ [' r$ R, C8 s) q" o' `xdc.useModule('xdc.runtime.Main');+ j$ [( v: x* I3 ~/ s; n, Y
Diags.setMaskMeta(* |8 V: Z9 ^- ]5 e
    "xdc.runtime.Main",
+ _7 _# ~0 \0 H  g$ Z    Diags.ENTRY | Diags.EXIT | Diags.INFO,
6 z6 i% H( c5 H1 E( Q" O7 E  Q    Diags.RUNTIME_ON
) L  K) {1 j$ \- m9 U);, u3 A( i4 Y( p+ x

9 F: G* R$ Z- t$ |  `' a% _% D. Xvar Registry = xdc.useModule('xdc.runtime.Registry');' l2 ]( J" k8 e
Registry.common$.diags_ENTRY = Diags.RUNTIME_OFF;/ N1 g3 f5 k" [% Y! i' U+ |
Registry.common$.diags_EXIT  = Diags.RUNTIME_OFF;# y$ M# Y1 q2 E9 @% @+ ^* O
Registry.common$.diags_INFO  = Diags.RUNTIME_OFF;
: o% q4 J; C; W# LRegistry.common$.diags_USER1 = Diags.RUNTIME_OFF;7 S* a6 \; I4 Z& ^
0 w! L2 N8 c( l3 [# \3 J
/* create a logger instance */+ y! U4 i1 s8 e% {/ R4 q
var LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');* r6 r+ I& s2 N% i: D
var loggerBufP = new LoggerBuf.Params();
2 U& S& b8 g: Z) D% C! uloggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */
! ^' G, U$ `; s1 [loggerBufP.bufType = LoggerBuf.BufType_FIXED;, y: b5 }& g6 `% n, u

7 c8 H) V; N' b; D; l$ q+ Hvar appLogger = LoggerBuf.create(loggerBufP);
2 N0 l6 e) W: H$ T8 s3 tappLogger.instance.name = "AppLog_Core1";: l) J' i8 i3 Q! y# w
Defaults.common$.logger = appLogger;
  O  c8 y7 O: B2 gMemory.defaultHeapSize = 0x8192;   
% b5 @" w' }8 }! `+ K/ O4 sIdle.idleFxns[0] = "&LEDStatus";
' }7 e5 C; t: D% zCache.initSize.l2Size = Cache.L2Size_32K;# i& R& p4 e( O5 c4 z! v' c& e

( l( l/ m* A  W# {
回复 支持 反对

使用道具 举报

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 */
- L) \( X5 ~" j- E, v) ivar HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');( }* e5 ^4 F8 h  e/ Z" L  r
var heapMemParams = new HeapMem.Params();
; Q# Z' B* t2 q$ C' {heapMemParams.size = 0x4000;" E! x8 o2 D3 ~3 G1 J7 ?& i
. |& J5 d' |% ^  m/ B4 e
var Memory = xdc.useModule('xdc.runtime.Memory');
: T( |- j/ p8 _% ~Memory.defaultHeapInstance = HeapMem.create(heapMemParams);
; K) _0 M8 o; C! a0 z! J5 N  c- a8 \# q7 A: a
我大约calloc  每次共计大小为5K*16bits,. E! K4 E+ G$ V2 R; x
而默认配置才0x4000、需要改大。% O9 ~8 |5 c. j. G, |4 {
& X9 ~+ B: N% J; }3 \1 k+ b
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
5#
 楼主| 发表于 2015-10-28 16:14:47 | 只看该作者
/* no rts heap */% N" o8 X% P& [" k
Program.heap = 0;7 ^% _9 g2 w) F
Program.argSize = 100;  /* minimum size */
. l$ i4 A4 q" ^* RProgram.stack = 0xF000;                   //我改到F000  也不行
回复 支持 反对

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

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

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2026-1-26 08:04 , Processed in 0.041197 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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