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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

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

! R) U' j2 z- C/ L( V, H    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //2561 R# S* ^( g: h/ i
, d3 e. h7 N, R/ {! d& Y
其他程序段。。。。。' l' D# F$ K( _1 {6 W. t2 \5 y0 @

9 t5 z  c5 R- D7 [0 o* [- g   free(x_d);+ E$ S  Z, h1 L3 v1 r! L  @
# L+ r( U: l3 h% j
使用DSP侧单独调试功能,验证动态申请没有问题,' k# Q6 P2 q, l3 H1 ?3 b

; M; a2 |/ m+ t) ~+ t但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。2 d. ^- E3 e# O5 x
* b5 \/ z2 C+ w" |% K  O. }1 a
# F8 V/ m3 w# w* \
% M! H2 M/ n1 t

& [' ~. Q& B3 C3 \* j$ Y( ~- P  F2 h% T8 i. o

' i3 X, t$ Z4 I# n" Y  u$ ?/ ?8 U: Z0 c) d8 O- Y

) b' U3 `5 l- z4 Y/ K2 d8 V+ S  U5 B
6 m9 _: e+ F6 E0 L" s! \- E7 p/ \! t" J! H
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2015-9-4 10:29:21 | 只看该作者
补充说明
2 X6 I$ I8 i0 O0 y# t8 x" {我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下
9 Y9 t7 r) }2 H1 P- |0 y" s# A(不过疑惑的是,为何单独DSP仿真就没有问题呢?)
; j4 ^% H4 w5 e# B, x& c* a
6 s" ]4 [3 d+ Q( O% w1 c: V6 e
是不是需要在DSP.CFG中进行配置! f2 W5 |* @0 O9 G
我现在的配置为
( t% K$ }$ v6 X+ o! Z: C# Q' M! c+ j" P# Y  _7 @  B; d
/*8 `3 g2 x0 ?+ A! m$ Z# w3 R- b
*  ======== Operating System Configuration ========
: O5 E- u2 s( ]& _; P2 B- N) y */; f# r) o5 T) G3 p$ D6 M2 v
; _: D; @% }1 `6 f( ?# Z
/* no rts heap */: I- W9 v; a  p: }/ k1 r  t
Program.heap = 0;
: d+ A) N2 _2 M( fProgram.argSize = 100;  /* minimum size */; e( a. U8 A9 J3 R1 {3 u. M* X
Program.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大3 G7 R6 t$ H2 t+ A1 f  C/ q
: ^$ o% x2 _6 P
/* create a default heap */
5 r7 Z# g. G* j$ p' s4 X6 bvar HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
( {+ H0 J0 H9 e+ I( S, evar heapMemParams = new HeapMem.Params();
2 i$ p0 ]0 V  I3 {7 Y( f5 PheapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大' y; X+ I, ~; b) v! g* T' [

4 B5 _3 Q$ @; w0 g4 k- v8 {6 z! Y3 F# c
var Memory = xdc.useModule('xdc.runtime.Memory');! s2 i$ ^+ D, Y, t$ [' x4 Q8 V6 U
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);) W2 o5 |* g5 A) \( h2 O- Q
/ y8 a" E& ]# D; ^% j' Q
/* configure System module */
- R' f& ^' \6 o: w& t, zvar SysMin = xdc.useModule('xdc.runtime.SysMin');
( G6 K, x7 S. D- i3 K3 O1 ]SysMin.bufSize = 0x1000;
$ D2 o* c# I" }/ `6 N4 `) ?9 ESysMin.flushAtExit = false;
: r0 D1 P" z, @* m% y3 T9 O) F3 G. G# a2 x
var System = xdc.useModule('xdc.runtime.System');  V' q* S& H% \1 I
System.SupportProxy = SysMin;! w& {- W) u1 T' L% @

; l0 ?! g9 c5 P5 s9 W7 h' n" N/* configure SysBios to use the lower half of Timer 1 */
7 U* ^3 ?9 K3 V" N* Q- zvar Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');% s. B# L* G5 a( F
var Clock = xdc.useModule('ti.sysbios.knl.Clock');5 v  n* n% F) u3 Q' i
Timer.timerSettings[1].master = true;
! v$ f" [; ^3 p2 U) H( n. U9 q5 YTimer.defaultHalf = Timer.Half_LOWER;
+ a% \( Z) l  O4 i( {3 gClock.timerId = 1;  W8 t" f, y' S% y
6 m6 x) ~7 `6 T8 N$ C4 S' I

6 _3 {2 e& D/ L" B/*
8 b+ @1 K4 U0 e2 ]' Q: F2 Z *  ======== Miscellaneous Configuration ========
( _! g( `6 G5 r$ y6 F */+ U+ [) Z' c9 U  }. `( e2 y
" d$ r2 |0 e( o5 W4 X/ J
/* set default diags mask */
& i8 f( O: G! r- mvar Diags = xdc.useModule('xdc.runtime.Diags');
! i1 }- g1 a; a( i+ s+ @1 m0 Bvar Defaults = xdc.useModule('xdc.runtime.Defaults');2 T% t/ Z& Y( ]( s6 _% E/ V5 e

+ I. n( H- h" `9 _0 `+ U! v7 }Defaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;! q6 V3 K4 u6 A
Defaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;
3 ]* g+ ^+ I% b1 w# V- p* dDefaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;
* S8 z% s7 b8 A& {& Q* |Defaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */4 |" u: w& B( ]0 S% e
Defaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */, H+ E/ {; F4 |, @5 c% b
Defaults.common$.diags_STATUS    = Diags.RUNTIME_ON;
: P3 i5 P0 K. e' xDefaults.common$.diags_USER1     = Diags.ALWAYS_OFF;* r7 V% n* t+ O6 \. W# q
Defaults.common$.diags_USER2     = Diags.ALWAYS_OFF;
9 N7 g# }& y$ p+ z: @  t' GDefaults.common$.diags_USER3     = Diags.ALWAYS_OFF;
, b- Q% F6 R3 F9 [; qDefaults.common$.diags_USER4     = Diags.ALWAYS_OFF;$ U+ m& d8 T2 ]6 a: u
Defaults.common$.diags_USER5     = Diags.ALWAYS_OFF;4 \: h$ K4 {  h& M7 K/ f) @
Defaults.common$.diags_USER6     = Diags.ALWAYS_OFF;
9 c. K. ^& h$ f3 Z, VDefaults.common$.diags_INFO      = Diags.ALWAYS_OFF;
' Z+ F5 i2 x' h: m6 c) y  vDefaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;
/ F% F" U' A) e7 B! ~8 F1 w
' G6 h' X7 ?9 E6 M/ w/* override diags mask for selected modules */
& W& [6 ~# P1 r0 v: Q/ ]xdc.useModule('xdc.runtime.Main');4 L- r. S2 C4 k2 m3 }
Diags.setMaskMeta(& t  ]9 y" V; N
    "xdc.runtime.Main",' T; ^( b1 r. G- t
    Diags.ENTRY | Diags.EXIT | Diags.INFO,
6 w: a4 b8 \. f# F3 X* o; O    Diags.RUNTIME_ON6 v0 c0 Z5 W: r. [5 l$ B" W
);
4 o+ H. F2 H7 ~. J
1 {" V- K* w! F2 g7 w2 }$ \" fvar Registry = xdc.useModule('xdc.runtime.Registry');
( o( c! x! K! U" p9 l. Y$ KRegistry.common$.diags_ENTRY = Diags.RUNTIME_OFF;/ g7 W2 K1 ^$ F6 M# `8 [
Registry.common$.diags_EXIT  = Diags.RUNTIME_OFF;
) z( s1 x  w6 B8 {) KRegistry.common$.diags_INFO  = Diags.RUNTIME_OFF;2 Z" K# M9 q7 a* b, `, N$ ^
Registry.common$.diags_USER1 = Diags.RUNTIME_OFF;5 d' ^$ L# D1 R) R/ w3 J; p2 D. F9 b
4 }* u7 a; ^& P$ P
/* create a logger instance */% B' E6 A4 a; E, M/ z/ S
var LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');0 w1 @0 m! U" \+ x4 C# w0 t
var loggerBufP = new LoggerBuf.Params();
8 X' {; y/ }0 A3 qloggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */% A0 E3 u: q5 Y( R
loggerBufP.bufType = LoggerBuf.BufType_FIXED;# I6 M2 U2 k% e  U: E0 g/ q

- a8 s# V! Z2 x. g0 p7 Zvar appLogger = LoggerBuf.create(loggerBufP);) I5 R1 s3 r4 f. A% W
appLogger.instance.name = "AppLog_Core1";
/ v6 b( q9 t. _! s  A4 VDefaults.common$.logger = appLogger;
- C  F, k' ]2 B" f* ]/ ^' |0 b" v, j3 VMemory.defaultHeapSize = 0x8192;   
' v! n$ R) a4 R+ [& XIdle.idleFxns[0] = "&LEDStatus";
. k: B+ D. U5 u# `8 a$ KCache.initSize.l2Size = Cache.L2Size_32K;; c. H; l% }# j8 y! i4 v4 W

$ S: d4 e8 a% b% F  @
回复 支持 反对

使用道具 举报

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 */
) F5 S; t3 g( Z& _% f- e3 Q$ Fvar HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
8 x' r' B- b! H& D% ?; \' {$ k7 {var heapMemParams = new HeapMem.Params();
9 G$ ]6 b: m- [2 BheapMemParams.size = 0x4000;8 s# o/ W. K% s( c2 v: z* N; }

6 }! c) \$ G  f/ S% `! [. Xvar Memory = xdc.useModule('xdc.runtime.Memory');, y& w" x" Y* M5 f. }3 @/ I4 r
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);: Y- p# v, K. e: L$ j- r6 s9 h

( }; {* c$ u6 ?; ?# K: n3 V) n我大约calloc  每次共计大小为5K*16bits,- D% R7 B$ {6 S! a8 A  P
而默认配置才0x4000、需要改大。* l* v/ D& {: i9 W& Z. c
6 Q4 t  E) D2 o2 r1 g9 {
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
5#
 楼主| 发表于 2015-10-28 16:14:47 | 只看该作者
/* no rts heap */" i" }# v3 I! s2 P$ ?- T" Y
Program.heap = 0;
( Q) ?" Y9 O: FProgram.argSize = 100;  /* minimum size */
& A7 Q2 C2 {) _0 Y- a' n1 qProgram.stack = 0xF000;                   //我改到F000  也不行
回复 支持 反对

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-12-13 19:18 , Processed in 0.040939 second(s), 23 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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