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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2015-9-4 08:33:31 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
创龙工程师你好,我在OMAPL138单独调试DSP程序(使用SYSBIOS)时,在任务中使用calloc函数动态申请内存,用完后free,类似如下结构
3 N5 A) W% w, t) G& l( J2 A! p/ I) X: `$ m( B! \* T
    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //256
/ C  M. k4 t0 q3 t( f9 C9 q! r6 y8 b+ ?) t7 p
其他程序段。。。。。; h) A+ D: W+ p+ \4 P8 q& C
. M' }* U" M- z6 q2 q- F) P
   free(x_d);- v4 h: \( u; V$ N

, d" x# h3 J% O5 P" {使用DSP侧单独调试功能,验证动态申请没有问题,
# ]7 `# w5 y9 D: [- F& a
/ F0 S+ f% r  Q- _: @; u但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。
3 {/ @1 C9 N: Z* O0 S% L
1 h% t0 }% q% H2 h+ j' c% D

! }$ j5 ?% Q, q. X+ b9 O; h. j5 Y8 K7 _3 K3 X/ O
  A- Q+ Y% A( K  ~

% L# P1 [! g, d. \% B: X( z& L5 ]$ c( l8 i( ~* w+ x

& B, ?) w" o# [) t$ N. U6 Y, u- B4 t3 t) j+ d" O

) m% M( v0 Q7 O& Q; X2 Z8 K. v6 K( N9 y
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2015-9-4 10:29:21 | 只看该作者
补充说明
: H6 f4 ?( @  S% z: r4 o我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下/ c8 X4 O- ?7 h- [; d
(不过疑惑的是,为何单独DSP仿真就没有问题呢?)
4 g; f" |  D' a7 z- O+ H
& h7 J* \2 D/ d) K# m1 I% H! I
是不是需要在DSP.CFG中进行配置7 i4 y+ _1 e/ A! K3 d. u
我现在的配置为" ~, F; A" o/ |* [$ t$ B% `
& [+ N% w/ F6 t7 g
/*
! f0 |+ u$ i$ H4 z$ X, T *  ======== Operating System Configuration ========, R% k2 X# v: A! o" r% A6 L
*/- m% k% H! J" G5 P  t! C

9 i6 R4 [6 H6 g2 w1 u/* no rts heap */
- Z& n  \9 P8 S, JProgram.heap = 0;! c) Z  ^7 C* g8 q8 e- \# m5 K
Program.argSize = 100;  /* minimum size */
' |3 n6 X! H& _0 `; m7 H) z8 C$ EProgram.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大0 N) C, N# H9 N$ v0 ~# G" w) w* [4 K& ]

! c; X. G0 I: x, f/* create a default heap */0 x/ u; m5 B9 U. y! S, E
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');6 O  X) i9 r& M, D' `0 F' o
var heapMemParams = new HeapMem.Params();$ _9 D/ a1 z" e1 x- D" Y* J- r* x
heapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大
, @- |/ x7 b9 w0 S" ^9 L2 J* t+ D$ o3 \# {# ^, @! R
var Memory = xdc.useModule('xdc.runtime.Memory');# o6 \& u2 X4 e
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);1 F( A% w* ?2 R
. J: H. t6 G% p# Q: s
/* configure System module */: O" `& X8 T/ w% ?2 |
var SysMin = xdc.useModule('xdc.runtime.SysMin');, C) V! r- _2 a  T4 _
SysMin.bufSize = 0x1000;. B2 V0 K5 I! H0 B' w1 Y* V
SysMin.flushAtExit = false;) w0 `' U5 m/ c1 g6 ]7 R2 n0 @, g0 r

& E. `7 v9 o$ ^) R5 k5 \9 Svar System = xdc.useModule('xdc.runtime.System');+ p+ C4 ~; H# q) A) }9 [/ e
System.SupportProxy = SysMin;2 G% k  ?  I2 i: c( \' ~
; H$ }  w' z$ Z
/* configure SysBios to use the lower half of Timer 1 */
# v6 |( N2 R2 O( j9 avar Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');( B, v' T- D2 P
var Clock = xdc.useModule('ti.sysbios.knl.Clock');( ^- @/ t2 S! E3 B7 u9 [
Timer.timerSettings[1].master = true;
) j, h# |; F. y# z' P+ F( N+ A$ oTimer.defaultHalf = Timer.Half_LOWER;
% K0 {; y0 X3 ?4 y- _' }Clock.timerId = 1;  Y" F0 z  T+ B

' {" B- p$ t1 ]0 A/ c* L1 w; m
* _! K3 R+ p  S% W/*- ]. V: x, }+ B& E2 K* ^
*  ======== Miscellaneous Configuration ========" W; [& @, ]0 W: }0 [0 m2 N1 z  F
*/# h; a( q6 D, w& w) r+ G* s
8 w6 K5 |8 J* ?; J2 x
/* set default diags mask */
8 z3 Y& }% L* v" W4 mvar Diags = xdc.useModule('xdc.runtime.Diags');  X0 O. M2 I1 t
var Defaults = xdc.useModule('xdc.runtime.Defaults');3 t7 M) w% a' m& d# [# t

- S# l9 `, Z; o, A0 qDefaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;9 }. Y2 U6 J) U
Defaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;
, u6 w7 ?. e" [6 ^9 KDefaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;3 s8 W4 E% W& e" T
Defaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */1 m5 [: }" O+ H* H& ^+ F
Defaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */
6 ~' O4 g; T' N8 e3 ~& nDefaults.common$.diags_STATUS    = Diags.RUNTIME_ON;
: i4 T2 j5 y% Y) B/ pDefaults.common$.diags_USER1     = Diags.ALWAYS_OFF;
. c+ B% N/ C4 T4 d" o3 bDefaults.common$.diags_USER2     = Diags.ALWAYS_OFF;6 y9 J8 {# o, y" R$ |
Defaults.common$.diags_USER3     = Diags.ALWAYS_OFF;: z9 ?+ I* w2 J
Defaults.common$.diags_USER4     = Diags.ALWAYS_OFF;- \' t  h5 H- e7 r
Defaults.common$.diags_USER5     = Diags.ALWAYS_OFF;& W- q" J+ v9 l  ^  P6 d
Defaults.common$.diags_USER6     = Diags.ALWAYS_OFF;) Z' e9 ]) G; i# i; F0 z
Defaults.common$.diags_INFO      = Diags.ALWAYS_OFF;
( C% Y1 i. l" t. S) M2 F- l4 CDefaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;
0 k$ {0 f7 r0 B2 E
4 \! M2 k  r9 S- J/* override diags mask for selected modules */; J4 b; C( C9 b+ {& \- ~
xdc.useModule('xdc.runtime.Main');
7 ]) d% p1 Y  T9 p. vDiags.setMaskMeta(
) l( p4 r# {5 ^0 @5 f; V7 z7 J! ^    "xdc.runtime.Main",. S+ S8 E" C1 w7 h& Y6 p
    Diags.ENTRY | Diags.EXIT | Diags.INFO,; f' U( Z3 W: _
    Diags.RUNTIME_ON4 h1 O" o# }, m. e+ K
);  m# N( G" u6 b, U# D

5 W0 ^/ b: K+ D( t5 s! pvar Registry = xdc.useModule('xdc.runtime.Registry');/ U% _  M: f2 _3 I6 L3 q. T8 l
Registry.common$.diags_ENTRY = Diags.RUNTIME_OFF;4 j8 L) K- M. C. p2 C
Registry.common$.diags_EXIT  = Diags.RUNTIME_OFF;2 y7 Z7 f% C& ?% {7 ?
Registry.common$.diags_INFO  = Diags.RUNTIME_OFF;; ~" B& a; n" V4 P4 O
Registry.common$.diags_USER1 = Diags.RUNTIME_OFF;
. U( u, M% Q' C; Y- \
( |. @3 v$ x, s4 m) q# B0 {/* create a logger instance */
: z4 b& F. t( [* v: [var LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');$ d' ^6 [: ]. t% a2 `" F
var loggerBufP = new LoggerBuf.Params();' b* {. ~5 K8 i( ~( X. ]  Z
loggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */
5 k% ?/ q# s! x, F7 z: b6 `. j% UloggerBufP.bufType = LoggerBuf.BufType_FIXED;
2 P7 `, Y9 F. y3 X
! Y( z; j8 c; ~  @) ~* }5 }! pvar appLogger = LoggerBuf.create(loggerBufP);, y1 T7 }% w* g# d+ h2 O
appLogger.instance.name = "AppLog_Core1";
' D+ K$ C. R6 S1 J0 t8 L  S. nDefaults.common$.logger = appLogger;1 G3 n8 X. Q* B1 d1 A
Memory.defaultHeapSize = 0x8192;    & q. N, S, L; l- O6 z; A) q
Idle.idleFxns[0] = "&LEDStatus";
% R) b& k8 t/ i" t7 CCache.initSize.l2Size = Cache.L2Size_32K;
# q. L' B/ o; k7 O, s+ D( Y
  i5 t# y/ f: N# ~! P4 E/ V7 y, F* U
回复 支持 反对

使用道具 举报

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 */
! b7 ?+ ]1 D6 W% Kvar HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');' C' s$ }8 s2 G5 f& e' p! E5 A
var heapMemParams = new HeapMem.Params();4 o1 v8 U- W! s; o" R* R" ]6 r. R9 F; x
heapMemParams.size = 0x4000;
$ x6 L4 ]8 I  ]6 Y3 ]2 v# x
7 r+ }8 q) g7 G& }3 Q. Rvar Memory = xdc.useModule('xdc.runtime.Memory');% F+ `/ p+ w1 a; J; F4 J4 d+ g& D
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);1 v4 R" \: {, g3 `8 W' e

, W8 @8 U$ B# y; I& a9 W9 B# k. _我大约calloc  每次共计大小为5K*16bits,6 b6 k) F" P+ n" s' ~4 `, z
而默认配置才0x4000、需要改大。
: w  s) F0 }0 ^5 ~9 X. F/ j* _; `+ I1 [. `
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
5#
 楼主| 发表于 2015-10-28 16:14:47 | 只看该作者
/* no rts heap */- ^# J& o1 y4 t5 S; M! N
Program.heap = 0;, U% y& a/ K  ~4 @
Program.argSize = 100;  /* minimum size */8 _; U1 ^3 G5 ?9 t3 |
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-29 00:28 , Processed in 0.041408 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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