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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2015-9-4 08:33:31 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
创龙工程师你好,我在OMAPL138单独调试DSP程序(使用SYSBIOS)时,在任务中使用calloc函数动态申请内存,用完后free,类似如下结构- M6 ^' A; t) G- |' C
0 {2 C. C# Z# p, ^
    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //256  C5 R0 u9 I7 D2 }8 Q+ x' v

$ m$ [! u; V' |" P2 v其他程序段。。。。。
7 Z) g3 @9 W) g" e  P1 o % a* t8 ]& G8 a+ s: o
   free(x_d);3 B9 N3 d$ i  F! G; d# a6 e

4 H8 B7 C3 K6 l/ H$ k使用DSP侧单独调试功能,验证动态申请没有问题,
% [) N" [, i. R& V8 O' V! E
' S6 A8 `) T' V+ L! z& y但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。$ b/ O5 k7 c! O: s1 j8 Q* [
7 H+ m! q. d4 m: Y+ z, r' L7 w

& V- L: _( u7 n& e9 l  ?( w) L7 \4 |) ^& }* R( V
- k; N1 d+ [) T+ a  E6 f, l  P8 M. `

+ l! K3 A$ u- Q7 }5 ~; [& S  x1 t" p3 I; T0 r0 z- C

" h# ?* U* _0 V- A( s
, @' Z7 Y' g- L! |+ v- h" I
* u5 q# S0 Z- F5 {# q0 d$ S9 N! O" [5 g' |% }$ j
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2015-9-4 10:29:21 | 只看该作者
补充说明* k( z$ w) K- N! h6 h
我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下
" `! u  `7 z! @0 H' f(不过疑惑的是,为何单独DSP仿真就没有问题呢?)
8 K& Z: N! ~/ S) ]

* r+ I2 O6 |2 H- d% G6 q8 A" A! {是不是需要在DSP.CFG中进行配置
  k' s0 C4 @) C我现在的配置为
. g% B6 ?* N) A3 S: S; @+ U% w6 Y
2 @( x+ Q1 Z4 v8 k, b2 {" P  d" G/*. S7 o2 z4 A& v* J6 |  b* K
*  ======== Operating System Configuration ========4 w$ o( R% g4 f7 E4 P& k
*/: [6 G( T; s# B/ i( l: {# z
  `( a9 y$ Y8 S9 m% }
/* no rts heap */
& ?0 y5 i0 b, s* l9 Q' ^! \Program.heap = 0;( l! a6 f% t& Q* K
Program.argSize = 100;  /* minimum size */) e7 N6 p+ K4 R+ g/ J+ R
Program.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大
4 z; j# f, B  R; D, x- j& L# x1 U" R: |: t) r% S# R  y
/* create a default heap */
$ d6 c% W- J: ^var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
# Z& c3 F2 M- X( P- y* O  e6 d  ivar heapMemParams = new HeapMem.Params();/ z4 r! B# H/ T. c- r3 p
heapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大
; Y9 G% [" P% S/ X  p% w2 |9 W' E7 i# e- ]/ N
var Memory = xdc.useModule('xdc.runtime.Memory');
* T" w: o* }/ ]5 i6 a* gMemory.defaultHeapInstance = HeapMem.create(heapMemParams);+ w2 P! N5 i  [6 H8 \

2 \. M- r- N; A. `: B; w/* configure System module */
3 A$ R/ u- V: g! Avar SysMin = xdc.useModule('xdc.runtime.SysMin');. }3 G0 E4 H  x) l
SysMin.bufSize = 0x1000;
' Q  M4 c3 W0 p% BSysMin.flushAtExit = false;# X) r5 H& {! x" Y+ e* y$ h

/ U& P! _, K9 _" uvar System = xdc.useModule('xdc.runtime.System');  J  z, E  t$ V' r" v. F# |2 O9 B2 q, g
System.SupportProxy = SysMin;
; C9 _0 i6 ]2 C: y; @( Q
, T9 ^2 k/ g' A. b+ P1 c' k/* configure SysBios to use the lower half of Timer 1 */$ y% N/ [- t6 O' R
var Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');+ x8 p2 J& k/ Z( j6 E5 U
var Clock = xdc.useModule('ti.sysbios.knl.Clock');
3 C2 W1 Y  b( O. V# ^Timer.timerSettings[1].master = true;
- B& t' v8 W3 D5 M5 lTimer.defaultHalf = Timer.Half_LOWER;2 z; c6 T: [6 `8 e
Clock.timerId = 1;
1 P7 N$ P: ?$ k& `$ u# P# ?) E5 w
, d  m' G* l* Z5 L4 v* D0 ]' G, ]8 z6 C2 ?2 }5 K; B, ^% Q& ^
/*
2 K1 i; W, C) [5 M, _( D *  ======== Miscellaneous Configuration ========$ ^# T# Y2 u. U  Q" f
*/
- n2 ~. m5 n7 K: R, }
* R! z( G8 Q" p& w/* set default diags mask */
2 ^! J! T( Z/ E# [! Tvar Diags = xdc.useModule('xdc.runtime.Diags');; [( @8 p, n7 {5 d+ q5 S2 a
var Defaults = xdc.useModule('xdc.runtime.Defaults');2 k% E8 h& x% }% n8 l

: b% \. ?+ l) ^. [/ z) i! yDefaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;) G( t  j7 `, K0 Z# s: Z
Defaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;
0 p" {9 W0 K% K2 Y1 q9 h* I9 BDefaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;
+ r5 n0 r2 y- N) w# Z: K: G% [Defaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */8 r4 Z$ G' Z6 X) y
Defaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */
+ F6 @# b. E! x# H3 K0 oDefaults.common$.diags_STATUS    = Diags.RUNTIME_ON;8 o1 z$ T/ c6 l6 J9 t4 V, U
Defaults.common$.diags_USER1     = Diags.ALWAYS_OFF;
5 U4 }1 _2 V7 [' E% V1 XDefaults.common$.diags_USER2     = Diags.ALWAYS_OFF;& J/ x5 l) U; k: Z& J# j
Defaults.common$.diags_USER3     = Diags.ALWAYS_OFF;
& N5 |8 c1 E6 l/ b, I" JDefaults.common$.diags_USER4     = Diags.ALWAYS_OFF;; d1 T# n- H  e* x/ l- l
Defaults.common$.diags_USER5     = Diags.ALWAYS_OFF;
$ ~# K; k& T5 ~" m! PDefaults.common$.diags_USER6     = Diags.ALWAYS_OFF;
! t9 I" l! T- RDefaults.common$.diags_INFO      = Diags.ALWAYS_OFF;
' x) O3 e# s2 j) j. j, LDefaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;
1 L# x5 f5 U' B% Y9 g
- H) B, J/ O6 t  M/* override diags mask for selected modules */
' Y: y- {2 X. ~' N8 oxdc.useModule('xdc.runtime.Main');
- o9 w* K3 Y$ w( DDiags.setMaskMeta() [1 v( O5 M3 x4 h& N" g5 L* i
    "xdc.runtime.Main",
9 m3 e0 y' W4 E/ y8 L$ _: b; W    Diags.ENTRY | Diags.EXIT | Diags.INFO,! d0 |: b8 h; S; Y# s
    Diags.RUNTIME_ON
! s8 R+ J4 C9 {) p" X- I" Z);
4 S" u. d+ G4 ^: l& Z7 a4 Y( b2 G3 G, `) v
var Registry = xdc.useModule('xdc.runtime.Registry');
9 e4 K1 K) l! IRegistry.common$.diags_ENTRY = Diags.RUNTIME_OFF;
. L  ^7 k* E# _: e' G0 J) x" oRegistry.common$.diags_EXIT  = Diags.RUNTIME_OFF;" O% a7 Y: j, a2 z, K5 I! q. K# h
Registry.common$.diags_INFO  = Diags.RUNTIME_OFF;
8 L* F! T! b# iRegistry.common$.diags_USER1 = Diags.RUNTIME_OFF;
: G; Y) C2 o# f. s( w) V  X0 \% p7 a( }- \  W6 r# f! p
/* create a logger instance */, J* [* l( }8 G% O
var LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');0 ~0 |1 W# M, k- b0 h( S  i
var loggerBufP = new LoggerBuf.Params();
+ a7 z% p1 n( [, {- W( HloggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */
8 u' v6 D: c9 s0 k* ~+ iloggerBufP.bufType = LoggerBuf.BufType_FIXED;$ b: L2 `0 W- o2 ]6 h# A7 \
5 X# |, x. o, {6 x
var appLogger = LoggerBuf.create(loggerBufP);7 S$ K4 c; l4 I  g3 {$ i
appLogger.instance.name = "AppLog_Core1";
) \: o2 O1 L* Q; U0 jDefaults.common$.logger = appLogger;
0 s. l7 q' t3 j2 vMemory.defaultHeapSize = 0x8192;   
* c" w- D8 v: A8 Z. U: r- `Idle.idleFxns[0] = "&LEDStatus";
3 H- n( E. t5 s8 Z, DCache.initSize.l2Size = Cache.L2Size_32K;
0 L. o9 [8 w" C: }
& F& z; s" p. g1 y% H1 W
回复 支持 反对

使用道具 举报

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 */
0 F  H5 o. e7 l& w# d) T, Mvar HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');' X9 a5 @  X& K  ~5 g2 _
var heapMemParams = new HeapMem.Params();
( T( p# R+ y/ Z1 ]2 k6 |- qheapMemParams.size = 0x4000;2 E8 |1 w7 s3 v1 ~+ c' ?3 z8 W

4 {( x5 \3 R8 k/ W7 d& ^' b8 uvar Memory = xdc.useModule('xdc.runtime.Memory');3 ~* F) W8 U% |$ ~0 B" c& m) _/ c
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);% W' N2 w7 N( h" [3 p* r
1 ^. n0 M* R' W0 v
我大约calloc  每次共计大小为5K*16bits,) D2 w8 h* J* K2 [# ~1 S
而默认配置才0x4000、需要改大。
4 k6 s* a& t8 `3 S$ i: i7 G. o% a, f0 }
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
5#
 楼主| 发表于 2015-10-28 16:14:47 | 只看该作者
/* no rts heap */% H2 o9 S" q2 f/ [0 X" r' e
Program.heap = 0;0 r( I5 K/ m, g9 T9 q+ c
Program.argSize = 100;  /* minimum size */
( ~& M) i4 r, f+ [* m2 _" oProgram.stack = 0xF000;                   //我改到F000  也不行
回复 支持 反对

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-12-12 13:19 , Processed in 0.044053 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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