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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

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

- n7 j) y+ ?# U7 L# ]; ]    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //256
7 w5 ~. n! ^5 L4 j2 Z3 ]
. X; j. F! `% ]& m5 \3 s( B5 j" F8 v3 ~其他程序段。。。。。
/ T4 ]9 r4 h0 `  A7 v& f- w! t# z ! k+ b  C4 i5 G  g4 l
   free(x_d);
: n% T: P+ x+ d
/ m$ i4 W; M( e7 p& E! f使用DSP侧单独调试功能,验证动态申请没有问题,6 Q+ W* }( t9 P2 [( ~9 _8 S* {

5 w9 I2 e% B  y' q% N; p但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。  c0 N: u5 s! {2 T' ~2 {

/ }% f7 u/ W2 @1 O2 a
' y! A% O& f% s8 v* J. D0 A) }  I5 Z
, `) l' d, t0 I' A) ^

, j( w( U+ P( i! ?; t& r7 ^) t1 z" [) T! @/ ?( s$ ]5 H
) q' R% v: c: V
( i7 L8 y0 L9 t- G6 s, u3 A4 a' T

9 ~+ U: e+ i7 H3 H' V' x+ [# |$ J7 A& |1 Q, _6 e
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2015-9-4 10:29:21 | 只看该作者
补充说明: R. h: E! A5 A# x+ U! a* z9 ^5 k
我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下
* v5 d! L" u& }0 D( U(不过疑惑的是,为何单独DSP仿真就没有问题呢?)0 k/ n9 K2 h* o: y
" Q7 f% o* B- I% D; W
是不是需要在DSP.CFG中进行配置/ W" i, ]  v( c3 i/ M
我现在的配置为
5 u- m( ]8 I1 q/ H& c# M7 J
3 g: ^$ X* X" ]% t) [) B& s1 Y* p/*
5 n  r0 U: H# K9 B *  ======== Operating System Configuration ========
1 `% a& T$ x$ F */" D! {1 Y( l$ s) @7 ^# h* e7 l4 b

* |3 e3 k' X) ~3 s/* no rts heap */$ H9 g$ s+ |# c3 x2 d0 T
Program.heap = 0;% M5 C8 K4 @! n; g
Program.argSize = 100;  /* minimum size *// o* T: e& h2 |* H5 u! M  ?1 M5 f
Program.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大
; a: y  v2 }( N2 K0 S% w% k+ X9 _& e
/* create a default heap */8 n4 f  Y3 t! ~0 _! ^. u# M. s
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
5 Z/ T" [; a  r0 K! V/ Uvar heapMemParams = new HeapMem.Params();# `! U7 J9 n" K  y/ t* ?! v
heapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大7 g1 P( a7 w& D
- e2 d- Z4 M6 {' R1 m) Q
var Memory = xdc.useModule('xdc.runtime.Memory');$ N$ |/ Q! q' T/ ?
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);* j0 Z. f# n: b. r

0 e6 ^# u; _4 F1 a1 }/* configure System module */
6 G7 `$ K' E+ }/ _& s3 e0 uvar SysMin = xdc.useModule('xdc.runtime.SysMin');' {4 l/ I6 V; e. ^' t/ y
SysMin.bufSize = 0x1000;$ y" `# x- U, n# f
SysMin.flushAtExit = false;1 B" v8 ~7 s7 l9 e
$ U$ {) u3 W3 a5 c$ _, C" H4 S
var System = xdc.useModule('xdc.runtime.System');) @1 W+ _% X( X+ M5 G5 d6 V
System.SupportProxy = SysMin;* i1 _: X0 P  R* }  _7 W

. w. g5 N" G2 I; z$ ?/* configure SysBios to use the lower half of Timer 1 */; j+ ]3 V4 D0 J8 C/ q, I
var Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');5 `' e. Y1 G' H" Z, s
var Clock = xdc.useModule('ti.sysbios.knl.Clock');( }* C+ f1 o2 P2 k6 D2 ~# I- W) T; F" `
Timer.timerSettings[1].master = true;: h% x0 \- j% p0 V. t' ?4 r
Timer.defaultHalf = Timer.Half_LOWER;
/ _7 q0 l! @& AClock.timerId = 1;% x4 b0 s: w) {4 X2 e6 U
# X1 X6 L& o& T  {2 G+ ?. U9 a+ S

6 B, n- M9 H" I6 W+ M/*- A8 b+ @% n0 S9 ]. s
*  ======== Miscellaneous Configuration ========' @7 S! J9 x0 V) q9 W  W5 ?# f2 E
*/
* m! F8 M$ T  f- \& G
4 @1 H; C( \5 G/* set default diags mask */% P7 C& Z2 ?5 ~  v0 r
var Diags = xdc.useModule('xdc.runtime.Diags');
$ k0 @1 g  c5 r2 o5 X# ?8 m( g4 ]var Defaults = xdc.useModule('xdc.runtime.Defaults');! K' S0 T  G+ Y4 I. y, v9 J
2 ~+ l7 \- ]3 j
Defaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;
% o- {: N+ ]$ w6 j: Y9 I' FDefaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;  w' J0 J6 D% F# Z/ m
Defaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;
2 X5 L- l5 \  ~$ ?9 Y6 h/ rDefaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */
1 X. ]+ U) |& h3 @+ L3 cDefaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */
; D4 m+ X' _. v2 DDefaults.common$.diags_STATUS    = Diags.RUNTIME_ON;7 A3 v/ h# u" E$ |& N2 E; f
Defaults.common$.diags_USER1     = Diags.ALWAYS_OFF;/ E* e% K" @! d7 e# H+ Q+ M7 |, [
Defaults.common$.diags_USER2     = Diags.ALWAYS_OFF;- l, v9 S; E% D/ I7 r
Defaults.common$.diags_USER3     = Diags.ALWAYS_OFF;
# K9 U6 S* D; s) L+ @Defaults.common$.diags_USER4     = Diags.ALWAYS_OFF;1 G2 p. J7 T4 ^4 l; t* X# v# E' H
Defaults.common$.diags_USER5     = Diags.ALWAYS_OFF;
! m: v* h- V% H0 m3 m9 LDefaults.common$.diags_USER6     = Diags.ALWAYS_OFF;
6 Y7 ]7 k" b. F3 M- G3 f4 ~- hDefaults.common$.diags_INFO      = Diags.ALWAYS_OFF;) m7 n8 z$ @% ]; i& X/ X
Defaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;4 X- M1 `9 N1 H6 G& q2 J. d
8 e, y. k' b. ^# S9 G; O- O
/* override diags mask for selected modules */1 w( {0 t' d" z( b+ ^! |
xdc.useModule('xdc.runtime.Main');! J& B# ~5 {3 P( W+ q' F
Diags.setMaskMeta(1 J  h& b$ h+ ?9 y& S
    "xdc.runtime.Main"," ]6 j3 p# b! t! z6 x, U
    Diags.ENTRY | Diags.EXIT | Diags.INFO,
5 i& ?( V2 q6 v. `    Diags.RUNTIME_ON
* e! v2 j7 d* k0 R0 r$ b);& H: |: O, O) c( q

. l! y8 K4 w9 {5 N8 _6 p' t" D1 H6 V/ m. Kvar Registry = xdc.useModule('xdc.runtime.Registry');+ w& f; a/ s  p; a
Registry.common$.diags_ENTRY = Diags.RUNTIME_OFF;- I: {( P. Q* F7 j- k/ A* E
Registry.common$.diags_EXIT  = Diags.RUNTIME_OFF;
9 d# M/ Y) C' a; Z; JRegistry.common$.diags_INFO  = Diags.RUNTIME_OFF;
  q8 I3 ^$ V! R7 J$ b9 _7 DRegistry.common$.diags_USER1 = Diags.RUNTIME_OFF;
" L$ C2 H- ]( ]/ K. d
  m/ r$ C' M" n+ ^/ @/* create a logger instance */* i7 s1 }; `  k4 u# h' D2 l
var LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');
+ H1 M$ ?% ^7 s. C9 {3 V/ Bvar loggerBufP = new LoggerBuf.Params();8 D& R' Z. s' m) ^6 i; x
loggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */6 j. o8 U) x; L0 o( L* g
loggerBufP.bufType = LoggerBuf.BufType_FIXED;; v' l. `1 `3 y/ w

; d( H  X8 N: ~+ vvar appLogger = LoggerBuf.create(loggerBufP);, S/ Q( Q* v& f5 j! Y% F
appLogger.instance.name = "AppLog_Core1";; S  H* f+ z/ n6 p3 ?0 O  s  \; o
Defaults.common$.logger = appLogger;9 b- S% x( Z6 b5 r$ |
Memory.defaultHeapSize = 0x8192;   
, ~# M, s# ^% X6 hIdle.idleFxns[0] = "&LEDStatus";8 R& j9 y( U" @; X
Cache.initSize.l2Size = Cache.L2Size_32K;- _$ e" [+ @; |9 K# ^

9 z) ?' E+ ^. R# x. ~
回复 支持 反对

使用道具 举报

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 _1 |+ h# z9 T8 W
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');5 Z3 R1 ^+ u9 X8 e8 F" z
var heapMemParams = new HeapMem.Params();
& P* L; [! p& O7 [. NheapMemParams.size = 0x4000;6 {1 ?* |9 `" z
" d- F7 x5 D! z1 _' j
var Memory = xdc.useModule('xdc.runtime.Memory');
  c1 L) p! \8 Y" ?- ]Memory.defaultHeapInstance = HeapMem.create(heapMemParams);
. [) @; s* m" \
8 O7 w* J4 D1 m0 ~% A) Q* p我大约calloc  每次共计大小为5K*16bits,& q; h6 g. x' c7 `8 E' v2 I
而默认配置才0x4000、需要改大。+ R6 S. _5 }4 U

/ o" b* |" N$ N$ b9 R
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
5#
 楼主| 发表于 2015-10-28 16:14:47 | 只看该作者
/* no rts heap */
2 C0 {# e% T  m9 B' A) iProgram.heap = 0;
# `% E$ u5 h, j( A7 A* K, mProgram.argSize = 100;  /* minimum size */$ [" ?& U% o0 D, |+ s' ?0 ^  i0 V
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 05:29 , Processed in 0.040165 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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