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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2015-9-4 08:33:31 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
创龙工程师你好,我在OMAPL138单独调试DSP程序(使用SYSBIOS)时,在任务中使用calloc函数动态申请内存,用完后free,类似如下结构- W; d- Y4 g8 B: B& ^% ~

7 j; e0 f+ [! J9 O4 X$ K" ?3 u    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //256
! G7 n  s/ n2 ?$ N. n" j' T# F7 Q4 p; a- y
其他程序段。。。。。
9 m2 m) J" `3 w, H0 ?
' Z/ J2 g, \. U2 |; q   free(x_d);* ~7 F+ X( I6 F3 t( N& Q: C8 A

, H8 v" r* [: g9 R使用DSP侧单独调试功能,验证动态申请没有问题,
& q$ e& i1 P  Y6 t- W
; N5 E- F9 G3 o$ x# k# L6 O: R但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。
- n7 A! e# n/ M+ O' h3 @' ^
& f* p) l( h2 |0 q7 X7 b" ^4 S
4 v4 [% @/ ?6 a
$ E; q# H' }+ V: O3 F* [9 `
9 |3 `. A7 H1 {6 D: g# v( q: G

' W  R- P0 m% i8 H9 J0 J
; z, D8 z& j  e2 J6 C" m6 O" B6 Z3 v  ~9 f$ o! R& J0 w& S
8 |. ^0 S; Y( S) ]
. r7 G; I" p. Q- D

1 k9 s% f7 C' H2 k6 m0 [: ]# H
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2015-9-4 10:29:21 | 只看该作者
补充说明3 L$ _8 r: r1 E2 q. E
我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下
/ g& ~$ A# O& b. \, z(不过疑惑的是,为何单独DSP仿真就没有问题呢?)5 V& [' w* ^- V* N+ @
- b+ M* l$ ?9 C6 ^8 [) n0 t$ Q
是不是需要在DSP.CFG中进行配置5 ]/ W+ Z# @* u# ]* Y/ j+ j
我现在的配置为
6 H7 c* I9 t# p) E' r/ O; D' Q# G$ L3 f6 J& q. J7 `9 D
/*
6 T0 R5 b# f3 W. D4 z; { *  ======== Operating System Configuration ========. i$ X$ J  C2 R9 [
*/
& T0 C. G+ r) A! v1 ]% G. L) t% R% b9 a! G) [
/* no rts heap */. P. O1 j1 Y- y5 W2 I
Program.heap = 0;; C/ R  L6 n2 S+ l/ Y4 A* W: Y! i
Program.argSize = 100;  /* minimum size */
; c" y5 m: A' F! E- qProgram.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大
* u) F  L8 p- ?. j! Q# H+ O5 ^9 B0 K) `9 u* L5 z8 h
/* create a default heap */
" c2 F8 l; ]" ^2 P9 m9 b( Zvar HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
3 N; k; j& @4 \. X/ rvar heapMemParams = new HeapMem.Params();
' X5 N1 S, M$ f" D, V$ ?heapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大
# [" g6 N! s, r) l9 w8 [$ R, t2 ?3 K! @) J$ B  u/ k
var Memory = xdc.useModule('xdc.runtime.Memory');
8 }- I/ N  |8 h4 W1 m7 OMemory.defaultHeapInstance = HeapMem.create(heapMemParams);, S9 B: H5 g6 G8 Q

7 z- g, y* ^1 m, P# ]/* configure System module */
/ F. O& G' G: I$ V, i3 L6 c& A8 \var SysMin = xdc.useModule('xdc.runtime.SysMin');
' W1 `% i, h8 h$ m. Q; Q, cSysMin.bufSize = 0x1000;
9 {& n! q; |# r" H. sSysMin.flushAtExit = false;
; G- h8 b9 m' l% p) |4 i6 r( [  x/ L  A) N1 f2 L8 ~. L
var System = xdc.useModule('xdc.runtime.System');& ^+ Y0 A2 b! B# F- S
System.SupportProxy = SysMin;9 a" l, t4 f$ k2 w' U( a* l: I; R
2 w$ R* q# ]) o7 i2 j# Z: r$ Y& |
/* configure SysBios to use the lower half of Timer 1 */
( v1 H- j1 H7 Bvar Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');* d9 ]/ l. a4 l) ~
var Clock = xdc.useModule('ti.sysbios.knl.Clock');# V" r; c7 Z( M$ k- z
Timer.timerSettings[1].master = true;  G. B7 h1 D' p# Y5 t2 s; J; \
Timer.defaultHalf = Timer.Half_LOWER;. O9 S7 Q& O( @3 f, z
Clock.timerId = 1;
/ U& k, t& [" L5 q6 B$ M* y5 T# G7 z* c

  B: n( F: u4 Q+ Q$ R0 N/*3 D6 b/ s& c, \
*  ======== Miscellaneous Configuration ========* z4 v; K* `& R4 @
*/
7 M% a; L6 k3 E. ~. W: A  D: z$ d
) F, u9 H3 |9 M3 N- ~6 m/* set default diags mask */
+ u2 x) V; v0 K1 h& }5 Kvar Diags = xdc.useModule('xdc.runtime.Diags');5 N6 {8 K: s* R# q- P
var Defaults = xdc.useModule('xdc.runtime.Defaults');
& O; F7 g/ I, [, ]+ R4 W( M9 T6 f' B1 ]0 A: n; i. B- r/ z5 ^" d
Defaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;
+ R9 O" j+ E2 {( M) aDefaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;
6 q* ~& [; I! S% e1 J3 IDefaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;3 h1 N# P2 v2 ]; T! p# W- X
Defaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */% \- R/ t( w+ Z- e
Defaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */
; R+ a. A& d+ I* h' S& HDefaults.common$.diags_STATUS    = Diags.RUNTIME_ON;# ^4 H8 A8 F8 ~* Z8 [
Defaults.common$.diags_USER1     = Diags.ALWAYS_OFF;5 P7 d/ ~( M( _. z
Defaults.common$.diags_USER2     = Diags.ALWAYS_OFF;
0 k0 D: }4 E: `" i& n$ _Defaults.common$.diags_USER3     = Diags.ALWAYS_OFF;
! J3 l' ~* }$ F1 SDefaults.common$.diags_USER4     = Diags.ALWAYS_OFF;
/ Q' ^  o7 ^+ v) b7 EDefaults.common$.diags_USER5     = Diags.ALWAYS_OFF;
4 @/ ]# I# F; EDefaults.common$.diags_USER6     = Diags.ALWAYS_OFF;
" `% P% W5 {0 f! Q4 l4 UDefaults.common$.diags_INFO      = Diags.ALWAYS_OFF;
3 I0 s* r/ W2 W8 t' N' _2 TDefaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;
2 X4 Q+ e1 Q3 W& u
0 y, R5 L8 m5 _+ `. ?3 `; p8 q/* override diags mask for selected modules */+ e) N1 J* q1 s, |" @; ]* k6 r
xdc.useModule('xdc.runtime.Main');. }0 V! U6 B; a
Diags.setMaskMeta(
6 k8 F+ P/ Q  ^1 Y, l% h  B6 u    "xdc.runtime.Main",
+ `$ f) x$ k& i# ~% Y+ t, S$ ~) O    Diags.ENTRY | Diags.EXIT | Diags.INFO,
6 J% E/ V! f# H2 }5 l    Diags.RUNTIME_ON' t* ~/ c, [5 A: W5 S3 F/ I
);) H( ^6 d& c7 ]4 B# p

9 i; U; `# A. w9 \& `0 n' cvar Registry = xdc.useModule('xdc.runtime.Registry');
/ F( V* S3 R# t& s; e6 ARegistry.common$.diags_ENTRY = Diags.RUNTIME_OFF;
2 G8 }: i* g, U6 I- h( c$ CRegistry.common$.diags_EXIT  = Diags.RUNTIME_OFF;
4 ~+ O0 M1 s; |( U+ j; rRegistry.common$.diags_INFO  = Diags.RUNTIME_OFF;
- f9 h) }+ T" `( m6 {2 j) mRegistry.common$.diags_USER1 = Diags.RUNTIME_OFF;
' Y. G/ ~+ o! n. T' {  w
& @: ^7 D/ u1 F+ C7 O/* create a logger instance */& z- Y5 O, S9 Y9 ~; ^7 _9 g; L
var LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');$ B$ z3 l8 O' a( M- q4 l5 W
var loggerBufP = new LoggerBuf.Params();$ ?: E) K* ^) U
loggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */
% ?: Q5 e( C* m/ n) TloggerBufP.bufType = LoggerBuf.BufType_FIXED;- u8 Y. t) `4 B" b

$ h: R9 l9 K6 P1 V, Yvar appLogger = LoggerBuf.create(loggerBufP);
8 q0 {* F4 Z, ~# happLogger.instance.name = "AppLog_Core1";
) I$ U; C; W* {0 MDefaults.common$.logger = appLogger;
$ K) V$ o5 p6 V8 r/ yMemory.defaultHeapSize = 0x8192;   
1 k& W, A" Y% g; oIdle.idleFxns[0] = "&LEDStatus";
& }5 u0 j  }+ @2 O" bCache.initSize.l2Size = Cache.L2Size_32K;
! A1 q& y/ C, N4 t: t% @% V' O- Y, [7 \' z0 r( \
回复 支持 反对

使用道具 举报

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 */3 _9 P. d- U! A+ b$ o- `; L5 j& C, s
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
1 i# @+ Z4 e7 h1 r( E/ v8 zvar heapMemParams = new HeapMem.Params();
9 c9 Q5 a& w( q* d4 u% k& h% BheapMemParams.size = 0x4000;5 A0 B9 L6 x! V8 f

& O' m& v$ h/ f3 Mvar Memory = xdc.useModule('xdc.runtime.Memory');  B+ H  b+ C- g- \9 ?
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);6 ]+ x, O$ A' G1 V; X

( Z7 F! i4 S7 i  v- O& _, F  L/ R8 X9 w我大约calloc  每次共计大小为5K*16bits,' H3 a" j0 l0 m6 X
而默认配置才0x4000、需要改大。4 i5 J3 t4 U- x/ E) Z

' j# m  K% E0 h$ @
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
5#
 楼主| 发表于 2015-10-28 16:14:47 | 只看该作者
/* no rts heap */" @+ o9 r6 W1 b( C
Program.heap = 0;- {# O2 r* G/ X
Program.argSize = 100;  /* minimum size */( k" G% P8 x& D$ @$ L0 T# ]
Program.stack = 0xF000;                   //我改到F000  也不行
回复 支持 反对

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

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

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2026-2-23 20:27 , Processed in 0.043344 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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