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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2015-9-4 08:33:31 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
创龙工程师你好,我在OMAPL138单独调试DSP程序(使用SYSBIOS)时,在任务中使用calloc函数动态申请内存,用完后free,类似如下结构
9 {& r* u! F  f
  z* z6 [3 K# v* r& U  Y8 C, G    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //256* o) V; w8 h+ q+ @& c) h! M! p) _

6 {9 I2 k7 w1 w* p: Y) M* M+ ?, Q其他程序段。。。。。
0 q' C+ g% ]' U
3 m6 Q+ N) s' M   free(x_d);' `: H3 k( E, A0 \: O
% B# G5 d  T; b& S' M' [! v
使用DSP侧单独调试功能,验证动态申请没有问题,7 l! F) U5 p% `  N

  S- I1 i! U1 X" ^但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。2 R1 d: u3 G4 v4 Y. _

5 s8 [  t8 |; }8 D
" c* j+ X) m; }7 ^
. Q+ E" Q9 _) ?4 z6 g
+ o$ N6 }: Z* `; _; }& c
6 p0 M8 f. i4 Y& [7 m/ g0 n
, \' N7 ?' K. K7 r; }
% a: P  s$ O& k* {+ @6 Z; |  U2 T5 F6 ]) t0 H
/ ~- O8 X: |3 e4 j8 Q# q

! D( z0 I- l! W9 i4 t
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2015-9-4 10:29:21 | 只看该作者
补充说明" z- \$ z: h# F3 W& K
我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下) V3 H7 S6 t* b
(不过疑惑的是,为何单独DSP仿真就没有问题呢?)+ l) h4 K" L5 [9 R  u

- H4 L" h4 m* t6 i$ \是不是需要在DSP.CFG中进行配置
" o, }7 ]& a, E我现在的配置为
3 N- q6 d8 q6 z9 Z6 j# P, \$ T. Z  }8 v0 n
/*: G0 K4 Q$ H- V2 Q5 c1 n6 l
*  ======== Operating System Configuration ========
! k$ Y) c" J& A# d- @! @ */8 x. {% O/ B; _7 W2 [4 d; }

5 S) H" ^# ]: F5 w' n" J/* no rts heap */
" {: _( S0 V# X8 x  F" rProgram.heap = 0;
3 V$ H& b/ k6 M- H+ C" y6 }Program.argSize = 100;  /* minimum size */# n! r2 {% `, `- z9 U3 V9 W
Program.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大
  }7 ~! d7 q, b& G8 |# t& R+ K' J
- Q0 q2 y. I; c8 o6 S/ m/* create a default heap */
0 Y. T+ s5 S5 w; w' p6 X; \var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');/ C2 A8 s7 N( X% n! e9 c
var heapMemParams = new HeapMem.Params();/ U7 h& Z, J' Y& E
heapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大
( }8 N/ U  d8 g# z$ q0 S5 e% ]8 V% |" }  p8 H0 p8 K  W2 I  m" S: c
var Memory = xdc.useModule('xdc.runtime.Memory');
. z7 Q! i$ ]' R! o" o1 N) `, CMemory.defaultHeapInstance = HeapMem.create(heapMemParams);
- ]) h% y  }* {% L6 f  o# O* S! l  y" R0 P2 Q* T
/* configure System module */
7 H4 K5 y3 s5 }: tvar SysMin = xdc.useModule('xdc.runtime.SysMin');
& g$ j) w7 {' R' R/ J# H' T* CSysMin.bufSize = 0x1000;
* d/ A0 B. l! S: S! z/ bSysMin.flushAtExit = false;
: V7 N% v4 i+ C0 D! i- k& y
% }/ |0 P" _' b. xvar System = xdc.useModule('xdc.runtime.System');! M  n' a: ^) y/ z7 O7 `
System.SupportProxy = SysMin;
- @2 Y/ N' ?3 ?, o. {# i+ S6 M5 j
7 Y/ _0 i3 X, E2 ^2 V" O/* configure SysBios to use the lower half of Timer 1 */
& W7 J; Q  {& s( ~1 f* kvar Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');
$ H  \* a& L- X! K# Rvar Clock = xdc.useModule('ti.sysbios.knl.Clock');1 M: q9 _5 m) p0 C: A: T1 D( Y- G( Q
Timer.timerSettings[1].master = true;
2 O6 |7 i% v6 n. u: b4 NTimer.defaultHalf = Timer.Half_LOWER;
5 ]* Y* A( [$ u# @4 r( |Clock.timerId = 1;
$ V$ H+ i* X* X
! R/ M. A+ o6 G' T. b
0 J% _1 J* e+ Q- P/*% m+ u& x* h$ T3 y
*  ======== Miscellaneous Configuration ========; ]2 O3 q! W5 U+ D- Y9 a" _& \# k
*/
* M! q1 o, ^1 l# S" M: a8 Q3 M) ]- [% A
/* set default diags mask */
7 _( t% D% _: ~" H! ~6 Uvar Diags = xdc.useModule('xdc.runtime.Diags');
. P2 l2 Y0 R5 f2 L; W* Qvar Defaults = xdc.useModule('xdc.runtime.Defaults');' L, y1 J- X" ]- L( W
1 s% Q" n; F, P2 A. J2 l
Defaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;/ q6 N5 l6 Y* j& w
Defaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;" w* p! k4 ]7 l# N( B# T
Defaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;6 b9 A" |9 t4 @9 i' T5 V9 [! ~
Defaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */
; L6 M  `! |7 A' \5 x2 KDefaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */4 A  f9 B. Z/ w. i2 P$ q
Defaults.common$.diags_STATUS    = Diags.RUNTIME_ON;  b( R8 Z! ?2 o) k! D1 l+ `
Defaults.common$.diags_USER1     = Diags.ALWAYS_OFF;3 I5 t! g  f9 e. R! W- v" L
Defaults.common$.diags_USER2     = Diags.ALWAYS_OFF;) ]1 r0 O. n- G
Defaults.common$.diags_USER3     = Diags.ALWAYS_OFF;8 ?$ W% L. W6 t4 E5 k3 a5 z
Defaults.common$.diags_USER4     = Diags.ALWAYS_OFF;
8 b: \8 g8 _, C) eDefaults.common$.diags_USER5     = Diags.ALWAYS_OFF;, {: a; X6 w6 r1 y* C+ h; [
Defaults.common$.diags_USER6     = Diags.ALWAYS_OFF;
5 n3 w5 ~6 G$ _Defaults.common$.diags_INFO      = Diags.ALWAYS_OFF;
) P2 }) I* b0 O4 H3 f0 O* nDefaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;
5 r/ J2 P, a+ q, r; X1 i! k& \+ N5 @( G/ \) J, }4 |, _* G$ n
/* override diags mask for selected modules */) B' A* Z1 k+ ?
xdc.useModule('xdc.runtime.Main');$ c2 g2 M! t3 T7 d4 P9 _/ r' B
Diags.setMaskMeta(
8 u7 r! H; U& y4 X% I9 t5 B# X    "xdc.runtime.Main",
7 Y/ q. h; `6 z/ h' T4 i' S    Diags.ENTRY | Diags.EXIT | Diags.INFO,
6 B, A* p9 M; f9 q% k    Diags.RUNTIME_ON4 h( @) w" x7 H; t# B
);2 B  ?7 z5 b6 k$ W- X' s4 L
; U) u, d5 |4 _$ A, o
var Registry = xdc.useModule('xdc.runtime.Registry');
% x! x/ l6 k6 FRegistry.common$.diags_ENTRY = Diags.RUNTIME_OFF;' ~: R# d: a5 L; k, m3 w5 W' `
Registry.common$.diags_EXIT  = Diags.RUNTIME_OFF;$ E$ E# l7 p) y; r
Registry.common$.diags_INFO  = Diags.RUNTIME_OFF;
) A3 X* n% W( Z4 c* }9 C3 IRegistry.common$.diags_USER1 = Diags.RUNTIME_OFF;' {/ Z' a2 q4 o) c3 I

$ y3 `4 M2 c5 B- N$ p, Z) b1 Z/* create a logger instance */
+ J% X# x. B  p9 `6 r+ [! f$ rvar LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');( s" y+ O: v' N+ m7 E4 v# P
var loggerBufP = new LoggerBuf.Params();
( e7 d3 f) ?6 tloggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */2 O' |) s/ o6 O( i! f, \) B4 H4 n
loggerBufP.bufType = LoggerBuf.BufType_FIXED;6 H: f0 p' v2 M) k2 Y# P2 A( P

$ i  x/ b; I* H7 F4 j% s# ?' Bvar appLogger = LoggerBuf.create(loggerBufP);- P/ s6 H* \2 G: F$ D/ n
appLogger.instance.name = "AppLog_Core1";
( Q: Y' M% G- m! x# NDefaults.common$.logger = appLogger;
" @8 Y3 u% B0 @Memory.defaultHeapSize = 0x8192;   
( n. Y1 z( K( [1 {; ZIdle.idleFxns[0] = "&LEDStatus";8 ]' B8 P$ v% A5 {) C; v4 r" _, S7 q
Cache.initSize.l2Size = Cache.L2Size_32K;
, s9 |6 \9 \  X
# J5 `7 \( `, Z) q- @1 z& k
回复 支持 反对

使用道具 举报

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 */
) j, ^, a8 Y( H. evar HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');" H. D( i7 W' P+ V8 c  ^7 A7 x
var heapMemParams = new HeapMem.Params();5 U8 ^) o/ r; z2 {8 L  Q5 b
heapMemParams.size = 0x4000;
9 E! t. A, U6 ~1 T% |' ?. v: V+ T' x- W! |0 y4 I! q
var Memory = xdc.useModule('xdc.runtime.Memory');
; m' S3 @" a' |7 [Memory.defaultHeapInstance = HeapMem.create(heapMemParams);+ u. n$ F  [# M! u5 V! R
9 e. H, j1 k+ z* T4 i
我大约calloc  每次共计大小为5K*16bits,! n9 G$ j: ^3 F/ ?- B% K
而默认配置才0x4000、需要改大。! F: _  k  Y% @. \& y4 H

& p6 _1 L8 a) M: ~; l$ U
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
5#
 楼主| 发表于 2015-10-28 16:14:47 | 只看该作者
/* no rts heap */+ F% f$ n1 s+ b6 q
Program.heap = 0;
" f( Y" r; c/ N9 M5 P2 [Program.argSize = 100;  /* minimum size */
! [) x- W2 \  \- ^, a2 SProgram.stack = 0xF000;                   //我改到F000  也不行
回复 支持 反对

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-11-26 03:29 , Processed in 0.044158 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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