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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2015-9-4 08:33:31 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
创龙工程师你好,我在OMAPL138单独调试DSP程序(使用SYSBIOS)时,在任务中使用calloc函数动态申请内存,用完后free,类似如下结构
/ m. }, J0 H: f+ s  s" ?8 H3 o' y5 B% o% K$ O
    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //256' i* Z3 A5 x1 D" a3 Y. S: P2 g

, g" t. c% |2 \其他程序段。。。。。& q+ d; [8 `2 \$ ?  L  n
+ v* u3 V9 T8 Y/ P% b1 i
   free(x_d);9 g" v" @" v2 p; Y( b; _8 ~% N

5 H! K1 _1 P+ H( e- R使用DSP侧单独调试功能,验证动态申请没有问题,
# R- [; l3 ^4 J/ [2 D; B& u: \2 W1 L$ i4 T1 K+ e
但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。2 X# H/ d. T/ a' V. d, p* L
: s  K* v1 T, S- J5 d
( N3 |: w' Q% c$ j0 n
. d1 f. O, b4 \: L( K% D& F7 _

4 r1 s; \, s1 o1 a" u4 m/ O' ^/ {1 y! D# Y8 O' K' U1 B! }' K
# `! u, ]& f; d  }* x
! F+ K% L$ W- ?% q/ k& m

+ o- p5 k+ R/ O. i/ @( ]; {) U, c) n+ J; O, W

# p: [" Z/ G, L1 P
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2015-9-4 10:29:21 | 只看该作者
补充说明
6 N' q+ |8 o$ @我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下' {8 R/ \/ _) k4 j% ]# o
(不过疑惑的是,为何单独DSP仿真就没有问题呢?)" ^! j9 L, i4 t

0 C# o4 `$ H$ O  ^4 R是不是需要在DSP.CFG中进行配置
3 A# `: M5 p6 n2 X) a( X我现在的配置为9 y7 F* d: \& m4 s
+ b8 [% Q) h- ?. @
/*3 ]: x5 N) C7 R/ @+ k9 P2 P
*  ======== Operating System Configuration ========  [- w$ H' A0 v( x, \  m: ?/ r' H
*/
4 ~6 B$ N2 Y1 ?2 ~7 g6 D5 n
! [3 }1 W  K7 z2 I/* no rts heap */
! W/ D" t: u0 SProgram.heap = 0;
) B4 p& I7 S9 [* Z+ Y& sProgram.argSize = 100;  /* minimum size */* h; M+ n( Z8 P6 {
Program.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大
' b0 H* [' r, i( k
% ^8 M* Z5 c5 j" U$ w0 v/* create a default heap */7 d6 c, `  v1 E* ]4 ?' g( l- u3 C
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');$ T' o; c; P& W
var heapMemParams = new HeapMem.Params();. P( S2 J4 l/ v7 a. y4 c
heapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大
( N8 k4 ^7 U1 k
, A- A- d% j' @
var Memory = xdc.useModule('xdc.runtime.Memory');8 b! K7 @" S& ]' }* u6 Y7 j! u
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);# Y5 Z/ x8 B3 P6 l8 R9 w. j- V
4 E4 v! Q  b8 D& \! B" o: g$ F2 ^
/* configure System module */
' {8 s/ h" B" Wvar SysMin = xdc.useModule('xdc.runtime.SysMin');
5 G' w% p4 @. Y/ a. N% {$ U/ i. @SysMin.bufSize = 0x1000;
) w8 `2 F0 O" V8 b* TSysMin.flushAtExit = false;
% y! S' q3 x$ P, J1 V$ ]
! h& b3 [. t2 E$ I0 l5 z8 @# r3 Dvar System = xdc.useModule('xdc.runtime.System');
6 ]0 p# Y' o' v2 s; g& x/ [System.SupportProxy = SysMin;3 ], ]% Y" E" R* _* o3 [2 y' G

# Z* M/ T2 N+ E8 K/* configure SysBios to use the lower half of Timer 1 */
" g( R) X* o, N" R- Rvar Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');
7 Y+ k! g7 O5 V" @: M) P- Svar Clock = xdc.useModule('ti.sysbios.knl.Clock');
) X, I, a' ~5 {" a6 K! L- u  MTimer.timerSettings[1].master = true;
, s& K- }& a2 W6 T3 tTimer.defaultHalf = Timer.Half_LOWER;) J' r( i: m+ c: t! Y- Y: v
Clock.timerId = 1;, `  P0 d4 Z( g. a5 O# f% _

9 L3 H* J" l; ?  o' @% {1 t  W4 D$ M6 k
/*
  f! t3 J1 W7 W' h: E% x *  ======== Miscellaneous Configuration ========
1 h( N& z- o! x5 `8 ?( M7 g */3 R0 l( ]* w  G. V3 a1 p

" h  F& x: V" K/* set default diags mask */
& I9 s+ J+ w; w0 rvar Diags = xdc.useModule('xdc.runtime.Diags');; |/ j0 C8 C' h( |
var Defaults = xdc.useModule('xdc.runtime.Defaults');
! s$ Z2 r6 f' C8 g% H2 K4 D& F7 \3 P8 s3 ^2 m; S" S) N8 g
Defaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;' J8 E6 b8 t; {9 I* K7 e
Defaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;
, ^2 r9 G/ G* h, c. o8 dDefaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;! O$ ~" `7 P! {4 F
Defaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */4 L* `* [# f" a7 i- i
Defaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */9 [3 C. T4 g' e& e& o& f  h
Defaults.common$.diags_STATUS    = Diags.RUNTIME_ON;
  K/ K0 D9 F0 N2 w2 lDefaults.common$.diags_USER1     = Diags.ALWAYS_OFF;0 b* h. Q' e8 C; M5 s
Defaults.common$.diags_USER2     = Diags.ALWAYS_OFF;6 P( f% x* d$ L0 a% r2 i
Defaults.common$.diags_USER3     = Diags.ALWAYS_OFF;1 f( O7 C+ P3 |, N
Defaults.common$.diags_USER4     = Diags.ALWAYS_OFF;" Z. H9 Z, R& _! _3 o( }& f! q, q
Defaults.common$.diags_USER5     = Diags.ALWAYS_OFF;7 Y, L$ ?. [# [1 C( Q6 y
Defaults.common$.diags_USER6     = Diags.ALWAYS_OFF;6 U' r. `  p2 ?( W
Defaults.common$.diags_INFO      = Diags.ALWAYS_OFF;
* C8 a' H" D$ ^1 b( q8 wDefaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;
# H. v2 I5 P$ O1 S* ?3 N- Y
0 D8 L7 t% o; R3 p/* override diags mask for selected modules */
" M0 V; M: }/ G7 v& ^8 Rxdc.useModule('xdc.runtime.Main');
+ C1 ~/ N* W; CDiags.setMaskMeta(
/ z- i. R1 O$ P; P% X) S6 X5 v    "xdc.runtime.Main",: X  ^" [! y$ y6 u
    Diags.ENTRY | Diags.EXIT | Diags.INFO,
( D+ x0 J/ d( e! f    Diags.RUNTIME_ON. B9 H8 {" H. k. T+ Y. F
);5 U. z3 j! I! }* ?- L2 i0 t

1 {! G4 o/ E& ~+ L$ ]; p4 b1 @var Registry = xdc.useModule('xdc.runtime.Registry');
. \) u: t6 {1 R; e) I' r4 rRegistry.common$.diags_ENTRY = Diags.RUNTIME_OFF;* S6 w1 I9 O! ]% n8 o
Registry.common$.diags_EXIT  = Diags.RUNTIME_OFF;
, B: D. M! H- `6 O3 R6 ~( WRegistry.common$.diags_INFO  = Diags.RUNTIME_OFF;
, f6 f, s; o- n; tRegistry.common$.diags_USER1 = Diags.RUNTIME_OFF;+ b9 R* h9 X* b) w; @

6 x9 Q2 ?$ l4 F' f% o/* create a logger instance */  \: \: U" ^5 W
var LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');' ?: i: {# F. W) S( m
var loggerBufP = new LoggerBuf.Params();
  w  D3 F8 T5 a" g$ mloggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */
) _8 }, ]2 B! G  C# @" I" tloggerBufP.bufType = LoggerBuf.BufType_FIXED;
# L5 e3 c: s3 b* p6 E* D% ~
! M) Y: A2 a$ o" Evar appLogger = LoggerBuf.create(loggerBufP);
* W1 M  g1 D1 Q; H, V' GappLogger.instance.name = "AppLog_Core1";/ V$ p( a7 n+ e* @8 s* P
Defaults.common$.logger = appLogger;3 }. b, }" V+ _& ~
Memory.defaultHeapSize = 0x8192;   
* B6 O7 ?& B/ C6 v! gIdle.idleFxns[0] = "&LEDStatus";
5 l: U3 [. Z+ r/ c1 ZCache.initSize.l2Size = Cache.L2Size_32K;/ W4 O1 z$ Z5 h; x  N- P+ I

: b# O6 m: M, g% J( [5 }
回复 支持 反对

使用道具 举报

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 */
6 t8 Z3 R2 ?% I5 ~- p- evar HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
, v, Y& e7 K3 D- `- Z: hvar heapMemParams = new HeapMem.Params();% Y8 k$ k( c3 V; E  X" C. q
heapMemParams.size = 0x4000;
! ?9 `. P( @* V7 ?1 p! v) \( e
' _& _# R, Y' avar Memory = xdc.useModule('xdc.runtime.Memory');- ~+ n$ P8 P/ d5 q; K
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);+ K# T; K, H) g& g
2 w5 H) Q+ G7 N2 D2 J3 \# B
我大约calloc  每次共计大小为5K*16bits,7 u- L' t& d  g9 S3 J- U
而默认配置才0x4000、需要改大。
" F1 x6 }4 F2 }- J6 l1 ~. F( Q! c% |' l' |( a
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
5#
 楼主| 发表于 2015-10-28 16:14:47 | 只看该作者
/* no rts heap */( L- f. }) f  k! n. Z& V- T
Program.heap = 0;
/ k: N- `# x! X( HProgram.argSize = 100;  /* minimum size */+ O# r8 C- H" K4 @7 O2 N, X
Program.stack = 0xF000;                   //我改到F000  也不行
回复 支持 反对

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-11-29 11:58 , Processed in 0.040977 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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