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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2015-9-4 08:33:31 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
创龙工程师你好,我在OMAPL138单独调试DSP程序(使用SYSBIOS)时,在任务中使用calloc函数动态申请内存,用完后free,类似如下结构
1 i7 S+ v1 h% a6 |" f( n1 n; M9 [6 `& X4 G. P& l
    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //256% m* z; t! _3 T3 n" \# Q

+ W/ j, F- v, q5 R  w8 D4 n: a! z其他程序段。。。。。
- c  l! L( a- [ ( _7 {% x; b: d; h
   free(x_d);) R" ^% y, p; f: a

' _- A. W" f/ i8 j" `3 F使用DSP侧单独调试功能,验证动态申请没有问题,+ b; y$ u) Y' D* B4 x8 M0 Y

$ E; F. Z0 x0 U5 n% a/ H但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。
; B  @7 H0 y+ j+ h6 o/ G$ s
- V" [9 P+ {$ P4 n

: X- @* K+ w  y7 S7 ~1 u' v, @% {  W

  S6 F3 N- _( x* p- ^
. \9 w3 E7 u, B* y5 f- P# h+ n# ~
5 n9 s/ E3 }( O7 U( f" ~4 O9 X! ]2 P0 L/ @9 t: G

/ f7 j: w+ I2 C) g1 {/ Y4 e% @1 `, d4 \, F* C6 `, j

9 ^0 Y2 m3 F1 E9 J0 g/ ?8 v* U3 Y& M8 w
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2015-9-4 10:29:21 | 只看该作者
补充说明
# K' `- @* V; c我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下
! z6 a) R' ]  K$ K" z(不过疑惑的是,为何单独DSP仿真就没有问题呢?)+ m. W* ]3 `+ M: k4 X

( @! b4 n% a# w  c9 c是不是需要在DSP.CFG中进行配置5 H. @+ B9 c- z' c" ^4 }! r2 Z
我现在的配置为
1 c7 Y) `7 z4 q, y) a) N9 W+ W  z. _' p. \. T# p; a
/*
: W. e8 j5 ~; @0 ^ *  ======== Operating System Configuration ========& a4 @- l" o: m' d
*/
2 B: ]2 Z3 S% H* C8 s! E) q" G- i, m& E. I
/* no rts heap */# d2 u& K9 Z( T& J  L% N8 Z
Program.heap = 0;8 @' Z3 ?* x( m: V$ V
Program.argSize = 100;  /* minimum size */
# C0 l- V2 t, d% x/ D" ZProgram.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大( [$ P8 C% Q* Y
/ h5 j+ O* g8 F' U. _4 c* V
/* create a default heap */
7 I! V8 H) I/ O9 _" G& S+ r2 Qvar HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
4 M' f( h0 a8 X' \var heapMemParams = new HeapMem.Params();4 l, F1 n4 {" ?* p; u
heapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大3 P) E9 m0 W' Z. ?& \

6 B6 k) }6 q& p# c2 U
var Memory = xdc.useModule('xdc.runtime.Memory');
% u/ v& B$ F, V0 mMemory.defaultHeapInstance = HeapMem.create(heapMemParams);
% X$ `, q( \' ^* E$ r
, A; W) k7 H4 o4 t/* configure System module */
% H% v$ L* C" X1 Bvar SysMin = xdc.useModule('xdc.runtime.SysMin');: L( F% j8 e( N* M
SysMin.bufSize = 0x1000;% p, y, o6 ^' b4 N  q
SysMin.flushAtExit = false;
1 A: M: ^9 @5 j
5 z. \5 t0 H( F4 i- ~7 ~3 Lvar System = xdc.useModule('xdc.runtime.System');
6 m# C" c6 U1 F) s% M- w# jSystem.SupportProxy = SysMin;
+ {& {. R0 X$ l( `$ Z6 v( b3 J# H# d: A; t2 h
/* configure SysBios to use the lower half of Timer 1 */
- U* R9 {2 q" i- Evar Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');+ S6 J8 a  o% u1 h- P
var Clock = xdc.useModule('ti.sysbios.knl.Clock');" B0 N+ C7 N- E; ?+ E5 P2 L8 R& A% V
Timer.timerSettings[1].master = true;
5 t7 q, I8 ?' D7 c' q+ c; f: hTimer.defaultHalf = Timer.Half_LOWER;
- T8 @9 j! ~2 T2 |' ]Clock.timerId = 1;
+ X! R) K9 \6 A( f2 E9 ^" D$ p5 {$ Q% T: o! I0 W3 s
/ V, A' z; I5 e& T
/*
" T$ R" N+ j- d0 h/ s0 E *  ======== Miscellaneous Configuration ========
/ B# v4 i1 k: I- O& Y% b/ Z7 n* r */
) f' E& c: {$ p) }# M$ J3 K% z( C3 @2 v8 C2 u
/* set default diags mask */
- Z9 L, a  ^2 m* u5 U9 H6 Fvar Diags = xdc.useModule('xdc.runtime.Diags');
- t& e$ l$ u7 d+ G' P. v: xvar Defaults = xdc.useModule('xdc.runtime.Defaults');
# ^2 g5 G$ k( G% d/ F9 ^- i: L, S( e+ ~3 \4 d9 ~) `1 y% a* G
Defaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;
0 S7 U: @9 A% }0 I7 kDefaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;2 e" h3 ^- m: j2 q: h7 z/ F2 F
Defaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;* Z7 B9 p1 D" D. F8 U7 W
Defaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */
/ S/ u& f* U. n' J0 PDefaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */
  F1 ^5 X  Y, z- g+ \Defaults.common$.diags_STATUS    = Diags.RUNTIME_ON;& f8 i3 T1 n: N1 x2 i' e# ^
Defaults.common$.diags_USER1     = Diags.ALWAYS_OFF;
( q/ H3 I- b+ GDefaults.common$.diags_USER2     = Diags.ALWAYS_OFF;6 f; n+ L( y- a: x/ z
Defaults.common$.diags_USER3     = Diags.ALWAYS_OFF;
0 G) e1 T4 N! j, sDefaults.common$.diags_USER4     = Diags.ALWAYS_OFF;
2 S0 Y! ~: P7 \! MDefaults.common$.diags_USER5     = Diags.ALWAYS_OFF;
: U" i1 y9 m' P1 x- _+ n# gDefaults.common$.diags_USER6     = Diags.ALWAYS_OFF;" ]# ?$ {# p& G
Defaults.common$.diags_INFO      = Diags.ALWAYS_OFF;0 L4 o: D* ~3 I0 u- Q1 B3 T  m7 R
Defaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;
, T7 i2 ?1 T3 t  b) o8 D0 S: Q: [8 r3 ~2 V4 k7 i3 d5 |# V7 w
/* override diags mask for selected modules */
9 j% F( d0 R" M8 `  }/ O! ?xdc.useModule('xdc.runtime.Main');
' y! t9 @7 b) ~) @4 C; R: Z2 NDiags.setMaskMeta(
" [1 v" I1 n; e8 N    "xdc.runtime.Main",
8 z+ a  s  h6 r2 B" j7 H    Diags.ENTRY | Diags.EXIT | Diags.INFO,3 R4 P0 h" C0 D5 W: w
    Diags.RUNTIME_ON
. R% y3 O& b! l; y2 ^);# g0 B8 K# D& f* T  c

+ G) L6 h2 }$ i6 w0 hvar Registry = xdc.useModule('xdc.runtime.Registry');  z  i/ Y; l9 W4 d* t1 d
Registry.common$.diags_ENTRY = Diags.RUNTIME_OFF;& B! \& m7 s0 R# @( n
Registry.common$.diags_EXIT  = Diags.RUNTIME_OFF;
# l+ @0 O- s; z9 D7 URegistry.common$.diags_INFO  = Diags.RUNTIME_OFF;
# T7 z9 H3 s/ x6 i: Z5 x9 |. HRegistry.common$.diags_USER1 = Diags.RUNTIME_OFF;0 k* v9 P* Q. l9 V2 T. E

; k6 u' \- k4 ]$ D& `% _/ ~/* create a logger instance */; ?" U: `1 V+ H9 B$ E! U
var LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');
8 s" q/ ^1 u+ F* V: ?& [var loggerBufP = new LoggerBuf.Params();
/ [, x4 C" N! B5 K- }loggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */
  [7 W# }! n" b2 q) AloggerBufP.bufType = LoggerBuf.BufType_FIXED;
* G( ?8 P) V& q. j
7 v* w9 |5 \$ }9 b7 m- zvar appLogger = LoggerBuf.create(loggerBufP);
0 n$ u" ~7 b! ?- @! g% i- }6 eappLogger.instance.name = "AppLog_Core1";
1 l+ e& x' v  p1 l; K- l$ U- FDefaults.common$.logger = appLogger;
/ W6 v0 C, l- }Memory.defaultHeapSize = 0x8192;    1 l. h; }- g9 {  Q6 t" M$ b3 O( G
Idle.idleFxns[0] = "&LEDStatus";/ a+ B! y3 i0 T: S) ^" {
Cache.initSize.l2Size = Cache.L2Size_32K;' l* q, r* X$ p6 d
" u% y% |* N) H9 d2 V
回复 支持 反对

使用道具 举报

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 *// M% A% `' C' Y! V/ a0 {9 l
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
' x! Y# e5 W$ E3 L  Svar heapMemParams = new HeapMem.Params();' M! {. ^% s, m0 K6 G
heapMemParams.size = 0x4000;
/ ]2 z- H$ r# Z: M& q4 }
; L) T, V+ w. c! |0 K; |0 W- svar Memory = xdc.useModule('xdc.runtime.Memory');1 r/ V1 a$ J# B2 H$ r1 n! j6 A
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);
4 R* R1 ~0 ~* M: P' ^$ C; x' L5 e0 X" g9 N
我大约calloc  每次共计大小为5K*16bits,6 S. i. d* L" z  c: K; r& n! p, ?
而默认配置才0x4000、需要改大。
" I2 r* k) R' D+ Z- H* `
% s# K6 e7 a+ Q7 g' Z" k& a
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
5#
 楼主| 发表于 2015-10-28 16:14:47 | 只看该作者
/* no rts heap */
8 p: _' g( v" sProgram.heap = 0;
( R+ v0 k  ~% \/ T# p) {7 X3 [Program.argSize = 100;  /* minimum size */
( U9 i& @2 {! e" G. ]1 b4 pProgram.stack = 0xF000;                   //我改到F000  也不行
回复 支持 反对

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-12-3 05:35 , Processed in 0.041772 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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