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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2015-9-4 08:33:31 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
创龙工程师你好,我在OMAPL138单独调试DSP程序(使用SYSBIOS)时,在任务中使用calloc函数动态申请内存,用完后free,类似如下结构$ ~8 @2 U9 A: {+ W6 Y  f- O6 V
; w8 o) l& L' @8 S
    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //256
5 ^- A( f8 \$ u0 H8 f% ]9 S
' o1 h' c- }! U! K其他程序段。。。。。4 Y1 I5 k+ Q" W9 R
" \% {  a6 B- H' q' ]
   free(x_d);% Z+ z' K8 R) G- F: m$ J1 z
/ l1 k5 @3 `+ V# c/ j+ @) o$ U
使用DSP侧单独调试功能,验证动态申请没有问题,# |5 Q( q; `/ \& g! {
# {4 p. t+ G, U5 b5 P
但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。
8 j+ i: Q4 D# }0 c
0 e. L7 X- J4 s% |: T8 x, v% D/ y; c

+ a, k8 x: J' `% N8 {8 u  j# c8 S& U/ i4 h1 w

! ^, [! P8 m, L$ y  \& D8 Y  }$ x# y& m
; ^' f" B) i$ T4 [/ i  y7 w
# }- p4 {2 J2 p' m
, K/ h' r( x0 p' a1 R8 Y- K; _

4 o- R, }- C4 e; x. R  w  b% M  |! u, s4 s
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2015-9-4 10:29:21 | 只看该作者
补充说明7 ?; ^. m1 G" @$ q/ k; A" c7 U
我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下
( J# Q) ~$ Y. |2 w: L! [(不过疑惑的是,为何单独DSP仿真就没有问题呢?)
" J1 I3 N, `5 o" R$ k# t# _
( q' i# \' V* K  ~( S
是不是需要在DSP.CFG中进行配置
; {0 e! R6 R0 w5 Y  z! r我现在的配置为
  m" m+ F( [. V% X# U; K# e( k1 \4 |3 o8 M6 W
/*# F. s. U0 P2 O2 V) ]4 A: d5 U  }
*  ======== Operating System Configuration ========+ j8 P$ V/ s5 K9 D
*/8 c6 e  s" W5 N8 _9 U' z

+ M  }# b: }9 j, D" n% _8 Q/* no rts heap */, g5 u  l% c$ A! t* S
Program.heap = 0;
4 D% t  S3 N2 b" a% s+ H. P$ ~# M, BProgram.argSize = 100;  /* minimum size */
  f% Z$ J4 u  I& S: T7 w; }Program.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大7 M! I8 G: b. N# |1 S0 ]

( e' K3 Y- u" c7 j) ^  ?6 u  n. s2 S/ @0 z/* create a default heap */
6 `- u  M; T1 k- a0 ]7 d, ]var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');& a5 x/ ^3 I4 x* x2 U* D! H
var heapMemParams = new HeapMem.Params();! r8 Z+ r. q" C2 b: E) K
heapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大
4 j3 Y3 X) C8 H# H/ y7 {6 d2 [2 F9 r% J+ f, K
var Memory = xdc.useModule('xdc.runtime.Memory');4 [- Q, @5 E- q7 {
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);8 X0 A, L: G( j6 t% P
- u) _/ j, i* n0 Z! Z' c
/* configure System module */
/ Y2 |0 k5 c: t, g3 wvar SysMin = xdc.useModule('xdc.runtime.SysMin');
, a. M  g; ^. O* C3 _6 [SysMin.bufSize = 0x1000;6 F& q9 M; c/ T
SysMin.flushAtExit = false;
& I0 |6 Z/ w5 A, z$ D: A# c3 D8 B+ P' s. E: d$ O
var System = xdc.useModule('xdc.runtime.System');0 b( `5 ^+ X! f0 A/ `3 e' J# T
System.SupportProxy = SysMin;, M7 G5 m1 r3 S; T$ O* H" R9 S! r) E
* v" Q" B1 o6 a, m( p  P
/* configure SysBios to use the lower half of Timer 1 */" H  _; I# Q9 m6 d. `) W; X- Z2 Q
var Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');
7 x% B+ I: d. y8 I7 H8 Z- Svar Clock = xdc.useModule('ti.sysbios.knl.Clock');
0 n0 p( [7 z& @+ X& PTimer.timerSettings[1].master = true;1 b  ~, E3 E6 x! {9 @
Timer.defaultHalf = Timer.Half_LOWER;
* d# B5 t& ^- I! ~7 S$ H& bClock.timerId = 1;
+ w! l! i+ f8 _; r' A# x7 M! v$ I+ S
$ e: g! w1 e( V  g+ K9 L- o! I
/*( n+ C4 N# S, f; j% R
*  ======== Miscellaneous Configuration ========: N6 j3 J, _1 L
*/
' r% W, B1 N7 q- N, v% `, ~
" g3 F; U+ @, ~; |2 v/* set default diags mask */
3 {& ?# n5 Z, R7 l+ Pvar Diags = xdc.useModule('xdc.runtime.Diags');9 z+ u  b. k; f
var Defaults = xdc.useModule('xdc.runtime.Defaults');
) d+ S  x6 ]3 C' Z) D* L" h/ F+ \5 [1 i
Defaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;- q, \7 e' M" G! I+ d
Defaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;
& o6 H, `; t2 I( d9 m  kDefaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;
  ]1 z. r* a4 f, X5 r/ c! wDefaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */2 C- }+ C% e  O1 }8 U# v! [
Defaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */- M. b8 o  R- B5 |7 u5 R
Defaults.common$.diags_STATUS    = Diags.RUNTIME_ON;
' x2 U4 ^! w: p9 K, sDefaults.common$.diags_USER1     = Diags.ALWAYS_OFF;
' J: `7 z& t: `* F( q/ d+ J6 GDefaults.common$.diags_USER2     = Diags.ALWAYS_OFF;- C4 {8 s- j; a0 d& _  ^
Defaults.common$.diags_USER3     = Diags.ALWAYS_OFF;
* d9 H6 X: h; `" \' LDefaults.common$.diags_USER4     = Diags.ALWAYS_OFF;
/ N, p! l5 @0 u# D: v" fDefaults.common$.diags_USER5     = Diags.ALWAYS_OFF;5 L; B  d  ]/ P) t$ B
Defaults.common$.diags_USER6     = Diags.ALWAYS_OFF;
  O9 h9 `' \! [' H* c# X* bDefaults.common$.diags_INFO      = Diags.ALWAYS_OFF;# j" y6 }' E7 E5 e7 W2 D
Defaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;, I: I0 l5 T8 |) F: c4 H) F2 j
( }) M7 R2 u0 v. U% h  U" s' F1 Y
/* override diags mask for selected modules */
/ u9 t, |7 q+ b/ Jxdc.useModule('xdc.runtime.Main');
* O' j- Y" [# C% i8 QDiags.setMaskMeta(% A+ d5 r  q8 k$ K
    "xdc.runtime.Main",6 @. W# z9 v: M
    Diags.ENTRY | Diags.EXIT | Diags.INFO,
6 \( Y, e# w7 k6 q9 D6 }    Diags.RUNTIME_ON' u/ A1 z) Y5 s' `  @5 ?
);- G& f$ q" g  m. x% `; u) I
! n* S( U6 Q3 e, U* @/ W* f- i* _6 _
var Registry = xdc.useModule('xdc.runtime.Registry');
- D6 B; Y8 ]* V( T8 aRegistry.common$.diags_ENTRY = Diags.RUNTIME_OFF;
$ R1 T5 i9 w% ~7 s/ O7 NRegistry.common$.diags_EXIT  = Diags.RUNTIME_OFF;- }3 z' G" m: P7 D5 p: X
Registry.common$.diags_INFO  = Diags.RUNTIME_OFF;
: N! p& Y3 @) F: y% }Registry.common$.diags_USER1 = Diags.RUNTIME_OFF;% a2 G" {4 ~0 W0 p

0 e6 M3 ~+ M2 D! v/* create a logger instance */
9 a0 d2 k% ~4 `: Y+ tvar LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');+ D3 q4 B# q3 w- Y  K
var loggerBufP = new LoggerBuf.Params();* h! \' z7 |& J2 I
loggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */
8 m2 b7 q2 H0 ^. k; W6 b/ _4 q$ _8 GloggerBufP.bufType = LoggerBuf.BufType_FIXED;
. Y% o" r! p! V$ e
6 c& \0 Z) D$ \: V9 lvar appLogger = LoggerBuf.create(loggerBufP);
( x' ]( `6 r: \9 GappLogger.instance.name = "AppLog_Core1";/ R2 P& A1 L1 K" P# T+ S
Defaults.common$.logger = appLogger;
; `* a9 l8 R7 e4 D3 r/ X: c) rMemory.defaultHeapSize = 0x8192;   
" O" j9 y2 a& h4 u0 R* o' w3 XIdle.idleFxns[0] = "&LEDStatus";/ f% b3 z! @2 M1 r6 E) x
Cache.initSize.l2Size = Cache.L2Size_32K;
4 z: x  o  N+ J
) m# N9 B) J1 i# e2 ?. e) z* N
回复 支持 反对

使用道具 举报

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 */
7 o; l5 |+ u  A( Zvar HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');3 I8 R' a8 e" U; l& e
var heapMemParams = new HeapMem.Params();5 r- U+ s  k, H. r, i
heapMemParams.size = 0x4000;( M* r& D9 M# d9 t

, c& I+ a) ~5 Pvar Memory = xdc.useModule('xdc.runtime.Memory');/ c7 G0 _' _: L( `5 M% G. |
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);7 ], N! z3 ?5 I+ [  H: f3 }

" d4 |) J' k; R6 f+ ?5 f$ i) c我大约calloc  每次共计大小为5K*16bits," R6 g. _; _* y7 P5 A7 D" V4 H2 ~
而默认配置才0x4000、需要改大。
4 z: i: b) S3 K1 v! Y2 O  m
) q8 G/ l& v$ r' S4 S/ k
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
5#
 楼主| 发表于 2015-10-28 16:14:47 | 只看该作者
/* no rts heap */
( e# b0 y% ~: q5 hProgram.heap = 0;
0 A* d, q- i. U" J% W5 GProgram.argSize = 100;  /* minimum size */: ~6 q. z% Q# Y' ?3 P; P
Program.stack = 0xF000;                   //我改到F000  也不行
回复 支持 反对

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

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

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2026-3-31 00:04 , Processed in 0.047108 second(s), 27 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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