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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2015-9-4 08:33:31 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
创龙工程师你好,我在OMAPL138单独调试DSP程序(使用SYSBIOS)时,在任务中使用calloc函数动态申请内存,用完后free,类似如下结构
6 `. a0 Q9 i" t+ b: i" a' T
) v1 x" a- J' \$ e( ]& D    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //256. U. W9 h7 z1 e4 t6 W- p

& X) \* `  B" M6 c5 B其他程序段。。。。。- u% y$ G  o1 R0 P; D$ P

$ ^. \+ a7 Y; ^: ~   free(x_d);
% t% ?  e# `7 ]4 f6 T3 v' A1 ]
& u& l4 X: F8 @3 B; W* n2 M使用DSP侧单独调试功能,验证动态申请没有问题,
8 f8 N9 a) s/ Y. J9 q* Y" ]  H& f" S: Z: m! H( T
但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。  `; [2 c$ P- w* ~; N) ]( |" ~

! _& t( r& f6 t# X3 w& |: N6 X) A: ]" i6 P/ A
9 i$ v8 V4 _0 g6 B$ ~1 N; n8 `

0 e  c# e% ~. k6 p' K: x; X  q
  U( K/ U% \  U2 f. z" d( {" @! R# v' v! D
5 M( H1 n3 ]* @4 y" d( _' m

  N! r/ _9 q: g9 V" T. ?! I
+ T" V! |6 t* X# N9 I8 F! t  v: x  J. K, c9 z; O% |5 l$ @& K
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2015-9-4 10:29:21 | 只看该作者
补充说明
1 J5 U# j6 s5 V7 b+ g8 C! T* n我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下/ e/ o; O  Y3 i9 r
(不过疑惑的是,为何单独DSP仿真就没有问题呢?)
6 A3 h6 ?: M4 e6 j. p  A

5 h) b( v; J8 Z. G. o是不是需要在DSP.CFG中进行配置$ Y9 i) ?5 Y4 r" Q" }
我现在的配置为5 R2 }% f& r/ g. ?
, C9 ^6 e: [* u6 U  W
/*
; h1 p* K/ X" R: ?3 q *  ======== Operating System Configuration ========
; j: u9 B% p# }0 a2 M */, B+ w1 u$ R# w+ l) s+ ^: G

% `+ E& D. X; F& J/* no rts heap */
3 W. r7 i7 M0 s1 z* t# p6 F8 xProgram.heap = 0;+ F7 t1 S& Z3 C: T, H7 Q. L
Program.argSize = 100;  /* minimum size */
6 r- M1 I6 o* W7 r1 ?& a; NProgram.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大2 |3 }% C) {, m! O
) P; G0 O; q& P. T) I$ Z8 {
/* create a default heap */
2 g, P8 \4 a6 q. L% {2 xvar HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
# W5 H9 [5 Q4 n+ L3 Pvar heapMemParams = new HeapMem.Params();
+ Q! u& M8 H2 i9 bheapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大5 W4 n8 x# c' W* m* h  _" n5 ~
3 ?: I. ?4 T! o) M, A
var Memory = xdc.useModule('xdc.runtime.Memory');$ o; I4 v# A( [# @9 |
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);
* _! N) \# e. c$ Z9 N. V5 x: D
8 w& O, K# }" \/* configure System module */
, I4 P! B/ F/ O3 W, svar SysMin = xdc.useModule('xdc.runtime.SysMin');; `+ \1 Z; }0 o( H0 C
SysMin.bufSize = 0x1000;
4 M; u' y9 M$ F# iSysMin.flushAtExit = false;
3 H( }* x! q# s4 L: I! S
4 ^0 i$ a3 ~; z3 a0 Xvar System = xdc.useModule('xdc.runtime.System');  s# z- h9 ~  ~2 O" z! Y- A" U; x
System.SupportProxy = SysMin;
& i0 \) c1 V' Y: @9 b, J, r4 J( Z+ i8 F1 n" T  |# B
/* configure SysBios to use the lower half of Timer 1 */' c/ |8 E) H% x; H1 K% B
var Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');
6 }, \" J/ M# J5 Ivar Clock = xdc.useModule('ti.sysbios.knl.Clock');
- J+ a, S2 |* R+ T! x' qTimer.timerSettings[1].master = true;
6 v" J! u& p4 CTimer.defaultHalf = Timer.Half_LOWER;
: ~  \  S' o% b  p- N& kClock.timerId = 1;9 r# d0 r6 a1 z4 h0 k* U) ~6 O

0 B% S/ s. P' Y; n  a; `% r9 z' }# @& Q) t; q( ]3 m
/*
5 e7 ^* s. z, j1 y$ } *  ======== Miscellaneous Configuration ========' d* J. f% a, L4 q
*/
2 D) H1 P  l0 ?$ O9 R' K: w" Y2 ~" j* ^5 E3 y$ `$ i7 J, J
/* set default diags mask *// e$ \& Y3 B/ G
var Diags = xdc.useModule('xdc.runtime.Diags');
4 |2 o# N+ }/ e3 Lvar Defaults = xdc.useModule('xdc.runtime.Defaults');
0 t+ ~) E: Y% q7 _9 Z* G4 h/ _
9 H7 z  k7 U# ~; ?4 wDefaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;
3 I1 f! \7 Q/ G* S( ADefaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;
2 ?: E% ~9 y5 c* f7 W! mDefaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;
  K4 j) S1 X- U5 S  z: @; CDefaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts *// p5 B  J# L) ?! u/ X
Defaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */" U0 ?5 z0 }. d/ L% g
Defaults.common$.diags_STATUS    = Diags.RUNTIME_ON;
- g, l, t, w" I4 r+ vDefaults.common$.diags_USER1     = Diags.ALWAYS_OFF;9 q1 \& L- W& x0 @- |1 X
Defaults.common$.diags_USER2     = Diags.ALWAYS_OFF;; W% F4 ]0 t9 a/ m. x  H
Defaults.common$.diags_USER3     = Diags.ALWAYS_OFF;
- R) v7 y- E9 B+ G$ QDefaults.common$.diags_USER4     = Diags.ALWAYS_OFF;
4 \; \( D6 D  [Defaults.common$.diags_USER5     = Diags.ALWAYS_OFF;( X' \& {/ P( T/ h9 P4 J2 ?& a3 G
Defaults.common$.diags_USER6     = Diags.ALWAYS_OFF;
/ S  R& I  S# c8 Z5 ^; P# jDefaults.common$.diags_INFO      = Diags.ALWAYS_OFF;9 m. M3 K7 V' T7 w2 s, c
Defaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;
/ f# }/ V5 i4 B( a
; D8 g3 _- q# M4 J/* override diags mask for selected modules */
; H7 j8 C: t0 Ixdc.useModule('xdc.runtime.Main');
; G$ F* z, F, U1 \- E  FDiags.setMaskMeta() e% Y0 ?" m6 _7 B+ r- e  d4 T
    "xdc.runtime.Main",
0 G: b7 g8 [$ c6 w  c+ t1 p    Diags.ENTRY | Diags.EXIT | Diags.INFO,
7 T/ E3 i, k" B1 z: ?# `6 Y' c# j    Diags.RUNTIME_ON
+ d- B* h! @4 I3 C5 H" i1 r4 U);
* L+ a( x" @- S/ @7 N! k
8 D- R1 M1 F8 t3 @" Evar Registry = xdc.useModule('xdc.runtime.Registry');
$ w2 v( t; c2 h* H9 W7 `Registry.common$.diags_ENTRY = Diags.RUNTIME_OFF;! k1 d% G) l# T" v" W
Registry.common$.diags_EXIT  = Diags.RUNTIME_OFF;
. ]: R1 O: k/ @- A1 QRegistry.common$.diags_INFO  = Diags.RUNTIME_OFF;* K5 p; t+ H4 D) `- f' H# L5 q+ C
Registry.common$.diags_USER1 = Diags.RUNTIME_OFF;9 o8 K) C5 r7 e, R/ p7 H) x

" ~) ?0 g( ~, J! Z- E0 {/* create a logger instance */# I$ o0 t4 C, [! x0 h
var LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');" t/ M- N$ i0 b8 T
var loggerBufP = new LoggerBuf.Params();8 n4 T, X) T! g' b
loggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */
9 B: J/ z* s# jloggerBufP.bufType = LoggerBuf.BufType_FIXED;7 B9 K- `% W  k% M( U- t; t  w& c

8 f. K; @% O  O% {$ n' ~var appLogger = LoggerBuf.create(loggerBufP);
) H, n4 @- Q. K3 m: O+ y: iappLogger.instance.name = "AppLog_Core1";8 x! D& K# s7 K* M
Defaults.common$.logger = appLogger;
0 [$ T- h; |  ?* j2 n5 D/ `. fMemory.defaultHeapSize = 0x8192;   
; C" l" r* x, H& w& b; \/ WIdle.idleFxns[0] = "&LEDStatus";
- Q: X7 E4 v. s2 m( LCache.initSize.l2Size = Cache.L2Size_32K;
) Z. l* Y4 x) V: v
4 ~) v0 V+ q( o# V/ ]8 f& Z
回复 支持 反对

使用道具 举报

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 */2 C+ M' \, N; _% E4 c
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');. ]0 |, \9 Z2 {
var heapMemParams = new HeapMem.Params();
( j; }& [! N1 P  u+ V) u" IheapMemParams.size = 0x4000;8 z% G' j  L+ s: U- r

7 |5 z0 d& x/ E/ Uvar Memory = xdc.useModule('xdc.runtime.Memory');
7 `4 J; Z4 x. e9 }* \Memory.defaultHeapInstance = HeapMem.create(heapMemParams);* L/ m2 k/ n" x, a5 Z0 |. o
* E$ W; S- r0 q$ V( @# h; H0 m
我大约calloc  每次共计大小为5K*16bits,- l+ q1 k$ x* O8 M; r! a$ O
而默认配置才0x4000、需要改大。3 c2 d/ Q1 r' U: \
2 b' U) x% M( n1 W& Z/ [, r( t7 ?
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
5#
 楼主| 发表于 2015-10-28 16:14:47 | 只看该作者
/* no rts heap */
( M  X' j. |' |+ t0 ZProgram.heap = 0;. a2 o; ]  d# p8 ]; }
Program.argSize = 100;  /* minimum size */; h$ k$ y; t' U% L0 y5 E
Program.stack = 0xF000;                   //我改到F000  也不行
回复 支持 反对

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-12-26 18:13 , Processed in 0.065128 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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