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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

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

8 g' L% x% M% M0 g    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //2565 t- X  z; J4 y4 D

$ p  y  ^/ `6 @其他程序段。。。。。
2 B; L4 Q* y- _- C: b  h , L1 M  k0 ~2 ~
   free(x_d);
8 W4 W& v% o6 w- Y$ R* t2 r
/ \0 X' V8 [, ~4 b& w$ n; c; c" M使用DSP侧单独调试功能,验证动态申请没有问题,
5 g7 i: f- i3 R/ ^, _! D) I6 H
1 W% X4 b, p3 ~8 z( D但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。5 }5 m# p! v* e6 O* S& y
; c$ ]' J/ V* u9 A
8 E3 [$ P! ?. F! ?) a% k) d
& r) H% a5 B7 A( ]7 P
/ }8 y. d, Y( U* |6 `

3 r( {8 Q; }* J3 T' q2 V! ^( G8 O4 Z1 s3 P$ Q4 G
( M; f' w+ S$ j8 Y+ D. N( |

8 A4 V% @9 Z, ~6 S; b8 g  E( W; [( J* a$ z% `

* y) ^4 o. A& ~8 L
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

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

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
5#
 楼主| 发表于 2015-10-28 16:14:47 | 只看该作者
/* no rts heap */; h- g& A- w4 ~2 q! [2 l
Program.heap = 0;
3 F" |  ?% d4 C: |Program.argSize = 100;  /* minimum size */+ }! }8 O" R1 I  o9 q+ I
Program.stack = 0xF000;                   //我改到F000  也不行
回复 支持 反对

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

积分
1093
地板
发表于 2015-10-28 09:51:31 | 只看该作者
/* create a default heap */
. m2 N* u; |( Ivar HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');8 u0 \. U0 J  M$ c) g. p0 r. W0 A. y
var heapMemParams = new HeapMem.Params();
* L; x, w& a) ]" pheapMemParams.size = 0x4000;
2 C& g# T# q( q) N$ [, C" {( C
var Memory = xdc.useModule('xdc.runtime.Memory');  n# Z9 m/ G) _6 ?
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);/ Q4 e+ S2 U4 {

' u; z; u; P! u9 i我大约calloc  每次共计大小为5K*16bits,9 I' \1 @0 D! E0 O: `& Z' w
而默认配置才0x4000、需要改大。: I6 s- p: C& k5 b! `+ b! z
- T* c) [& e4 e+ T. q5 H& U! V
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
板凳
 楼主| 发表于 2015-9-7 15:38:00 | 只看该作者
为什么没人回答呢?   大家都不用动态申请内存方式吗?
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2015-9-4 10:29:21 | 只看该作者
补充说明6 |/ l& `1 |1 ], A# m/ A
我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下6 Y  ]/ o+ A4 O1 n9 x
(不过疑惑的是,为何单独DSP仿真就没有问题呢?)
6 r% C6 B* y6 }8 ]0 N  H0 J4 r2 l( \8 |
1 |5 Q! j" B% U+ I5 h
是不是需要在DSP.CFG中进行配置
( ]6 \" d3 g+ x" s+ R0 v我现在的配置为
$ r% v( O  V0 K% Q# I" J: w& T/ B; o4 ]% T: j
/*( r7 k8 M$ n) B7 O
*  ======== Operating System Configuration ========
# Y/ C# b+ W4 r) D) X8 X! s( O */
( q- m+ N1 |0 L! k6 N: B* r; L+ V
% C# E( t4 t5 r$ n! G/* no rts heap */
; {8 b# s- V: K6 A9 F! B2 j) h; dProgram.heap = 0;
5 K' c7 T; I0 M  S6 U4 l1 HProgram.argSize = 100;  /* minimum size */
$ i" j4 L/ V: K1 B; i" i* g. vProgram.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大$ E* a( c. ]1 q( f

0 Z0 N2 @! g1 n; I* `/* create a default heap */
: e6 R- e' j/ `) qvar HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
- A- m7 Q8 E, jvar heapMemParams = new HeapMem.Params();; O$ A- P$ u  Y1 E# h0 r0 p
heapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大/ {8 I- K. @# q, e2 P8 E) P1 [
  o% v' P6 I/ ?( D: ]$ m
var Memory = xdc.useModule('xdc.runtime.Memory');
# c. l+ K  v" D' m1 xMemory.defaultHeapInstance = HeapMem.create(heapMemParams);. ~+ ?! ~& ~: w  R4 r$ O1 n  u

  C- K& @; j: B1 `* w" v; C& e/* configure System module */) S1 K! {* o; ]9 H$ j
var SysMin = xdc.useModule('xdc.runtime.SysMin');. ], d9 M3 C0 r( c8 D# h5 q
SysMin.bufSize = 0x1000;. k2 u0 @* C; n! I2 V  g; Z
SysMin.flushAtExit = false;, H  x1 e- B, t7 b+ O. |

* E, Y0 t# h: k. ]+ i/ [var System = xdc.useModule('xdc.runtime.System');& l; F: N' b" d* a) k" R. u) E- H
System.SupportProxy = SysMin;
: Y+ b: B7 z! _1 d
& l* N& \/ O2 w! F6 i/* configure SysBios to use the lower half of Timer 1 *// H  }/ V' i! d5 f3 {6 }% z
var Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');6 v) Y, }- d7 D, F! W
var Clock = xdc.useModule('ti.sysbios.knl.Clock');: O! f8 W: g( a/ Q6 |0 e! }3 X
Timer.timerSettings[1].master = true;
- `$ k2 w. T5 z) ZTimer.defaultHalf = Timer.Half_LOWER;, j7 R/ h5 `- k2 z2 j; b* u3 u9 ]
Clock.timerId = 1;
1 q. s9 `$ h" `5 K; K) G( A
7 I# w" r. h! n3 Q0 W2 _, w5 c$ U
; u0 v' ?2 @# S* E/*# l) K2 r* T' n9 g7 C: c
*  ======== Miscellaneous Configuration ========
: i$ B* X$ ~. k# C: _8 e2 A */
7 ?2 K8 {4 m4 [) _% D0 Y) u% o% a9 q; I7 ^: o
/* set default diags mask */. _. x% a" ]( h2 L9 n) a1 U
var Diags = xdc.useModule('xdc.runtime.Diags');  q% ^. P% Y# w, D8 t  t! g% v
var Defaults = xdc.useModule('xdc.runtime.Defaults');
$ b# {/ O+ |% U% j! |& h
0 G4 v8 `( u, v1 I/ o, oDefaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;6 L! f/ c7 V, y. N' W# |+ e3 ^
Defaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;  k% |) u2 B2 K& e( J
Defaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;
# G( ?" {5 F0 S* b8 uDefaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */
) N, M1 e/ R1 C( G7 pDefaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */
% n: C- I! t, y& _: A! R) zDefaults.common$.diags_STATUS    = Diags.RUNTIME_ON;% }+ c0 c) F1 K7 S
Defaults.common$.diags_USER1     = Diags.ALWAYS_OFF;2 I% {8 T* y/ L9 x! }  I) G7 _/ ~1 |
Defaults.common$.diags_USER2     = Diags.ALWAYS_OFF;
6 W# ^# Z# K, @Defaults.common$.diags_USER3     = Diags.ALWAYS_OFF;1 u7 x4 f. U5 @  |& T8 I
Defaults.common$.diags_USER4     = Diags.ALWAYS_OFF;8 N/ Y* L0 N! a% D1 t+ {4 m! p
Defaults.common$.diags_USER5     = Diags.ALWAYS_OFF;
6 }" }* C+ g9 g) r8 JDefaults.common$.diags_USER6     = Diags.ALWAYS_OFF;
3 R' i6 Z% Y$ uDefaults.common$.diags_INFO      = Diags.ALWAYS_OFF;  y3 m: C2 Y( c
Defaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;
3 m6 h+ p% X( M1 l, ?
3 ]# O" ]' T! ]' R/* override diags mask for selected modules */5 X) \' z5 C7 B$ c2 ~
xdc.useModule('xdc.runtime.Main');
  [+ ^7 l' O& M5 l$ i6 UDiags.setMaskMeta(+ z' `: u, G3 z, W
    "xdc.runtime.Main",; e4 ]. [9 t; k5 W
    Diags.ENTRY | Diags.EXIT | Diags.INFO,( i* v- V9 B' d+ r, i  F: p! p, r
    Diags.RUNTIME_ON( L, i/ R1 o* ^" r( Q
);
/ \9 z1 C# g; E+ B# t( D: y+ w9 @2 w/ c$ \5 Y, u3 d; f% B7 l+ V- |' T# f
var Registry = xdc.useModule('xdc.runtime.Registry');0 T/ M. Z& e8 Z, y6 L* h+ \
Registry.common$.diags_ENTRY = Diags.RUNTIME_OFF;, [- w( @# Y4 g9 o- P5 L. ?
Registry.common$.diags_EXIT  = Diags.RUNTIME_OFF;, A. D6 x8 [4 Q# O# M8 q& c+ Q
Registry.common$.diags_INFO  = Diags.RUNTIME_OFF;
6 D7 o2 ^/ G1 ERegistry.common$.diags_USER1 = Diags.RUNTIME_OFF;! g1 k& y2 U, N7 ?! D
# I7 F7 L3 @/ }$ q0 q: B2 `4 C
/* create a logger instance */
9 f; |% I( P. ?, B1 tvar LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');/ J" l5 f, a- j& Z6 j
var loggerBufP = new LoggerBuf.Params();
7 U3 V3 e2 ]+ c& n+ K5 V' D. ploggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */
  j. x  E  `) [2 ~4 r0 w/ VloggerBufP.bufType = LoggerBuf.BufType_FIXED;- d$ i- B2 F# K! Y

; {4 Q  s. a$ evar appLogger = LoggerBuf.create(loggerBufP);  J  {' v; u; h( B( o! f4 v
appLogger.instance.name = "AppLog_Core1";0 L+ |" F/ l9 a3 L2 f3 x
Defaults.common$.logger = appLogger;
+ {' {( N$ e$ D, b( J& L2 AMemory.defaultHeapSize = 0x8192;    : G8 B: f' H0 B2 X) _
Idle.idleFxns[0] = "&LEDStatus";8 P7 z. d9 m5 z2 u4 v& y
Cache.initSize.l2Size = Cache.L2Size_32K;
& ^  F2 t4 a# e  F) J# X
. L+ T% ~' q1 x
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-12-2 20:42 , Processed in 0.042862 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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