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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2015-9-4 08:33:31 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
创龙工程师你好,我在OMAPL138单独调试DSP程序(使用SYSBIOS)时,在任务中使用calloc函数动态申请内存,用完后free,类似如下结构4 F. [2 i7 l5 N3 l5 j9 z# _

1 C/ F, j2 _* }; ]% l2 S" W    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //256
1 P" M- b# F9 ]* K1 X- O
, ~3 F. N$ }7 X: u/ u. M( C- ]& k其他程序段。。。。。- p8 k4 n' {) q( v( s# a6 M
  V* \0 p* B6 i' {5 [5 s
   free(x_d);$ w" v: b- U5 A

1 x4 I( |8 R- M6 l+ v; l使用DSP侧单独调试功能,验证动态申请没有问题,  {3 X. R) e" J: t& j

) |8 ^( @2 K6 S$ g& q  s) P& o! s但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。. X6 d& V4 j* \. ^9 L

. Z  Q. w" |: w6 a* e; H) l
# a: s" w1 D& N; S9 z: o; x6 G( C" D# H  B
+ @; T' T, g' n2 N3 C" L' N4 X# O

6 D% M: M/ h. s7 k" k' B/ T
& Y) x/ W) r9 g
: u# P7 \; M( ?: A' @. t$ l" C1 m* ?* H( ~8 H5 O
. {4 V- Y4 g' z9 ?% _

0 r2 H* Q+ R. a# Z  y# s
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2015-9-4 10:29:21 | 只看该作者
补充说明( Z, m6 q$ N- y2 v6 K
我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下3 V6 B9 M7 D2 f
(不过疑惑的是,为何单独DSP仿真就没有问题呢?)8 z3 ^3 N; w1 q: N  h0 I+ ^/ f
# f" M/ }5 V4 }" b  G  k% h/ Q
是不是需要在DSP.CFG中进行配置+ {4 t" a0 U  [  R% y1 @
我现在的配置为
' \+ {/ `5 i$ t8 o
3 F  t9 w3 H+ ^# R- S" A/*
4 i) I- b6 H4 p! F- Z3 R) b3 V! N' o *  ======== Operating System Configuration ========
+ y) Z% Q5 c4 G, u% A/ b" {$ B) W */) f; W4 N* \7 q; b% E8 ?

7 V; Z: C' p1 `9 M; O1 d" u, k- ~/* no rts heap */
7 u4 M) }8 j" a5 x* MProgram.heap = 0;; S6 _# x( U( |3 R
Program.argSize = 100;  /* minimum size */. ~. I* C& s) Q
Program.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大
! K8 s: L5 ?& d  p2 r% X8 C9 N
, b5 I+ o" F2 }% @! `$ C1 p/* create a default heap */& d% }/ F8 k, ?
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
5 ]- Y- X% V$ S- Q& e( g5 Zvar heapMemParams = new HeapMem.Params();  j8 T7 ^0 g% T$ I" S) l
heapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大
  G0 k2 R! r. m) \( n/ D" C/ W( z- R- ~, E
var Memory = xdc.useModule('xdc.runtime.Memory');" Z! o( A3 ?$ q0 N# h
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);
4 g* ?1 Y5 P$ _2 {# e: p5 {
. L- N+ h5 B# O8 o3 z5 Q8 n/* configure System module */
( Q. x0 h! u7 T! Ivar SysMin = xdc.useModule('xdc.runtime.SysMin');# K( q: p' j) i3 j5 q) m
SysMin.bufSize = 0x1000;- X8 i, M- j0 K! p
SysMin.flushAtExit = false;3 @7 M/ r( A* R  J" e

! z7 z  @% ~+ \2 V- d, O. v+ u5 Ovar System = xdc.useModule('xdc.runtime.System');/ j" P/ J5 z' w5 X. d* l
System.SupportProxy = SysMin;
9 X6 o, c/ H! h1 z8 X! H* O$ ?" k/ I4 u+ s. s4 P  z0 P0 U
/* configure SysBios to use the lower half of Timer 1 */" n( _3 F1 P, W1 a1 |8 n  ~
var Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');
8 y0 Z+ z8 J. K! Vvar Clock = xdc.useModule('ti.sysbios.knl.Clock');
6 `/ O+ y: B0 N  h' KTimer.timerSettings[1].master = true;
* B+ y' X9 f0 GTimer.defaultHalf = Timer.Half_LOWER;$ s6 n  @% S* A& k( B( ?
Clock.timerId = 1;+ H! F8 k9 y+ [3 @4 t9 |

* r0 V7 s' E6 ~' @8 M; ]* F
2 N' c) m# b/ T+ b/*$ d# ^4 {2 g2 r
*  ======== Miscellaneous Configuration ========
* U) _( @* a1 E4 D# X */
& Y  j& q! D( {% K
4 c) P3 r* R' S3 ^$ x$ k/* set default diags mask */: y4 z4 x- e* Z' o0 _
var Diags = xdc.useModule('xdc.runtime.Diags');
7 c( j/ R! k& @& Uvar Defaults = xdc.useModule('xdc.runtime.Defaults');; h8 Y0 m( z1 s" C; n

- c- l6 v$ G$ m3 vDefaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;
, N2 j# L8 A" N. e& p- |Defaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;
$ I6 h) r& ]! F  G' \0 rDefaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;
0 {; t4 A  \% F* @% S+ ~4 E5 b8 s! x9 XDefaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */4 W# P; k8 O8 G4 A, o* E" y1 N
Defaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */
/ L2 }6 ]9 v4 x' _; j: jDefaults.common$.diags_STATUS    = Diags.RUNTIME_ON;* r6 W. J6 w- }5 c
Defaults.common$.diags_USER1     = Diags.ALWAYS_OFF;
7 X; `# Y$ t; [% N: ZDefaults.common$.diags_USER2     = Diags.ALWAYS_OFF;* l; p3 C# I$ m9 h! @. t
Defaults.common$.diags_USER3     = Diags.ALWAYS_OFF;
. @. n( Z* w9 L5 U8 `# N; F! PDefaults.common$.diags_USER4     = Diags.ALWAYS_OFF;
2 f. B( s# D- u2 MDefaults.common$.diags_USER5     = Diags.ALWAYS_OFF;
. X7 H! o3 {* W; o2 T5 O$ O$ |Defaults.common$.diags_USER6     = Diags.ALWAYS_OFF;  D- x5 \  m! w2 O3 ^, y
Defaults.common$.diags_INFO      = Diags.ALWAYS_OFF;4 C* y0 N0 D( m$ H% ]3 c
Defaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;
8 o5 A. ~2 g( j; t: ~6 n" T' {/ T3 O
/* override diags mask for selected modules */
7 Z1 p# q9 F# Q# dxdc.useModule('xdc.runtime.Main');
/ Y5 {, L' I+ U0 gDiags.setMaskMeta(* F* @9 h, a8 @" E
    "xdc.runtime.Main",
2 Q  j/ i) B! O8 K+ h4 Q6 |. s    Diags.ENTRY | Diags.EXIT | Diags.INFO,; G" V( j+ W! n. |' _$ w6 ~# f
    Diags.RUNTIME_ON. D4 I5 j: @7 i( [) N4 q4 G
);8 Q1 ?( E9 y2 u2 _* X9 P) d
5 W" M" M) L3 H  U- T% U# d
var Registry = xdc.useModule('xdc.runtime.Registry');6 n# u. h# h( H, ~0 n% b1 M
Registry.common$.diags_ENTRY = Diags.RUNTIME_OFF;
% D) U: [! x5 O( |Registry.common$.diags_EXIT  = Diags.RUNTIME_OFF;) D# b: H7 Q. s; p5 L9 q
Registry.common$.diags_INFO  = Diags.RUNTIME_OFF;8 N- A# e# K& K' |. A
Registry.common$.diags_USER1 = Diags.RUNTIME_OFF;, |0 b2 _: s0 H3 x
/ X: a) A( l9 W$ ]; c
/* create a logger instance */
* J4 _+ `. j0 p0 H: J/ a, H2 _var LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');
1 e: w; F3 s3 X( L$ Mvar loggerBufP = new LoggerBuf.Params();8 W7 @5 Q2 X5 m2 ~6 q
loggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */, [6 Q! x  s4 W5 v
loggerBufP.bufType = LoggerBuf.BufType_FIXED;% u- b! O3 ]9 i9 g2 y% ^: N

, l- X( X1 e, y8 wvar appLogger = LoggerBuf.create(loggerBufP);
3 n% ^- X6 J5 b" v, YappLogger.instance.name = "AppLog_Core1";1 {- p: J+ k' r; f
Defaults.common$.logger = appLogger;
& {# ]* Y/ }' E" ^: t( DMemory.defaultHeapSize = 0x8192;    3 U. h  l0 l/ D- ^
Idle.idleFxns[0] = "&LEDStatus";- T$ _( F6 N! N% B: K
Cache.initSize.l2Size = Cache.L2Size_32K;
5 V/ @' q, j+ n# Q. {, V9 p/ l. }8 O7 p4 Q) \* P* b
回复 支持 反对

使用道具 举报

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 */
& b* M, Z/ ~8 cvar HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
" @+ B8 c+ L. Q; F* e% y! D! Cvar heapMemParams = new HeapMem.Params();
3 W8 ?6 S/ ?2 ]- yheapMemParams.size = 0x4000;! K0 T/ U. y1 D- K+ A# R& M

1 F9 Q" ?1 g5 a+ ^2 A2 a% n# fvar Memory = xdc.useModule('xdc.runtime.Memory');
, u( x4 K( y/ d& eMemory.defaultHeapInstance = HeapMem.create(heapMemParams);3 s1 o: ^0 y+ ~2 `( y

6 o9 [7 S! t6 t% \6 \我大约calloc  每次共计大小为5K*16bits,3 E  q1 l' Z6 G$ @
而默认配置才0x4000、需要改大。5 ?4 T4 t$ t3 o( D1 q
+ L$ A) L* K! L6 A5 y( [
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
5#
 楼主| 发表于 2015-10-28 16:14:47 | 只看该作者
/* no rts heap */
) _. Y8 [# e5 X7 \; zProgram.heap = 0;
6 r4 O* _3 f5 M- zProgram.argSize = 100;  /* minimum size */& Q* Z; \- A9 k9 g+ }
Program.stack = 0xF000;                   //我改到F000  也不行
回复 支持 反对

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

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

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2026-3-2 15:15 , Processed in 0.041962 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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