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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

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

; B) w  z4 x+ m2 Y' I; O' o; ^    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //256
. q! Y1 T9 B: n& T* _8 t" h$ I7 a( b; k+ R4 G  Z8 I
其他程序段。。。。。3 k- L0 o; M" ?5 U9 O
& |8 u2 v9 e/ W' X
   free(x_d);
2 ?- X) V5 f- d( q
! z7 b/ p% ?$ j  q/ \& @使用DSP侧单独调试功能,验证动态申请没有问题,
  N. S' V6 H6 C, _7 N6 p' J
# _9 H+ }& ^% K! i* F但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。5 \% i) O7 G' k. q) {# R
" u7 A5 ~* i+ T6 ~8 w' p

. I# F0 E. I& f* X
: g, t# U# Y1 T. w0 ~( L
& y$ J) E/ c" Q7 {
  h) A/ J/ I. y! t4 E: M. I
% ~3 i5 u  |* E( o2 g& v8 H# r
; W+ O0 ]9 L  M" ~& `( E/ j

8 w" S( M2 F5 T; w: O+ Z1 |1 g1 Q0 k0 P8 _1 m- g# p4 d) p" l
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2015-9-4 10:29:21 | 只看该作者
补充说明' Q7 g% }  ^2 S5 I) V" x5 M, h
我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下8 o( {% _; l5 a5 Q1 E. U' G
(不过疑惑的是,为何单独DSP仿真就没有问题呢?)4 _  q4 b" C) c
$ }$ M" W: M0 H& a) }
是不是需要在DSP.CFG中进行配置, v" R1 v, g6 ^/ w: O. {
我现在的配置为
* J1 U* O$ T# o8 H4 T3 j4 O; G
! I; e" p0 ^# O4 W/*
3 x. `! q0 D* {/ y *  ======== Operating System Configuration ========
& Z6 \9 d  J- r( ^, M# M */
$ U( e7 Q# Y& C3 @4 X( M  ?  `7 F2 }1 p) u
/* no rts heap */& d, m" m( @2 M9 P
Program.heap = 0;0 {4 t; E0 D+ z5 O
Program.argSize = 100;  /* minimum size */" V3 P$ {& x9 g5 A! Y
Program.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大7 z( T8 p; {6 ~' d+ G& [2 _
9 k/ n( X) L( j/ @
/* create a default heap */
1 }9 z8 [5 N" ]% L# `% o% C5 ]$ u* \var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');( L& K' N4 D! |' U( ]- M
var heapMemParams = new HeapMem.Params();
" C8 m* P: W; h' ~" uheapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大
0 x! N6 z' U6 B9 w2 i% r+ F
6 I2 o2 P. X7 j
var Memory = xdc.useModule('xdc.runtime.Memory');9 @1 _  s+ R. o; K4 q+ J+ V6 A
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);3 s7 S1 S; F. L% D0 I+ ?

" c4 L# y: E; }4 a/ s& _" H( G1 Z/* configure System module */% j' T) T) j: T8 r
var SysMin = xdc.useModule('xdc.runtime.SysMin');: K5 I5 V; Z5 h  T" L" M  Z
SysMin.bufSize = 0x1000;. s. A. s* P6 f4 W. Q4 R) S
SysMin.flushAtExit = false;
6 }  V. G$ w8 `8 R) ]5 C/ m
' U* ]5 |! _' [! S  B( Jvar System = xdc.useModule('xdc.runtime.System');
  Z; ?6 s4 @; F) [" ]( tSystem.SupportProxy = SysMin;
# `2 ~% E! \6 j) D; w- R% W+ Q
1 L" f5 e5 e( e% Y( n- u/* configure SysBios to use the lower half of Timer 1 */4 R/ ^! R4 t3 @; \4 j" ]8 [' J" j7 a
var Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');
9 g7 Q; H5 f$ o9 H3 c! gvar Clock = xdc.useModule('ti.sysbios.knl.Clock');
1 U0 n; G( W) c- c. a5 O' |Timer.timerSettings[1].master = true;* J- M0 d" b; p" y# O
Timer.defaultHalf = Timer.Half_LOWER;
9 H- g$ Y' O$ X, s8 L# HClock.timerId = 1;# r0 |; l: k5 h) k2 O9 l
, G( d' O( Y2 u. l, ^. p6 n; I/ w
+ f# Z6 K' w7 \+ f" ]' R- h
/*
- ^0 w5 C/ v2 ? *  ======== Miscellaneous Configuration ========) E5 h* u% k* q2 Z$ e( h  _
*/0 L7 t( D$ |5 t6 \
. R# Q+ @+ c7 ^
/* set default diags mask */+ H1 C8 U8 C5 d1 k
var Diags = xdc.useModule('xdc.runtime.Diags');+ V+ `% @* C3 @9 H% M2 |
var Defaults = xdc.useModule('xdc.runtime.Defaults');
& O$ [% M" X/ R' Q5 I: n: Y0 G0 h: O
Defaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;) ~* R. z( R/ x: O& B9 B- _) t
Defaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;
% N% q- D; T3 C6 }+ K; L* MDefaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;# B- I! }# z, O+ e) m6 I
Defaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */
  C! [0 I. t* H6 ]4 wDefaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */9 q; G) f3 S8 S  `8 d& o9 I1 o4 Z
Defaults.common$.diags_STATUS    = Diags.RUNTIME_ON;
* I0 y. U( t! m; I2 [0 sDefaults.common$.diags_USER1     = Diags.ALWAYS_OFF;
. x# a. {4 f$ l6 g/ tDefaults.common$.diags_USER2     = Diags.ALWAYS_OFF;( C$ G5 \2 [, V1 c# q  w, F  r
Defaults.common$.diags_USER3     = Diags.ALWAYS_OFF;4 D0 y& U- u( @& {' ^
Defaults.common$.diags_USER4     = Diags.ALWAYS_OFF;% ~: Z8 O: ~# {. {3 z0 K- Q/ q
Defaults.common$.diags_USER5     = Diags.ALWAYS_OFF;
$ ~3 @& ~" C. d: ?% W( `Defaults.common$.diags_USER6     = Diags.ALWAYS_OFF;5 c, P2 k2 H; E6 Y9 g4 M4 K
Defaults.common$.diags_INFO      = Diags.ALWAYS_OFF;
: I2 l! z; ~: [  ?8 oDefaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;" W( C' s0 t, e" X

% o) u2 w5 D$ c0 R. \2 u3 X' S+ Y/* override diags mask for selected modules */0 s8 [& Y1 `" L
xdc.useModule('xdc.runtime.Main');
3 ]# r" @( t: p' R2 g+ d* @7 |Diags.setMaskMeta(5 R2 j) U$ ?* @+ V/ }' B$ o
    "xdc.runtime.Main",
# v, U+ ~& r; d    Diags.ENTRY | Diags.EXIT | Diags.INFO,
, w; b2 J  D/ N- A    Diags.RUNTIME_ON% b0 F' U% z1 [4 S* d) z
);# v$ i  g* r: _! _1 X8 h. O- h

2 j3 J& ?. Z  z& X3 n. Ivar Registry = xdc.useModule('xdc.runtime.Registry');
2 I1 ?! U4 `  V( qRegistry.common$.diags_ENTRY = Diags.RUNTIME_OFF;
+ M4 Q1 v. A- j9 RRegistry.common$.diags_EXIT  = Diags.RUNTIME_OFF;, j2 n2 A9 `) V. w. h0 p# O4 e
Registry.common$.diags_INFO  = Diags.RUNTIME_OFF;/ O8 E9 y! s  }: Q3 {
Registry.common$.diags_USER1 = Diags.RUNTIME_OFF;
- W) `( o7 H2 ?1 x
4 t( j  K. d* p8 O9 d2 w9 c9 A/* create a logger instance */6 Y( J+ J. w- g
var LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');
- N" I* w, O. tvar loggerBufP = new LoggerBuf.Params();
/ H0 n" e$ W( z3 y3 x; LloggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */0 ?0 ~: J) J: n4 j6 {  I" K0 y
loggerBufP.bufType = LoggerBuf.BufType_FIXED;
$ y6 B' }1 u9 x9 O, c- A# O
$ v! F' O. b$ d, U$ G7 }9 M9 Svar appLogger = LoggerBuf.create(loggerBufP);9 b* j3 {. _! G7 l. E
appLogger.instance.name = "AppLog_Core1";
; E! v6 C( u7 }/ I/ {' Y& N4 \. kDefaults.common$.logger = appLogger;' X/ G0 N4 O0 }( ~, I3 \
Memory.defaultHeapSize = 0x8192;    : L4 n( E! n! P7 F) f
Idle.idleFxns[0] = "&LEDStatus";' g# M, ?+ t1 E; O0 e  |
Cache.initSize.l2Size = Cache.L2Size_32K;
( I) L( l& L1 D; M9 C& s$ [7 E/ ~
回复 支持 反对

使用道具 举报

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 */5 a: o# c# h9 E% F( S
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');  c1 T* o  V! A( D
var heapMemParams = new HeapMem.Params();
0 t+ C0 s% @( _, R4 Y3 kheapMemParams.size = 0x4000;. g* }, ^' v) @7 @

+ y1 i8 U/ z, K6 x5 e) \) hvar Memory = xdc.useModule('xdc.runtime.Memory');
* t8 P4 V4 J) @, B' lMemory.defaultHeapInstance = HeapMem.create(heapMemParams);
/ i& Q( }, w! n7 R! `
4 P* @1 ~4 V0 d7 H) y: k我大约calloc  每次共计大小为5K*16bits,4 s  R9 R* j+ D' x
而默认配置才0x4000、需要改大。: f2 h: f' F; h3 W" ]6 R1 |$ ?  W7 z
3 ~0 S% Q5 I% Z. E6 n
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
5#
 楼主| 发表于 2015-10-28 16:14:47 | 只看该作者
/* no rts heap */( ]: r9 @& L, Z1 ^
Program.heap = 0;8 l& ?% Q' r: @9 u
Program.argSize = 100;  /* minimum size */
6 G( [; e8 n% `8 P" S( {9 o0 vProgram.stack = 0xF000;                   //我改到F000  也不行
回复 支持 反对

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-12-11 10:56 , Processed in 0.041319 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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