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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2015-9-4 08:33:31 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
创龙工程师你好,我在OMAPL138单独调试DSP程序(使用SYSBIOS)时,在任务中使用calloc函数动态申请内存,用完后free,类似如下结构& D' ]' G; \* L* |4 p
0 c! f1 _$ a7 M- s
    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //256
5 O- s" X, v4 \/ {
* y, \% t! y, W8 W% Q其他程序段。。。。。
' [) g/ T# c. Z% F6 n  u0 n 0 J8 h0 {+ H3 u% F; Z0 |- u
   free(x_d);8 C5 e* X( C) B& u1 A

4 E, M# n! m0 d( P% D2 A. L/ I; @1 v使用DSP侧单独调试功能,验证动态申请没有问题,
0 V% S# S+ z3 g+ O. C$ X1 m5 t" m, n$ u# x, @
但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。
  A0 _9 z/ V' L+ ?1 E

0 A5 R) F/ Q% s
  I1 d0 F0 U! L8 @/ ~1 f# G: R5 I1 e2 j3 |
2 w, X) z0 N6 \5 n( e6 L8 e! |
% e( x) R* \# \/ w" x2 F
/ B8 g6 p8 G0 C: O1 D

# E! U/ z6 _% D6 C. _+ z* V- q* @) v, ^! n$ U( c

* _/ D# {0 g' q3 }# @
5 J5 I4 n+ A4 \  x* F- T
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2015-9-4 10:29:21 | 只看该作者
补充说明
; c% x0 B+ m; e8 s/ h. w我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下
0 j& |1 a  |3 Z# z(不过疑惑的是,为何单独DSP仿真就没有问题呢?)
7 [( O4 u1 b) Z7 H) [  d8 W

. q) n+ V5 b7 \9 L+ ~* g* S是不是需要在DSP.CFG中进行配置) f7 |" M  O) C. l) e
我现在的配置为' O" t( t* U7 N# d! r

! S! d1 m/ a; z% q/*
6 c/ y8 C' O( a5 y *  ======== Operating System Configuration ========/ V0 h7 j+ K6 X* c4 S0 c
*/
6 J' J# r3 O8 F. g1 c% t
% A/ n/ r  g2 M& I' {/* no rts heap */
8 {7 b6 P/ l  uProgram.heap = 0;
/ P. c. Q" k2 o' S) PProgram.argSize = 100;  /* minimum size */2 ~" D% e# q( l0 J& c
Program.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大
+ e( a$ z& `& j, O6 q! r! J- ~: C* V; h6 A. G& d4 [/ {! o
/* create a default heap */
* C* x. _1 I" z* \7 ~2 Svar HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');3 A  m- S' X0 A( L1 u: E' i' V
var heapMemParams = new HeapMem.Params();* c1 L# q! w' T; |/ \
heapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大7 @/ t$ ?- `4 s2 ~9 M( X- ?
5 ~3 }8 ^( S& \5 l* r( |
var Memory = xdc.useModule('xdc.runtime.Memory');
  _+ p. t2 Q: O4 D5 aMemory.defaultHeapInstance = HeapMem.create(heapMemParams);
, c8 _2 B. _- ^$ P, A# X7 G8 `6 t" E6 w3 o" J) W, b* M0 C# w
/* configure System module */2 C  W! O! G. N3 C0 b
var SysMin = xdc.useModule('xdc.runtime.SysMin');
8 V; U% G3 z+ i. `" q  lSysMin.bufSize = 0x1000;
' C" c7 H* n+ U. o7 \6 rSysMin.flushAtExit = false;% X# O- r0 L! a* K' p7 p0 ?0 p; K

5 v! c' L# F. \6 d$ I* n" N, Qvar System = xdc.useModule('xdc.runtime.System');/ w2 v1 A  C/ v5 m# D( ~
System.SupportProxy = SysMin;3 v! j0 ?' D- I" \3 f" f7 H
- @5 ~1 t  I9 Q. W
/* configure SysBios to use the lower half of Timer 1 */
5 Q! `/ N; R% f8 t9 Nvar Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');& j+ Z0 i, [* ]) b: X4 [9 T
var Clock = xdc.useModule('ti.sysbios.knl.Clock');) e/ c0 L3 r9 B$ f2 L) Z2 j' f
Timer.timerSettings[1].master = true;
9 l' R! q+ E, k9 p0 dTimer.defaultHalf = Timer.Half_LOWER;  q3 z# }4 Q  g4 k
Clock.timerId = 1;$ E7 Q9 k% U  c: J3 Q) o* T

- S2 d( o$ [) R" e& G! o* h7 g! M: ?9 a8 b1 Z  _' }" ]2 y
/*
/ D& `# y7 Q2 Y/ m; Z) ^. ~% } *  ======== Miscellaneous Configuration ========
/ l9 R# F# h: A' L* r; L */) P! o* Z/ I# E6 r% A) G- s& r8 X* T
% O- K$ o5 V8 Z2 o
/* set default diags mask */( J( [. x% I; m7 I; I; G+ V8 u+ m
var Diags = xdc.useModule('xdc.runtime.Diags');* `0 C: ?% p6 D/ S
var Defaults = xdc.useModule('xdc.runtime.Defaults');- ~7 M8 {9 }" ^1 ]

; ?" \& ?+ M( j4 a. U6 SDefaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;
& @9 T8 E5 A  qDefaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;
% L5 W9 `, `7 S1 mDefaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;7 v+ q' g, h1 }. n$ V) j7 ~
Defaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */) y( G: H5 q* L$ c1 K! e
Defaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */
2 e( Z* P' A. t1 c/ xDefaults.common$.diags_STATUS    = Diags.RUNTIME_ON;+ w: W$ B0 h) i5 \3 E
Defaults.common$.diags_USER1     = Diags.ALWAYS_OFF;
/ N+ [9 P6 @% T6 uDefaults.common$.diags_USER2     = Diags.ALWAYS_OFF;0 B5 ^* N* }3 M/ ~
Defaults.common$.diags_USER3     = Diags.ALWAYS_OFF;9 v) W& P& o3 j6 W/ `' G" m: C. _3 C
Defaults.common$.diags_USER4     = Diags.ALWAYS_OFF;
& m  B+ j/ E% T- C7 T6 MDefaults.common$.diags_USER5     = Diags.ALWAYS_OFF;0 P/ J4 W  S8 {( J6 b
Defaults.common$.diags_USER6     = Diags.ALWAYS_OFF;+ r# {3 Z6 j. h/ n" H3 U8 |1 L  i
Defaults.common$.diags_INFO      = Diags.ALWAYS_OFF;
! F# ?$ Q. ]4 R' j6 LDefaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;
5 \: q3 |3 g  A4 u! \2 v$ ^: K" Y  E. g
/* override diags mask for selected modules */* ?2 l( {  n' \( F  L
xdc.useModule('xdc.runtime.Main');- }1 Q, V6 Y/ t! p: J) ]9 X2 o
Diags.setMaskMeta(4 W: s4 k; x+ t, z9 d, L, d7 P
    "xdc.runtime.Main",
/ O6 O; m8 W2 @* B  a& D    Diags.ENTRY | Diags.EXIT | Diags.INFO,: K4 k: {8 f4 r8 O
    Diags.RUNTIME_ON# l2 `/ {) C5 _" y
);6 Z- ]. K+ W( k/ \1 r/ ~& I

! E6 g( F1 Q# Pvar Registry = xdc.useModule('xdc.runtime.Registry');
! b1 t2 ~0 X0 ?7 r$ j+ N9 ~' f0 @Registry.common$.diags_ENTRY = Diags.RUNTIME_OFF;
6 z0 U' C& Q7 B* @- B6 yRegistry.common$.diags_EXIT  = Diags.RUNTIME_OFF;* z! ?1 M& T! @
Registry.common$.diags_INFO  = Diags.RUNTIME_OFF;
/ n0 e3 S' i0 V4 {8 g$ MRegistry.common$.diags_USER1 = Diags.RUNTIME_OFF;; r. a; C" H, g3 @+ R$ r4 U; X
) U5 x) m6 j" f) ^0 U
/* create a logger instance */
5 j4 e3 P% q! b7 C& ]9 W+ u8 |var LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');  l8 Y6 U3 i' M* |. S
var loggerBufP = new LoggerBuf.Params();8 C2 a4 J% Z9 W: C+ s! p5 q( z- k
loggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */8 M" N3 ~0 U& H" |
loggerBufP.bufType = LoggerBuf.BufType_FIXED;/ P9 `  X+ H* {
: y8 t0 t- i7 R  V; H( J( q
var appLogger = LoggerBuf.create(loggerBufP);3 j' b  {+ X. P8 e1 s
appLogger.instance.name = "AppLog_Core1";8 [( \! w1 J& P* b% O
Defaults.common$.logger = appLogger;
; ^: g# D. k% `9 d6 X5 Z1 JMemory.defaultHeapSize = 0x8192;   
3 }5 O; S/ W9 A( S6 fIdle.idleFxns[0] = "&LEDStatus";
/ Z2 \1 @! ]2 f* f4 l, c) lCache.initSize.l2Size = Cache.L2Size_32K;
5 L- V3 |3 g6 G* @* ^4 j5 Y% e& E) {5 r
回复 支持 反对

使用道具 举报

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 */) k7 r7 P" {. N! \: k
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');9 X) O4 O& h# y+ ^  {
var heapMemParams = new HeapMem.Params();0 G2 M  [: l3 X' b2 Z) W" Z0 i
heapMemParams.size = 0x4000;
' l" p2 n( m1 e6 U! o3 c
5 ~' N0 K5 |3 ^& K+ I4 z2 svar Memory = xdc.useModule('xdc.runtime.Memory');
4 N& v/ b- P! A% B- `Memory.defaultHeapInstance = HeapMem.create(heapMemParams);0 A3 O6 f1 |& S. h9 H/ K! z2 \
6 X. u  f3 [9 [) N) ?& L8 S
我大约calloc  每次共计大小为5K*16bits,- j9 q3 U1 Z: P7 g  v* i; D
而默认配置才0x4000、需要改大。
; V, r0 [  |9 A4 u: @. n3 E$ A$ I1 Q1 _8 A4 d9 |/ R2 a0 R
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
5#
 楼主| 发表于 2015-10-28 16:14:47 | 只看该作者
/* no rts heap */
+ }+ E2 y+ }5 c9 X6 L( VProgram.heap = 0;) d, t/ r; T' a: ]
Program.argSize = 100;  /* minimum size */
0 q& C- W& u5 p( n6 j, KProgram.stack = 0xF000;                   //我改到F000  也不行
回复 支持 反对

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

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

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2026-1-20 12:29 , Processed in 0.044225 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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