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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

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

8 n/ s' r7 d" C# T: z8 L& k    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //256
0 Z/ j$ P( r. {8 s: T% q! [' E4 a) b# W; X  P5 Y+ V
其他程序段。。。。。% r+ v5 N% t/ X$ `

) S+ ^/ ?! H) ]   free(x_d);
+ l3 N4 a0 s7 w" u- t1 o' w% x6 A
使用DSP侧单独调试功能,验证动态申请没有问题,8 V' G/ g+ X& ?: ^- V) R
1 Z5 q; P, w. N5 b/ K
但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。
. \  O. N! W  j4 R9 d/ E5 B- f# S
0 D/ }+ C8 U6 O) S
) I3 y. b8 u2 M; p: g, w, _2 J

4 D1 f. d/ N0 K( p( y* R
& r% A: F/ Q0 X* g6 @
8 `, N, D% A' Y1 M7 ^2 R2 M2 A6 ^% I
& q9 O% |# u, j9 O; m

$ x% S( H$ \, n0 y  M, O
0 T. K" V0 z0 \& G1 W7 ^- T6 J
9 s0 ]5 Q1 \6 r  H
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2015-9-4 10:29:21 | 只看该作者
补充说明$ B# W/ y* Z: H) j; Z! G
我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下8 e: b" _% g( ]
(不过疑惑的是,为何单独DSP仿真就没有问题呢?)
1 k& U4 _4 q& |3 ~$ }7 Z7 L

$ F) I3 p3 M( N; E7 \# `6 @是不是需要在DSP.CFG中进行配置" O7 `- V* O  W: ]7 k; t
我现在的配置为
" f/ ]' h& y$ U
0 K4 L5 u7 f, P% H& k/*, @( L+ D( G7 q  E4 a2 y6 Q9 c& b
*  ======== Operating System Configuration ========
7 k/ r. a! o8 x4 t1 \ */6 p: h' Z2 f7 i, }

0 `2 |' [+ Y( I2 y& O/* no rts heap */
; `! W! i5 h/ z, ?( D9 ZProgram.heap = 0;, c1 C% S! {- `3 @
Program.argSize = 100;  /* minimum size */: X" S# P) b  S5 @& W
Program.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大
, P  I6 q: ?- u, U; c2 p7 e& E$ c$ D/ x! L2 V; g
/* create a default heap */
7 T' X+ [3 O" I* @2 M! gvar HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
, B/ p1 Q0 |6 U4 v" `6 gvar heapMemParams = new HeapMem.Params();
) Z+ b( h  `$ A+ AheapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大; V" f5 {6 q  q; `6 F+ ^2 c4 |

  J+ J9 e4 ], {5 w" x7 s; r
var Memory = xdc.useModule('xdc.runtime.Memory');  K; \9 s3 c; n; A& v  ^: r) n
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);: ^; g4 ]+ \1 d: U9 @
4 |8 G- O0 o# z2 V; [/ e: G9 {8 B
/* configure System module */
+ U8 z5 @' e0 X1 b5 S8 J5 {: uvar SysMin = xdc.useModule('xdc.runtime.SysMin');
0 a% R/ V: O$ w& [5 s6 ~* j. BSysMin.bufSize = 0x1000;
! W+ Z' H# P4 D/ d3 F1 kSysMin.flushAtExit = false;! B) g% C* e3 j: d+ L6 ~6 O
0 J  ?! U6 B8 q. y* }" J
var System = xdc.useModule('xdc.runtime.System');# T/ h( _; {, |& m0 \
System.SupportProxy = SysMin;
! m  x% R+ D2 e" o  s* ]1 d% c6 q/ V7 I- h
/* configure SysBios to use the lower half of Timer 1 */6 }0 p: T' R  r# a5 p# a4 a
var Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');
; U% _9 W3 s# Q. V+ Bvar Clock = xdc.useModule('ti.sysbios.knl.Clock');
$ O9 }& N% Y5 o9 E- C9 NTimer.timerSettings[1].master = true;( i1 Q. ^' [9 G/ E$ q3 T! N
Timer.defaultHalf = Timer.Half_LOWER;  F2 n5 Z7 J  _3 o3 S; H0 ^- d% q; E
Clock.timerId = 1;
% \* t. M  \$ m6 J# `/ Q5 i1 @0 {( W! x% j/ p0 J
  I% I. r0 m4 ^' N" [1 E. [
/*  K6 t" w* \" Q/ f" T& P3 g
*  ======== Miscellaneous Configuration ========& \. C7 ?- {7 U/ j% J" b) g2 s
*/
; z+ r7 S! j4 b( Z3 w1 A: ]/ H: S* K
/* set default diags mask */
) L6 j" b: e3 r5 A" l' [8 y/ rvar Diags = xdc.useModule('xdc.runtime.Diags');: l" s  y5 n8 Z
var Defaults = xdc.useModule('xdc.runtime.Defaults');
/ `; q: A4 A, H. r: I$ s
- H$ Y3 J! [- _5 a4 Q3 y2 L- pDefaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;9 k5 R6 f* d4 ^: u0 S" B
Defaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;, ?- B/ E8 j# F6 @7 s& @8 F
Defaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;. J6 J2 p& h! T* [" V
Defaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */0 z3 u2 R) d; s
Defaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */
8 z# |( T5 I- WDefaults.common$.diags_STATUS    = Diags.RUNTIME_ON;4 t) j: t2 T4 E" z
Defaults.common$.diags_USER1     = Diags.ALWAYS_OFF;5 `' k1 H6 m' J8 s, I1 H
Defaults.common$.diags_USER2     = Diags.ALWAYS_OFF;1 }8 H* d( H# b9 F: y' h" y
Defaults.common$.diags_USER3     = Diags.ALWAYS_OFF;
( g0 _! O% x4 |3 f0 C" }0 uDefaults.common$.diags_USER4     = Diags.ALWAYS_OFF;. s9 A0 {; B8 N  W# c' s
Defaults.common$.diags_USER5     = Diags.ALWAYS_OFF;5 @/ J, u1 L1 V; q# Z2 P4 L
Defaults.common$.diags_USER6     = Diags.ALWAYS_OFF;8 m1 _6 u. f% }& u& q3 R, R
Defaults.common$.diags_INFO      = Diags.ALWAYS_OFF;
$ n" O/ U! c. B' u7 jDefaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;
5 M& a: J6 G  m, l! R& S+ K" ?
/ _. X& Z7 K3 N$ e/* override diags mask for selected modules */
6 J9 H/ I! {6 c% f4 sxdc.useModule('xdc.runtime.Main');5 b9 o& n! `' A0 }5 d2 N* S0 K
Diags.setMaskMeta(
2 `$ [& N- A' M+ H. r    "xdc.runtime.Main",. b% V8 I, G2 i: d! _2 W% x; A
    Diags.ENTRY | Diags.EXIT | Diags.INFO,
' {1 @4 K- v8 b. o    Diags.RUNTIME_ON
6 k& K" I5 D2 p: J( E);5 M/ f4 M5 }+ e; h8 ^

6 }3 p7 |1 x$ \* H! xvar Registry = xdc.useModule('xdc.runtime.Registry');. z8 q% B( N6 n, Y
Registry.common$.diags_ENTRY = Diags.RUNTIME_OFF;
9 }/ u8 x8 A" k8 SRegistry.common$.diags_EXIT  = Diags.RUNTIME_OFF;/ F0 k  \  K" h! [. i
Registry.common$.diags_INFO  = Diags.RUNTIME_OFF;+ Z1 Y" n/ v2 h, l- x& P- N
Registry.common$.diags_USER1 = Diags.RUNTIME_OFF;2 b9 D* |. |9 C1 T- m1 t3 q

, J) ?  g$ Z# ~/* create a logger instance */
$ `' R3 Q: y) R! F& Gvar LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');
/ o! r: }  S9 W: z4 ^var loggerBufP = new LoggerBuf.Params();% X8 @. L# u  S# o) b+ z* D6 D% z) s
loggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */! I6 N& q6 n2 m; Y# L9 d/ C
loggerBufP.bufType = LoggerBuf.BufType_FIXED;: b; C3 J. k# l5 y- X/ e1 ~/ D

- E9 G  C  c& N4 m% }var appLogger = LoggerBuf.create(loggerBufP);
  M  l0 v3 ^' l4 |! fappLogger.instance.name = "AppLog_Core1";  b, P. k# p/ F' |" O  R' R; @
Defaults.common$.logger = appLogger;
6 l# i5 R- ~" p3 _Memory.defaultHeapSize = 0x8192;    8 y0 N* Q% R9 b  G2 u
Idle.idleFxns[0] = "&LEDStatus";6 z7 k4 J* @# A4 l8 W* f: u0 H
Cache.initSize.l2Size = Cache.L2Size_32K;
" x- r- y  o6 J
, c& z5 O' X5 |1 R, A( N3 m
回复 支持 反对

使用道具 举报

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 v6 ^; n- p" O
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
# C0 i6 v. o8 @) L+ d( S/ Nvar heapMemParams = new HeapMem.Params();! J( X! f* k6 t- d2 j4 U. F
heapMemParams.size = 0x4000;
1 Q3 ?/ \* p, c
$ Y8 i9 C; F) S6 qvar Memory = xdc.useModule('xdc.runtime.Memory');0 r: r. a+ }( }7 N# `7 `
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);
0 t/ o! B0 i/ P$ U( F
- P1 J' `: F- s, f$ `我大约calloc  每次共计大小为5K*16bits,
1 I, `( [/ N$ z. e9 B: U) m而默认配置才0x4000、需要改大。7 M3 J1 a5 {9 p) a0 b) a

9 I2 D- i1 B* z$ K# O3 P; J* A
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
5#
 楼主| 发表于 2015-10-28 16:14:47 | 只看该作者
/* no rts heap */0 r- q7 i5 C' l+ ^  e! p
Program.heap = 0;& h4 F! }- X; g. I$ N1 g
Program.argSize = 100;  /* minimum size */
' W1 K! D+ `' V% V+ cProgram.stack = 0xF000;                   //我改到F000  也不行
回复 支持 反对

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

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

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2026-3-7 15:49 , Processed in 0.051191 second(s), 27 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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