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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2015-9-4 08:33:31 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
创龙工程师你好,我在OMAPL138单独调试DSP程序(使用SYSBIOS)时,在任务中使用calloc函数动态申请内存,用完后free,类似如下结构
5 @7 q" x* x! E; C2 T# t1 @! |  e, N5 C9 ?3 d- j& r) p
    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //256
2 e6 y" s& U3 y3 ?0 X+ V8 x( O
其他程序段。。。。。
4 g0 L; F& o7 W
+ }4 }2 E3 d/ L4 W% I3 A   free(x_d);
& p1 N/ @; @5 R$ e) r
9 q$ t: C& _& r* F1 ]  F% b使用DSP侧单独调试功能,验证动态申请没有问题,
* h. f1 p, ?! I/ {& v0 T" q  C" `6 ]$ i6 u3 u9 C5 U7 w
但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。
2 {9 B+ b/ ?5 x- p+ A/ v

" V' i" P9 B1 \9 r/ K) n" G% a
  K- m, K1 ]  \0 T: t) \- O# V# V
" _/ ^4 [, m3 R8 Q2 j- y7 Y8 @! \/ P9 V0 X" i

$ X+ T: e3 V! D- Z) I% _
6 ?6 ^/ p4 e9 J) v6 y7 e9 C& w# `" R. }2 a
2 o% \' z' W% k9 J/ O' g' K
( N  C% h. E9 G4 j
; }4 Y4 R# p+ G4 k, E3 L. S$ O5 b, ~
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2015-9-4 10:29:21 | 只看该作者
补充说明: H' R+ B% X0 T- Z& {- e1 j6 ~& a
我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下6 d2 X. W0 Q. B2 V( |2 m
(不过疑惑的是,为何单独DSP仿真就没有问题呢?)
5 o9 d: Y4 W$ k9 _% P( [3 i0 x9 N$ O1 t& j

; i3 l. u* t# a1 E是不是需要在DSP.CFG中进行配置
+ P4 B; W" L" I& D我现在的配置为  e1 F5 r* c/ g/ _2 r

: t9 c1 o) v4 t/*7 J; |" i6 e* E8 Z
*  ======== Operating System Configuration ========( [; Q- k+ k) p+ r& o
*/# O. R; {2 I# f6 E9 X9 Q- K
2 V, W; i1 Z' b
/* no rts heap */# S* C4 j. z  v3 U+ J
Program.heap = 0;" x# B; n/ e3 z
Program.argSize = 100;  /* minimum size */
6 ?9 d! N9 y; s( u: i- WProgram.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大& V! }- ], s" t/ k! I
4 |" Z) K  w; t9 Y" i0 L
/* create a default heap */& G( k" N' h( R
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');1 C/ u& m! C6 t! H6 _1 m
var heapMemParams = new HeapMem.Params();
' ^7 G# t; Q- D2 W* h0 a) O% @7 zheapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大
% e3 T: R. e! g# ~5 ^; D6 Y) J7 ]/ g& P% r& m2 k* H3 }4 Q$ B  T8 E
var Memory = xdc.useModule('xdc.runtime.Memory');5 Z3 K' W  e8 G: Y0 Y) j
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);
$ R( i1 l0 n; {0 B, o% c& Q: U, q  l4 W. T6 ?+ z! Q9 ^
/* configure System module */( r" y8 @. Q# e! p; p
var SysMin = xdc.useModule('xdc.runtime.SysMin');
* q& j& U/ Y4 k* q' c/ wSysMin.bufSize = 0x1000;
/ W$ Y+ [% L( A7 W: dSysMin.flushAtExit = false;
/ y& v3 ~( ]4 a) n3 ?/ r
& O5 B  O6 S! K% {; }) B; t6 L% {  f3 Evar System = xdc.useModule('xdc.runtime.System');
/ @) E) b9 ?+ l" {System.SupportProxy = SysMin;; s1 n  S3 ?% a# \8 @  E  p4 O% [6 y
# [* W7 K" r: g2 J( u& [
/* configure SysBios to use the lower half of Timer 1 */
; d. C; C5 S( Svar Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');6 b/ j. X8 X3 t2 @. ]$ B
var Clock = xdc.useModule('ti.sysbios.knl.Clock');
+ g9 C, r0 e8 c3 a/ `Timer.timerSettings[1].master = true;
! @' P! s* h- }: P5 fTimer.defaultHalf = Timer.Half_LOWER;
, \1 M* l. d; n) Q5 lClock.timerId = 1;0 T$ R9 _6 V8 l: u/ F0 e9 m
) x, k- V/ y* L- h/ k4 k% _
: o5 M1 G; A! ~1 a: V$ Z
/*3 `5 f7 u2 U9 ^& s
*  ======== Miscellaneous Configuration ========
% `/ B! j. o$ Q0 k! C$ s3 y! N/ b */0 c% l. q6 N- A

1 ]7 e1 p$ V% S, f$ z9 L/* set default diags mask */
  N, P2 r6 }# B# X- c6 cvar Diags = xdc.useModule('xdc.runtime.Diags');6 j+ |& x6 ~: M5 [% w- `
var Defaults = xdc.useModule('xdc.runtime.Defaults');
. c; j  W- s0 R$ ^$ w/ \( M9 x6 a2 d2 p! R. T
Defaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;
( Q& }$ {) M! @5 lDefaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;) K' j8 z2 A  R4 f* L2 B3 ~+ G, {* f
Defaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;% h8 j' ~# K' B+ Y) B
Defaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */
3 u0 y8 d, f- v5 y9 a6 PDefaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */
( d; W5 I. D# g. b$ PDefaults.common$.diags_STATUS    = Diags.RUNTIME_ON;
  Y( \$ n7 i, A& cDefaults.common$.diags_USER1     = Diags.ALWAYS_OFF;# Q( e: w( ?- k: Z% m5 l  Y
Defaults.common$.diags_USER2     = Diags.ALWAYS_OFF;$ B! w0 g4 |8 r* p
Defaults.common$.diags_USER3     = Diags.ALWAYS_OFF;
% k. D. Z, k# a. T3 X/ r/ yDefaults.common$.diags_USER4     = Diags.ALWAYS_OFF;* k8 O5 |4 V! a  _, C( a1 f' |- b$ d
Defaults.common$.diags_USER5     = Diags.ALWAYS_OFF;
+ i- h' K3 v- w+ _/ ~1 ^$ KDefaults.common$.diags_USER6     = Diags.ALWAYS_OFF;
0 x! Z' i/ K( y7 k$ iDefaults.common$.diags_INFO      = Diags.ALWAYS_OFF;4 x0 Q- W* Y5 Q0 e9 y
Defaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;! I3 Q0 s: T+ k; H5 c/ j+ L# M5 i

, T; b2 ~1 w9 r4 {1 M/* override diags mask for selected modules */+ ~0 R' C; q/ X' ?/ c0 C0 J4 j/ t
xdc.useModule('xdc.runtime.Main');# |% X* y8 p3 q/ I" Q. _& j8 a
Diags.setMaskMeta(
% W$ p- k- k  ?' v: {/ ]! U    "xdc.runtime.Main",0 w; `, `$ x7 y% ]; |/ ], e
    Diags.ENTRY | Diags.EXIT | Diags.INFO,0 q7 T( {  ?' V
    Diags.RUNTIME_ON
3 Y  x6 ?/ T9 p);
! F2 u# W: e9 U+ r  `$ G2 x' Y" X; Q$ t
var Registry = xdc.useModule('xdc.runtime.Registry');
2 y. r& B' K) R" HRegistry.common$.diags_ENTRY = Diags.RUNTIME_OFF;
0 {9 C7 |. S( x: F9 f  GRegistry.common$.diags_EXIT  = Diags.RUNTIME_OFF;% F6 w4 c3 E& U' w: r4 C- G+ }) E+ ~
Registry.common$.diags_INFO  = Diags.RUNTIME_OFF;9 ^/ e* T1 T9 y- _/ p
Registry.common$.diags_USER1 = Diags.RUNTIME_OFF;
' @6 k" p5 a, d. T
! k2 F1 C, X0 q3 [/* create a logger instance *// N, ?# {# v' p$ M
var LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');
; J: f' j( _2 L/ x& \; t' ~var loggerBufP = new LoggerBuf.Params();; N$ ^- x# s0 F7 x2 ]
loggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */
7 x* N1 X# M* A0 x& nloggerBufP.bufType = LoggerBuf.BufType_FIXED;- A9 t# O+ ^  n/ ^4 W! e( k

/ V3 n, y5 x5 z, \2 `var appLogger = LoggerBuf.create(loggerBufP);2 y8 p2 H2 M, F9 m9 w3 M$ U
appLogger.instance.name = "AppLog_Core1";  @- V% J+ u" v- i( Q( A0 O
Defaults.common$.logger = appLogger;
& p; m. |9 t; XMemory.defaultHeapSize = 0x8192;    : X' t0 k, N  k( `  e
Idle.idleFxns[0] = "&LEDStatus";6 V8 X! e6 k; O  C
Cache.initSize.l2Size = Cache.L2Size_32K;( c: e: H1 G$ N- t, S4 {3 [
' t3 h0 w$ |" u$ l1 P
回复 支持 反对

使用道具 举报

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 */( Y, [: m* I5 _' c* h( i
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
( u8 k* u3 l4 ?6 g: nvar heapMemParams = new HeapMem.Params();
8 f7 w" G0 j* |2 l% \! ]: iheapMemParams.size = 0x4000;9 L/ M8 d6 y/ Q' K" D
. D1 J# q9 {/ M4 a3 E6 b
var Memory = xdc.useModule('xdc.runtime.Memory');) E* s7 o$ ~+ ^; L. q' |, N, V
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);' C3 q2 Q) r% j! f8 }) o. X
8 `' Q7 {9 r" E3 A0 P
我大约calloc  每次共计大小为5K*16bits,( L  z/ X3 }8 k' D# P
而默认配置才0x4000、需要改大。
4 e, v$ B4 c3 `6 m( H  `* F8 Q% S( e' m
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
5#
 楼主| 发表于 2015-10-28 16:14:47 | 只看该作者
/* no rts heap */6 Q) M: \2 j6 E3 I; H! [/ ~" ^
Program.heap = 0;% N. x; y& a& N) |1 K/ ]
Program.argSize = 100;  /* minimum size */
% ~$ A' i: K+ n  l0 {$ RProgram.stack = 0xF000;                   //我改到F000  也不行
回复 支持 反对

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-12-10 21:33 , Processed in 0.047823 second(s), 26 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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