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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

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

9 P: x2 d: f- P% p8 N2 b    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //256
( X5 y! D) i4 V. h4 _) m( q5 S3 V0 A
其他程序段。。。。。% p' Q- S# }1 A

; \6 |% M1 n7 U# y3 W   free(x_d);
# Z7 ~; g' g- ]; @- \/ R8 y; r6 G4 D. F, m
使用DSP侧单独调试功能,验证动态申请没有问题,8 ~: P0 m% e! {7 P% y( B1 M# w8 v
9 T5 N+ x/ X, a1 k$ x
但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。
" T3 G7 Y( P9 I8 s% u' o, A: X( t

1 d* p  J! R' B& k- m% t4 @
1 D; Z4 d9 {. T5 c* \
" K; x" C. c. O8 Y* o( E; M+ K5 V/ m9 U3 ~  Q$ I) B5 y3 b% }

2 s5 Q9 R4 h3 j. j/ ^/ b0 K- ?+ a2 I9 C

3 ?3 z$ P6 [+ y: `" H6 ~
( e; F9 P% Y+ _2 Z% A- @. M* q
+ {6 G0 z/ q0 ~" g8 H
7 K: v, {# m1 p, V( \& y/ j8 ^' p" n" S
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2015-9-4 10:29:21 | 只看该作者
补充说明
6 s6 q  X* N. {我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下! \. Z  I5 @2 i" b0 c" W0 k0 I; |. i
(不过疑惑的是,为何单独DSP仿真就没有问题呢?)
, F: E3 {# u7 p
  C2 e6 a9 D$ B3 a; Z
是不是需要在DSP.CFG中进行配置
7 C- p, u* N3 P6 P( J8 e我现在的配置为( j# T3 Y4 l) l* j& i7 e

7 f7 {# G# W" _7 Y5 l' {; F/*
  Z5 ~: t( V/ [  j& X5 Y3 a. R *  ======== Operating System Configuration ========8 n# x- W# J! Z5 W- I/ e! V
*/- S8 {/ b/ D/ a+ [3 t6 L* ]
8 H8 [) [0 E0 Z- G# B3 b
/* no rts heap */4 N  X7 b: J' J% d9 p7 Q" P4 ~! C
Program.heap = 0;
  f- n: K# B* E4 |' {$ Y9 Q* _Program.argSize = 100;  /* minimum size */0 Z2 M' G: a* `! T
Program.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大
  `3 k6 D& `, n& @, |5 G% M2 k
2 E9 l. p4 V5 X) q/* create a default heap */
; Y5 N2 v& x; R( S# m3 Lvar HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
4 c! R# E; T4 n  x# f. @var heapMemParams = new HeapMem.Params();
8 B2 s' Y. }0 q& O2 RheapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大9 F7 v$ L/ A3 C  I
- B# |' W! R( k
var Memory = xdc.useModule('xdc.runtime.Memory');9 s! @" S: f8 d3 j
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);
& y9 I- P# G% v: X" W; U* j9 k0 N% e8 F% R
/* configure System module */
, K; H0 w" x( qvar SysMin = xdc.useModule('xdc.runtime.SysMin');
+ t' L+ t( ^! s! Z3 K  g+ XSysMin.bufSize = 0x1000;
7 G& S: x2 ?* L" m" V, c3 pSysMin.flushAtExit = false;. X" ~$ e6 q8 M% o7 g0 M6 m

" {3 y- ]' H) z. U" lvar System = xdc.useModule('xdc.runtime.System');; |) D5 X9 W# a! B
System.SupportProxy = SysMin;% C* s! ?: U: r5 e% j; a
! ]0 l) F5 b& p) ?0 H
/* configure SysBios to use the lower half of Timer 1 */
/ M; k- Q0 ^5 ^" o) P) Lvar Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');
& g$ \9 f5 j3 W6 u5 ivar Clock = xdc.useModule('ti.sysbios.knl.Clock');. k8 m: @: e& M$ U8 @
Timer.timerSettings[1].master = true;
( M9 H1 y  e! R7 o+ }4 n4 G, X( UTimer.defaultHalf = Timer.Half_LOWER;
7 o. O: o) {/ QClock.timerId = 1;, T/ m3 y9 x8 a9 P6 K* Z# Z
+ Q+ w% w' Q. r6 M  |+ t
# g7 A* O7 {* G$ X2 ]  c
/*
* S2 S3 ^8 R& e8 P) o *  ======== Miscellaneous Configuration ========
* T& K9 d) u  I% p  ^' z */& D! M/ h' j  }1 Y5 q) g# E- h
9 H' P& N# g4 v
/* set default diags mask */
( L" H1 _) {3 u5 m( m" x# h7 C6 Uvar Diags = xdc.useModule('xdc.runtime.Diags');  Z2 T$ o2 R8 T1 z
var Defaults = xdc.useModule('xdc.runtime.Defaults');3 A7 k/ @8 l7 g' h) G  H

( G3 }3 g8 W& D! F+ GDefaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;
/ @1 }" @  M* t5 i3 n* H1 o8 pDefaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;0 t- G& a2 `+ @1 x8 b
Defaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;4 l7 U% b1 W3 }8 ]$ A* w
Defaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */+ O, ^: E8 v' c' a; H/ l
Defaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */
. w( h  q. R3 rDefaults.common$.diags_STATUS    = Diags.RUNTIME_ON;+ E- a8 x/ G& L% |
Defaults.common$.diags_USER1     = Diags.ALWAYS_OFF;' L( {7 v3 G' K5 Q# W( a+ x
Defaults.common$.diags_USER2     = Diags.ALWAYS_OFF;
1 r0 [) x' t/ }4 y7 EDefaults.common$.diags_USER3     = Diags.ALWAYS_OFF;
* o4 D) m* `6 z0 D  t6 D, p0 g, ~+ S& zDefaults.common$.diags_USER4     = Diags.ALWAYS_OFF;9 [; I% q8 d( }* I3 Y: Q
Defaults.common$.diags_USER5     = Diags.ALWAYS_OFF;
% }: a3 n" m* X& ?. O8 n) XDefaults.common$.diags_USER6     = Diags.ALWAYS_OFF;0 }5 S: M& p: h. _
Defaults.common$.diags_INFO      = Diags.ALWAYS_OFF;
+ I. W: v4 m* v) y( xDefaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;
9 I( t0 \2 ^9 M" o% g$ d
. r3 Y+ n  Z5 b7 c/* override diags mask for selected modules */
+ d. y7 L8 I7 ]xdc.useModule('xdc.runtime.Main');
2 m+ F7 p1 u  A, L( X* ]  lDiags.setMaskMeta(. R8 d7 ]# L0 ?! [, V7 J. J
    "xdc.runtime.Main",
: n7 u6 R) Y! N  M9 r5 f    Diags.ENTRY | Diags.EXIT | Diags.INFO," \. B. B" o! J& [8 U  w
    Diags.RUNTIME_ON8 m- G' u" A4 h; W" z
);; Y5 z  I# W6 m8 i& ]

! @. \  m" g! V2 cvar Registry = xdc.useModule('xdc.runtime.Registry');( L1 K  J* c; M# v( u) C# n& }, ]" o
Registry.common$.diags_ENTRY = Diags.RUNTIME_OFF;
5 K0 _/ Y' C8 _Registry.common$.diags_EXIT  = Diags.RUNTIME_OFF;
. u, }8 V5 X( n) B6 x0 W5 R) kRegistry.common$.diags_INFO  = Diags.RUNTIME_OFF;! @8 q# I, R! d' i" y/ ^4 L) X. T+ ~
Registry.common$.diags_USER1 = Diags.RUNTIME_OFF;
9 }" ^. t* b* ^& `3 r- h  p# u0 b3 H1 ~" D% V3 H$ m
/* create a logger instance */
# _0 X: H# v" Lvar LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');0 y* ^9 `2 S% }9 V# ]) i/ ]* P: [& o& t
var loggerBufP = new LoggerBuf.Params();
/ S- U' Y/ J! }, T  P5 \3 K# J; }loggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */
! k# Z% L4 A5 r+ m. @9 ~. gloggerBufP.bufType = LoggerBuf.BufType_FIXED;/ |$ s8 p9 I/ J6 }6 u. a4 `
$ `$ ]9 F9 w! i4 X  K
var appLogger = LoggerBuf.create(loggerBufP);
, o: q4 L6 S& v7 B5 yappLogger.instance.name = "AppLog_Core1";
7 O4 |; ]3 _% Y: JDefaults.common$.logger = appLogger;. z7 ?/ ~5 ~# v: c) X: b$ p
Memory.defaultHeapSize = 0x8192;    ' x( U4 e7 X: }
Idle.idleFxns[0] = "&LEDStatus";
  Z: T+ v$ {5 Q6 ]/ TCache.initSize.l2Size = Cache.L2Size_32K;- v5 [. A8 h& a5 d
$ A6 Z7 y+ c% C. X6 Z1 ^
回复 支持 反对

使用道具 举报

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 v( ~/ m# h) c) l' t3 r, gvar HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');; n7 _3 O4 r# ~* M5 G
var heapMemParams = new HeapMem.Params();0 K& k( T  g6 V5 W
heapMemParams.size = 0x4000;
8 u, x1 ]! s) Q2 [; p+ k, J4 J9 F6 f3 f6 ~% @& ~' O) j
var Memory = xdc.useModule('xdc.runtime.Memory');; n, a) X  I; U
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);
; p: U+ t2 F4 N1 S
" i. G- e. `5 p- x7 T我大约calloc  每次共计大小为5K*16bits,: n8 Y  J  R" h' I4 V5 _
而默认配置才0x4000、需要改大。) M1 I/ V* x$ d( B! ~1 g

+ y0 b' I. S% `" y$ U$ z- A( E
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
5#
 楼主| 发表于 2015-10-28 16:14:47 | 只看该作者
/* no rts heap */$ y, Z& \- Y, A+ p' }+ Q& ]
Program.heap = 0;
. Y" h1 \1 u/ I  i, w  g4 f* k6 _Program.argSize = 100;  /* minimum size */  b0 R5 a: ?) m& F. w' K1 V
Program.stack = 0xF000;                   //我改到F000  也不行
回复 支持 反对

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

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

使用道具 举报

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

本版积分规则


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

GMT+8, 2026-1-11 06:45 , Processed in 0.042290 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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