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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2015-9-4 08:33:31 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
创龙工程师你好,我在OMAPL138单独调试DSP程序(使用SYSBIOS)时,在任务中使用calloc函数动态申请内存,用完后free,类似如下结构1 V! h! ~$ }1 k- k  Z6 r  K' k
% H) ~& s$ h( t2 i. ^- v# I
    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //256/ ~# ]  F6 L/ }$ U( ~" o1 B% L( W

' i- S8 T1 `! i5 c0 u6 B% U其他程序段。。。。。
+ m" L( u- _8 g8 j
) f- p, y% X8 M8 t8 V" S; M: [   free(x_d);
; v" x* R* ~- |# e- V# v5 U# h- Y5 y
使用DSP侧单独调试功能,验证动态申请没有问题,( F+ g' E. F! B! f4 A% h

/ d% Y1 h. B9 g, U但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。9 A( W" g, z( {! F' P0 ?
4 O) ]8 Z7 ~4 w4 P7 G3 l
3 h1 j2 M8 S" V+ s+ o% r/ H: E

; z# C( _/ w6 o# O; ]4 O$ c
1 ?( c# ?3 N5 {+ g* H* W2 N
* s9 E& l/ P( s
. a; u& X4 k; v1 H% ?
, E. F! h8 z: b0 Q2 M. }
1 h8 u4 J) t2 {: |. n( u
* a4 Z3 O7 I/ {/ y" Y# r* s( f% y0 [8 F! {2 X! s$ t; l
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2015-9-4 10:29:21 | 只看该作者
补充说明7 R3 B  y. ~3 ?7 C
我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下" `- t: K4 X3 @* K- P8 g) ^
(不过疑惑的是,为何单独DSP仿真就没有问题呢?)$ P; p5 Q( w8 E1 E* t
1 w( P! B3 b. y& W" Z+ G
是不是需要在DSP.CFG中进行配置& S' D3 Y  q/ b# I+ f: @
我现在的配置为
* }, x' U( @# L# ?- n& {0 ^. H; e$ Z8 g2 k
/*
  j4 e$ k8 k, a$ ]8 I* y  R" B3 P6 T" _ *  ======== Operating System Configuration ========
! l& N4 N& |: b8 A6 `& Y% U */( q0 H  X- v) U3 [0 R* Q

( r" I5 X1 i8 M& V) ^# m8 k* n/* no rts heap */
6 R5 ]+ C$ @: |Program.heap = 0;% [. V* [+ L- A3 B
Program.argSize = 100;  /* minimum size */
& L. J7 s/ ]* G: CProgram.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大
3 ?- e! p; q# X% F! E. a7 v3 |8 {* ~0 a
/* create a default heap */
5 x  Q; X" B" hvar HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');- n8 @, O9 y2 C4 k
var heapMemParams = new HeapMem.Params();2 H4 @5 F' ^- x4 K; X9 S3 j9 m
heapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大; P9 G: X; l; w& V/ _. {

, w! ?& n5 p" J- t# q" l
var Memory = xdc.useModule('xdc.runtime.Memory');. _. J& X, O5 B. K$ c0 J# F3 t
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);: f. N/ Y* N8 A# H
3 v* \; \4 x# F2 t0 o9 ~9 Y
/* configure System module */6 U; x4 C( J3 @9 G6 a0 V! J
var SysMin = xdc.useModule('xdc.runtime.SysMin');
, x/ n* H1 O4 t2 ?, a0 J0 A- T* \1 V! uSysMin.bufSize = 0x1000;) e$ p9 c/ O* k! m" G
SysMin.flushAtExit = false;
. f  @% m4 F" N% m& r4 {8 ^- W9 b1 [( V: J$ t* Z
var System = xdc.useModule('xdc.runtime.System');+ a# U9 j# z+ f' H5 V  @9 L
System.SupportProxy = SysMin;
* B$ p1 S1 G( t8 ~- P* O2 w; M9 n4 ]" {- K
/* configure SysBios to use the lower half of Timer 1 */
9 F- L8 }. ~* p0 `var Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');+ d, ?  ?+ ?( A2 ~9 Q
var Clock = xdc.useModule('ti.sysbios.knl.Clock');
; z5 b  ~6 ^. m/ r: gTimer.timerSettings[1].master = true;
" }! W- z5 b) K  n) |Timer.defaultHalf = Timer.Half_LOWER;) `* k0 ^! b* v! p+ [! I
Clock.timerId = 1;
  s9 h% L* r: q" [  a2 V; o1 Y# b( ]. A1 z- F; W8 ?. Y6 Q
5 }3 Q! G* K* \
/*
6 Z0 U  M: x& H( z6 s& z6 {& u' f *  ======== Miscellaneous Configuration ========
; {" `, R, D0 k" y */0 x  M5 o+ i) Q" f! x
5 E- ?; P& D3 ?! V! u2 v
/* set default diags mask */
; F' L' e% w  U* S' S) v. nvar Diags = xdc.useModule('xdc.runtime.Diags');
2 u" d% {1 o# n5 ^3 pvar Defaults = xdc.useModule('xdc.runtime.Defaults');
% u5 U) V4 u" W/ L: P
. a8 r4 Y% n# c0 y  IDefaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;
( P0 X5 A, H4 I: G" p: r9 i: V0 I' lDefaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;6 w7 X( R5 e& }
Defaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;8 H* l1 ^1 o( K2 J
Defaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */
$ Q% U# I' l4 W; B/ `Defaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */$ W2 a: V2 ]) E& h  K/ H
Defaults.common$.diags_STATUS    = Diags.RUNTIME_ON;+ J. ~" P9 |1 O. _$ D
Defaults.common$.diags_USER1     = Diags.ALWAYS_OFF;
: H5 o; X; `7 W2 `$ h" v9 _Defaults.common$.diags_USER2     = Diags.ALWAYS_OFF;
  B/ j* d3 j* ^0 L% `Defaults.common$.diags_USER3     = Diags.ALWAYS_OFF;$ A* V9 m- I! A  l' f
Defaults.common$.diags_USER4     = Diags.ALWAYS_OFF;* T6 L  B% d) @! e$ q4 }: Q
Defaults.common$.diags_USER5     = Diags.ALWAYS_OFF;
$ j- L' w3 T, l0 FDefaults.common$.diags_USER6     = Diags.ALWAYS_OFF;& k3 }# q) E: Y  G! ^1 n$ i4 R; y
Defaults.common$.diags_INFO      = Diags.ALWAYS_OFF;( q2 p- z) Q5 v& K+ T, V
Defaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;" ?: Z( d8 m! g, R5 E; I
* {0 F! U; r  v% a$ ]+ C3 k
/* override diags mask for selected modules */# S. J( W' p( l& x
xdc.useModule('xdc.runtime.Main');3 A* O% T1 G0 E5 I
Diags.setMaskMeta(8 Y3 O" j: E5 {0 ~7 O; ^
    "xdc.runtime.Main",3 l9 j* g2 Y& i0 B: [0 _0 K$ L% V" G
    Diags.ENTRY | Diags.EXIT | Diags.INFO,
! g* b- j. o7 g- n1 _6 t& S    Diags.RUNTIME_ON
$ _$ S5 A& R. x5 @3 R);( Y9 d& v2 U5 ^
: p, P" V, K8 m2 @  ~6 e3 P
var Registry = xdc.useModule('xdc.runtime.Registry');
* `  _2 r0 Z7 ]# k! y" FRegistry.common$.diags_ENTRY = Diags.RUNTIME_OFF;3 u1 G9 _$ ~" E! L! N5 n% i/ m/ L
Registry.common$.diags_EXIT  = Diags.RUNTIME_OFF;
/ ]# Z0 p3 Z% ]Registry.common$.diags_INFO  = Diags.RUNTIME_OFF;$ b) y4 i+ H9 X, c" Y1 R  D5 }
Registry.common$.diags_USER1 = Diags.RUNTIME_OFF;' t4 O2 A& Q+ Q

; `' m# G8 y2 C0 c6 T- ^/* create a logger instance */
9 `9 V4 ]: z( O& |) o7 Jvar LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');
2 b: k, [9 B* w# s8 c1 ~var loggerBufP = new LoggerBuf.Params();, Y) _7 }9 b3 j' [+ R* o3 X
loggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */
; A- F: O2 }; K1 YloggerBufP.bufType = LoggerBuf.BufType_FIXED;
( E4 Y$ G6 U+ U3 \8 e% v6 ?
, G7 ?% T$ \- e! f8 Yvar appLogger = LoggerBuf.create(loggerBufP);
  b7 R4 }" X4 E4 z+ CappLogger.instance.name = "AppLog_Core1";9 J" c: _& ]# K8 }1 b( k9 P4 b
Defaults.common$.logger = appLogger;
  j( Y( p' b4 S' d8 u( A6 DMemory.defaultHeapSize = 0x8192;   
- W' [' j& Y9 _1 R! \" b9 XIdle.idleFxns[0] = "&LEDStatus";
; x, y" n/ v& @* p4 LCache.initSize.l2Size = Cache.L2Size_32K;& K6 r1 `6 p8 N3 R! e: n
: i% ?% A) c2 m. m) h: m5 @
回复 支持 反对

使用道具 举报

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 */
8 U  N( m! E+ S4 @' s2 y6 Qvar HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');  p& I! y6 n. \: B$ J1 v; f1 c
var heapMemParams = new HeapMem.Params();( J8 C9 X/ X1 S. Z2 {. R% G5 d( c
heapMemParams.size = 0x4000;9 z+ K1 l# K5 M

$ v; a5 @/ @% [" n6 Y- Hvar Memory = xdc.useModule('xdc.runtime.Memory');2 c0 |$ A9 U' x, q0 d$ k; C
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);
! H' u; c0 Y8 y: j3 J$ k  W* Y% s
我大约calloc  每次共计大小为5K*16bits,& L- B) W4 p+ C8 U& U  _5 o
而默认配置才0x4000、需要改大。8 ~9 Q! ?% R* E
# h3 m- A- s( h5 n6 T0 [
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
5#
 楼主| 发表于 2015-10-28 16:14:47 | 只看该作者
/* no rts heap */
9 {7 x$ \& Q2 S$ RProgram.heap = 0;1 ]- @; b, g9 l8 b
Program.argSize = 100;  /* minimum size */3 o7 x. S/ n' i  U' M, a0 j% b
Program.stack = 0xF000;                   //我改到F000  也不行
回复 支持 反对

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-5-11 04:39 , Processed in 0.041259 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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