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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2015-9-4 08:33:31 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
创龙工程师你好,我在OMAPL138单独调试DSP程序(使用SYSBIOS)时,在任务中使用calloc函数动态申请内存,用完后free,类似如下结构
2 v  c8 P: ~. m' J& \5 t  o( D8 v, a! _- L7 A& A! G9 Q
    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //256- v! S) f5 \! L

: f- a. `- @9 D' v其他程序段。。。。。8 k: J# }1 o  Q' i+ P- w
7 A/ K9 w# h5 @1 g9 S
   free(x_d);
$ W. d3 Z! C7 R' e- s7 `4 j  b& L8 @' h+ t. w
使用DSP侧单独调试功能,验证动态申请没有问题," }4 [  `; }5 W# T7 Z' j7 L
: O  ?5 F" v- e* r* n3 h
但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。( _! v' A( ^; w! v1 q' ~9 i* e) l

5 q( P9 D$ o4 G$ Z% c5 ~) s- L) P8 C# D- Q+ _; E

- P& b. H; s) k/ u7 ?9 o- {9 J) b; F2 U% C5 V; `$ P+ Y- Y  v
- o: ^* |# ~1 \! W+ `2 Y( C

8 m' _: x; I7 r$ ~% V
. `1 X- r; _+ G# g: Q; e+ t  o. H) Q5 C" f$ _+ Q
% {  D0 x: [; e1 ~4 e* T! `( x
% `/ _" Z! D" Q5 l# F1 S
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2015-9-4 10:29:21 | 只看该作者
补充说明, N+ G8 V0 m  F4 f" c! a& g
我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下
/ e0 B, l8 T1 `% I7 ~( j" e(不过疑惑的是,为何单独DSP仿真就没有问题呢?): G) E6 _3 P- F6 u
+ h  e  {) h; L4 Z0 {
是不是需要在DSP.CFG中进行配置5 B9 W7 ]9 L$ C7 N2 F
我现在的配置为! J& X0 H) E4 c. _4 d
* z% Z! E- @8 K. y* U
/*
9 w9 J8 m5 E% `1 t2 P *  ======== Operating System Configuration ========, N7 u* O$ `- E9 J# B- Z
*/1 ?5 j  R4 _3 d3 u4 _; d% u( Q

$ X" I& f( N- Z9 P8 F. b/* no rts heap */
9 C2 f9 o% ]" N. g- O3 HProgram.heap = 0;- }  R  d! @; ^, y: b% \
Program.argSize = 100;  /* minimum size */
7 s! q, ^$ |* F  c4 {- W6 DProgram.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大+ T& C, T$ D$ B5 {: _6 ^6 Q0 O

9 @9 C% w! e! B; c# Q/* create a default heap */
  i% b# P& s/ [6 E" R* M: |var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');& [4 W. I2 N/ r7 D0 e4 E; p
var heapMemParams = new HeapMem.Params();
) l. I* g( g" x( [4 Q/ l6 LheapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大
1 O9 x- K2 |6 P; G0 s  Z  C% n( M" X& n2 [
var Memory = xdc.useModule('xdc.runtime.Memory');; B2 g) @8 [1 y6 r
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);
1 A+ [% D& d/ K6 A1 q' H  B* P0 Q7 ?1 b% ^# o! P5 I
/* configure System module */
0 Z& e0 C4 L  W9 r6 U+ O" x8 Fvar SysMin = xdc.useModule('xdc.runtime.SysMin');  t; p* h/ I  q/ P+ H0 B, d
SysMin.bufSize = 0x1000;' [6 m: n+ |# I* j
SysMin.flushAtExit = false;' i. ~; p9 G' i, d6 ]
" {; R7 L; @" O% O4 W8 T1 E) G8 l* c
var System = xdc.useModule('xdc.runtime.System');# z7 S: p+ |) X' r) w( \0 X
System.SupportProxy = SysMin;
( x* Z( U1 `! N/ e$ \4 C# k6 n! d; p9 v. d5 f4 X, {0 {
/* configure SysBios to use the lower half of Timer 1 */
. q3 v) Y0 t  g4 U9 [% Avar Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');& m( l( z0 C8 T7 I& i
var Clock = xdc.useModule('ti.sysbios.knl.Clock');
7 K+ R. ~5 u+ u& \6 R  h) jTimer.timerSettings[1].master = true;% J5 Y5 H" \& h& c8 W1 c
Timer.defaultHalf = Timer.Half_LOWER;, X( }0 g5 C4 o' J3 f5 h
Clock.timerId = 1;. X" }' N& Y+ \7 `

/ j+ A6 Q/ f  {6 Q
, T7 m0 H, O5 {7 u# q, c* x* z) Z/*
, D$ S4 ^9 [5 T* e6 m *  ======== Miscellaneous Configuration ========& m( f& f% t6 x$ ~! m/ W
*/
5 U7 K( u( t" I% ]$ l7 L
8 I8 z3 t/ _6 V& d1 x# I) B/* set default diags mask */
& n( _! _9 i- m- r* h! {var Diags = xdc.useModule('xdc.runtime.Diags');
$ F- H1 C/ E( O: X$ t6 B8 I% N$ L8 yvar Defaults = xdc.useModule('xdc.runtime.Defaults');5 G, p' S  n! s2 |* s, y( U

  f/ U3 y2 ]( L6 t4 [0 N+ Y0 h( NDefaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;: n6 O5 t, z5 e% j8 P( a
Defaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;  F" p1 i6 |& L8 Z
Defaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;2 E. H+ j# H! I0 Y
Defaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */2 R( X- g, R6 D+ Y) m6 P) y1 B; Z% b
Defaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */" l8 i+ h2 K# O( o0 L
Defaults.common$.diags_STATUS    = Diags.RUNTIME_ON;* Q3 Y) P& `$ y( `- k
Defaults.common$.diags_USER1     = Diags.ALWAYS_OFF;( u! N! k; {/ h% z& w$ `
Defaults.common$.diags_USER2     = Diags.ALWAYS_OFF;' Q. E& y6 J5 M
Defaults.common$.diags_USER3     = Diags.ALWAYS_OFF;
7 z1 x) w! G* A/ iDefaults.common$.diags_USER4     = Diags.ALWAYS_OFF;
4 H; T: g9 n; IDefaults.common$.diags_USER5     = Diags.ALWAYS_OFF;
1 ~! L, V3 G4 @7 Q% \( |' U4 a- r4 xDefaults.common$.diags_USER6     = Diags.ALWAYS_OFF;* t& F1 W* D2 ^
Defaults.common$.diags_INFO      = Diags.ALWAYS_OFF;) i. F/ ^7 T, z8 _7 ^
Defaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;
4 R# R, s& O, o7 {% M# l, Z3 }+ h
/* override diags mask for selected modules */
7 z' K% I# c4 b& rxdc.useModule('xdc.runtime.Main');, X/ h! M* @- _- m1 u( d0 a
Diags.setMaskMeta(. h9 ~: q. J. A4 g
    "xdc.runtime.Main",
: J3 f5 _. m! P    Diags.ENTRY | Diags.EXIT | Diags.INFO,8 R( x3 W$ x/ Y0 q, r* W
    Diags.RUNTIME_ON
7 U6 o8 S1 g& q" B8 @);
( k% ^/ H4 ^& W$ X4 p! A: |2 `' M$ I& n8 v
var Registry = xdc.useModule('xdc.runtime.Registry');7 Y: y7 o# W( j
Registry.common$.diags_ENTRY = Diags.RUNTIME_OFF;  P* o2 Z2 J  }) [" Y) B% ~
Registry.common$.diags_EXIT  = Diags.RUNTIME_OFF;3 j7 M2 }: ]/ K* L
Registry.common$.diags_INFO  = Diags.RUNTIME_OFF;4 R7 c' J- f7 _( o7 D
Registry.common$.diags_USER1 = Diags.RUNTIME_OFF;
2 O; q; E& H, h* x) C4 g+ S; u* G$ n" p8 u# h2 @
/* create a logger instance */: l6 K2 t) s* L2 Q% F2 b& [0 x$ p* }, e
var LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');* b" ]" p2 }& W, ~; L; j' O
var loggerBufP = new LoggerBuf.Params();
5 L* f5 {+ _- T$ V2 YloggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */  T8 Y* b; C% n# h: c3 G
loggerBufP.bufType = LoggerBuf.BufType_FIXED;
) J/ n# e$ L- z, A9 P7 o" v9 E
var appLogger = LoggerBuf.create(loggerBufP);
9 ^, a3 F$ h- Z2 M. j# G5 UappLogger.instance.name = "AppLog_Core1";; k: Z$ B+ J! J9 w
Defaults.common$.logger = appLogger;6 F: u8 I& p5 ~" R! t3 @
Memory.defaultHeapSize = 0x8192;    ) c$ G* y; R, h
Idle.idleFxns[0] = "&LEDStatus";, p+ e+ o- f* G
Cache.initSize.l2Size = Cache.L2Size_32K;
4 @$ E, L2 i, h$ Q" |
) W0 {* c# R1 P6 {, E& G
回复 支持 反对

使用道具 举报

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 */% D$ p6 ?( S5 t5 i, D" M0 U: j
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');% m7 R, a( M" {* C
var heapMemParams = new HeapMem.Params();
0 a- y7 Z9 u! v* h* d6 bheapMemParams.size = 0x4000;# @; n+ ?" D3 N. ~; h# {
; _& H" z# F; ^+ M& G
var Memory = xdc.useModule('xdc.runtime.Memory');8 |5 u  E- T1 m3 e4 N6 D
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);9 _# N* N3 l# E- [

+ O0 m& \0 t  A+ j/ |我大约calloc  每次共计大小为5K*16bits,0 C" O# ?/ c% Y
而默认配置才0x4000、需要改大。/ a9 t: `0 \) g( ~

/ S5 `& @' L. o4 d  R9 H
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
5#
 楼主| 发表于 2015-10-28 16:14:47 | 只看该作者
/* no rts heap */8 I# @5 @6 j$ D0 \
Program.heap = 0;7 P: d0 _% R/ u  o
Program.argSize = 100;  /* minimum size */( M8 l! ^8 m2 w9 }2 G- H
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-6 09:53 , Processed in 0.040235 second(s), 23 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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