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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2015-9-4 08:33:31 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
创龙工程师你好,我在OMAPL138单独调试DSP程序(使用SYSBIOS)时,在任务中使用calloc函数动态申请内存,用完后free,类似如下结构5 P. D5 ]. b% ?, s; p
/ a( }, |- a3 \# _* w7 @( u
    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //256
4 v1 ]" b# l2 R' q  K; u) ]3 @* W) v0 k  q; a" e
其他程序段。。。。。6 m6 f1 W0 x7 ]+ Y2 l/ l% a+ O" x
# v# ?: p( `  e1 ]/ K
   free(x_d);. }! P# V+ l8 P7 u& C
7 A8 \6 n  Z9 h9 a) m0 }3 b8 h
使用DSP侧单独调试功能,验证动态申请没有问题,
8 R" z( |: N# X; Z) o* `9 R' g; M4 `3 {0 i! C6 i3 z. t4 u. P
但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。
' t) Y) {( f/ p; d/ K) |

* _) Z7 A3 t+ i+ B3 O5 x! @. D5 s" e4 Q8 d0 G8 p

9 H5 D  _' Q# n2 f! x0 x5 ^0 B+ t8 @7 l0 I- H) m
9 w4 B, p' }. x* r( a& d4 y# }6 B
/ `4 s" r* z1 x% V' P5 B7 s

# E% p% h: Y8 m& R: B$ Q2 o. N' H* F" s& l- f2 p- n6 @

$ p6 x0 {# i. q. B
8 G/ O4 g1 \, v
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2015-9-4 10:29:21 | 只看该作者
补充说明
4 ~0 j2 r3 s) \' i0 b+ P1 k我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下
2 [3 r0 n6 u4 V% m; w(不过疑惑的是,为何单独DSP仿真就没有问题呢?)8 s; `1 {& D; X* x) {1 D

4 k% z/ v0 o; Y- D; r+ B, X# S是不是需要在DSP.CFG中进行配置
+ U: W' w& p0 c% y: F我现在的配置为
& L; E: Q& @! R, H( N; N! W. O: z
/*
) Z9 t% H& S$ l; [0 k; }" A *  ======== Operating System Configuration ========" C  Z' Y7 `8 u  i8 n: Z
*/1 X1 ^6 B: a7 Q# {7 Y

6 Q, L5 t8 r* `5 i9 Z/* no rts heap */( \  Y3 O; h* t
Program.heap = 0;
, o' j  G, D& F. S! RProgram.argSize = 100;  /* minimum size */( }. f3 r" o. x: |" q, D8 b& ?% D1 a
Program.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大7 z$ v/ d0 K* T; S# [) A7 b

0 Q4 \% S' [" F, ?/* create a default heap */' {* \$ _; |. G$ h; Y: _1 f
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
$ p1 `. [: q& P% o: c- pvar heapMemParams = new HeapMem.Params();9 A8 o! U6 E* M4 B: k# F- C4 \( X
heapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大$ Y2 m$ l$ ^& _1 M

( h+ G* m& b/ h  }1 g+ n
var Memory = xdc.useModule('xdc.runtime.Memory');, h( Q, O: N: Q+ B6 t
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);
! b6 f: b, |3 z/ U* [# X
; J: z' V. Y: ~! [; U7 w/* configure System module */
& q: D! _0 h# ~! Dvar SysMin = xdc.useModule('xdc.runtime.SysMin');
# Z, C$ `7 u" g' v7 H" B! ASysMin.bufSize = 0x1000;
& T" C0 P$ K9 a% S* |SysMin.flushAtExit = false;
  S7 J. s2 d% b$ |  H. y1 E+ H; ?( x- _; Y
var System = xdc.useModule('xdc.runtime.System');
) m1 A! [0 A- t* |6 }! |* \* l5 }, wSystem.SupportProxy = SysMin;$ h3 ?& C2 Y. R* f  _% z" `

7 [; i5 H2 k/ C. g4 {/* configure SysBios to use the lower half of Timer 1 */( T; T2 }4 \  r+ X. ]! R
var Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');
0 v/ F8 j, ?, U- P* Uvar Clock = xdc.useModule('ti.sysbios.knl.Clock');& g2 I0 r1 Z4 s& w* r8 F
Timer.timerSettings[1].master = true;8 g  O6 e) ~- Y5 H
Timer.defaultHalf = Timer.Half_LOWER;$ W! c1 k9 C$ p% }2 ^
Clock.timerId = 1;7 H5 `% I8 v4 X( y5 s- W" p

! r; A# q) T8 f6 u) x8 ^) `0 a. u# V$ b
/*
9 R; ~3 q* R' e5 ~9 j/ x1 F# j& e% | *  ======== Miscellaneous Configuration ========- u0 Q5 d) P/ K2 l9 d+ P
*/
5 U  _- t1 v' g: ]$ Q
8 m4 d2 L8 p; E5 U" C( h/ \/* set default diags mask */+ M& W$ r! T! d, Z* [6 ]
var Diags = xdc.useModule('xdc.runtime.Diags');6 n7 `9 C  t6 U5 V! [
var Defaults = xdc.useModule('xdc.runtime.Defaults');7 R3 R. ~9 p& b4 F% T3 _1 [' W
: z: {$ e) z: K: |
Defaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;
  h8 L" P0 l6 R' Q- zDefaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;
" R2 c. q1 l" i  N6 ODefaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;. h* U6 \' x5 B2 c$ z
Defaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */
4 R% A% @8 n1 G  s* \4 YDefaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */% V) r. y6 K+ I1 Q
Defaults.common$.diags_STATUS    = Diags.RUNTIME_ON;
  v5 n+ F9 S2 O8 R! E9 KDefaults.common$.diags_USER1     = Diags.ALWAYS_OFF;: Q' @3 A7 U9 }  G% s, p  E
Defaults.common$.diags_USER2     = Diags.ALWAYS_OFF;& F) B9 h+ \# p8 V. w' C6 o
Defaults.common$.diags_USER3     = Diags.ALWAYS_OFF;4 p3 ~0 a5 R: ~! O' S6 q
Defaults.common$.diags_USER4     = Diags.ALWAYS_OFF;
1 g+ q6 Z) |1 n- i  P' v( x/ hDefaults.common$.diags_USER5     = Diags.ALWAYS_OFF;# ~: W  A) H2 b$ B; D2 t
Defaults.common$.diags_USER6     = Diags.ALWAYS_OFF;3 i9 G: u$ Z) U3 I0 R. m! Q% r
Defaults.common$.diags_INFO      = Diags.ALWAYS_OFF;
5 Z; o! U  ~$ w( W/ j$ ?Defaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;* i. W6 A, X& H

3 `0 M, C/ g" r; y( ]9 A/* override diags mask for selected modules */' n4 c( }9 O0 p  G: ^4 z) H
xdc.useModule('xdc.runtime.Main');5 c9 g+ A+ i" N2 w/ i+ v6 O! \  ^  _7 ?
Diags.setMaskMeta(
0 ^3 k* u* R9 E, d$ R7 \. E, U    "xdc.runtime.Main",
) c( x8 u# w) i/ p/ \    Diags.ENTRY | Diags.EXIT | Diags.INFO,* S8 k; s! Q2 {, ]% N1 O$ Z
    Diags.RUNTIME_ON
$ _) V- i: C3 ?4 C5 _' Q6 n);, X" i1 v: c: f# L0 X

9 \; V2 [3 I! f3 Q4 k5 nvar Registry = xdc.useModule('xdc.runtime.Registry');; j+ _0 l6 P- M. v
Registry.common$.diags_ENTRY = Diags.RUNTIME_OFF;
0 a) ~5 Q% R4 o" r. GRegistry.common$.diags_EXIT  = Diags.RUNTIME_OFF;4 F% ?& {3 I4 p+ T
Registry.common$.diags_INFO  = Diags.RUNTIME_OFF;
1 A" ~  q8 B2 Y" y) \2 z4 x# oRegistry.common$.diags_USER1 = Diags.RUNTIME_OFF;
$ u$ e! B4 d! {8 B
: U+ [% R) B7 b! h. ^, h9 {+ d8 f$ w5 n/* create a logger instance */
! ~8 Z! r! ?( M3 Dvar LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');
, `0 v' r. ?* H' A& R& Tvar loggerBufP = new LoggerBuf.Params();) v! b& H6 I) x6 |. m/ X6 r$ R1 H  G
loggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */, q2 f" Z- S0 i& j7 c
loggerBufP.bufType = LoggerBuf.BufType_FIXED;
; X: O, y, i' ^5 A( W' s+ f8 E/ [, e8 u1 t3 T3 c
var appLogger = LoggerBuf.create(loggerBufP);
" I& x& n  Y* x( B/ nappLogger.instance.name = "AppLog_Core1";
% E" M7 p8 i. a% f. l' x; a4 C* gDefaults.common$.logger = appLogger;
. y: t  ?0 i" ]' `2 j, _/ CMemory.defaultHeapSize = 0x8192;   
# E4 O& S/ t' h3 W8 c. K* tIdle.idleFxns[0] = "&LEDStatus";  f: d6 O. N! V5 Q5 v
Cache.initSize.l2Size = Cache.L2Size_32K;
4 @/ I4 R6 Q  }: W! V, S* |" H/ U8 z& s2 }
回复 支持 反对

使用道具 举报

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 */% y5 j; u1 `: c0 K
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');5 c4 }7 s! {9 V/ x% P6 G. P
var heapMemParams = new HeapMem.Params();
, a3 j! U, z. f* g7 JheapMemParams.size = 0x4000;; R2 ^) y2 w8 o! S# ?8 O4 M

, I1 {& E- a' Yvar Memory = xdc.useModule('xdc.runtime.Memory');
1 `5 S7 s% Z- ~# N) E4 O6 {! ]3 [Memory.defaultHeapInstance = HeapMem.create(heapMemParams);
8 |. t* S% V$ f. k- `* e4 X* @% W. i5 T, X/ C8 C
我大约calloc  每次共计大小为5K*16bits,) ^3 @) I/ X5 h! v* i/ c
而默认配置才0x4000、需要改大。
3 ^% g0 ^( ?+ ]' K4 R; V0 k9 N, Z) M
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
5#
 楼主| 发表于 2015-10-28 16:14:47 | 只看该作者
/* no rts heap */
/ B% y& Y- ^- L9 z6 t2 }+ C: R! QProgram.heap = 0;
& s9 D) o" |. T1 vProgram.argSize = 100;  /* minimum size */% d& r3 }: ~  t2 b
Program.stack = 0xF000;                   //我改到F000  也不行
回复 支持 反对

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-11-14 12:18 , Processed in 0.043385 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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