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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

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

0 X" z& }2 c. J& b$ m( R    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //2568 {' n' s4 X) C3 K5 v
* s9 I( _" L* V; w! Y" H- e8 g
其他程序段。。。。。
1 t" n6 }# l' Y! Y4 @3 o 6 a. `' p9 E% h, R( ~
   free(x_d);  R  s0 |8 ~% t

$ L: ]$ w  }, ]7 J5 a0 b使用DSP侧单独调试功能,验证动态申请没有问题,/ G* b4 U) H2 ?' M1 p. R

( D1 S9 t4 A9 i5 O0 w/ @* t但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。
. a  g; H* g5 E/ g" y

0 e' M' n9 Y9 b$ t, q& D' L; a" R& v' F- G; }2 B
9 e! j2 k1 M: p7 X/ N
8 Y, K; e* R% Q  g$ j( g: H
' h! f% H6 u& x8 q7 ]

+ e" e9 N3 j" k# [8 r: d5 r9 @+ l3 u& E1 G7 u
) W( ^3 n2 W" L- j

) D6 s3 d8 i1 y( F; `6 [7 _' Q1 v; g( C- Q- q9 @
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2015-9-4 10:29:21 | 只看该作者
补充说明
0 m# ~6 ]7 _' G我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下, e3 K! I5 w7 F( V1 \
(不过疑惑的是,为何单独DSP仿真就没有问题呢?)1 g& P/ ^+ s/ ^" X0 j

$ Z6 r4 m% _# C, F5 N! k是不是需要在DSP.CFG中进行配置' V; {1 ?9 k6 B' e3 t1 J3 S& s
我现在的配置为: a% D$ u3 D) x3 m

4 x- U6 Q1 o, e& H& ?8 R  ]/*% y, J& |6 O& Q1 [: q; K
*  ======== Operating System Configuration ========
1 z) B, k6 G* G# A1 X; E- L */- y; S& F$ U" k; j0 Y  p

/ R( l2 D. {6 @/* no rts heap */
8 r" n0 j3 \1 MProgram.heap = 0;
- t7 D  d) N. t7 S: s1 [0 ?Program.argSize = 100;  /* minimum size */
, t' f- g; y1 u" o! n$ ]# aProgram.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大
! z3 X; Y: I* j+ v/ G, a1 J' d
) I8 B- u, C' f! e  ?2 ^' b7 l/* create a default heap */9 C% Q+ r1 j+ m; R" ?( h0 ]$ j
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
( Q) E9 |4 z3 z+ ivar heapMemParams = new HeapMem.Params();
4 i& {/ c. D$ dheapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大
" ~$ [' c* K! m7 M4 \4 z# y
$ L( m6 N2 l$ D" P$ W& n- L7 X
var Memory = xdc.useModule('xdc.runtime.Memory');
. l" t( L, \& ]* C, b! }3 b  XMemory.defaultHeapInstance = HeapMem.create(heapMemParams);* [9 j9 A& c4 T  C# i2 ?% f
3 o, |& p9 a; o# ~8 \
/* configure System module */
+ R" f3 S/ j# H3 j0 ]3 s2 o' b2 E8 Zvar SysMin = xdc.useModule('xdc.runtime.SysMin');! X5 h+ {3 [+ Z! \& ?0 T3 t
SysMin.bufSize = 0x1000;
9 x+ a4 Y. n" B5 m- n0 J( O/ N9 h$ VSysMin.flushAtExit = false;  l7 n* Z0 ]4 ^7 r4 ?- I# b& I
" i6 z$ E; q5 w9 m* }* U/ J' H/ m/ H
var System = xdc.useModule('xdc.runtime.System');6 ?3 K5 N7 N# i, T( f4 S& T
System.SupportProxy = SysMin;
: q6 n" _2 w/ {# H# W$ a' }6 |, O8 R% z8 W
/* configure SysBios to use the lower half of Timer 1 */
# m' S# G. p! c( ~, Bvar Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');0 ]0 }5 J& H; h8 |
var Clock = xdc.useModule('ti.sysbios.knl.Clock');
! C7 n2 _. R, Y. Y+ s' VTimer.timerSettings[1].master = true;& j: N2 t( q9 t! }% n  m
Timer.defaultHalf = Timer.Half_LOWER;; d! y' p5 v" J2 f$ m4 ^. g
Clock.timerId = 1;
5 F- T1 i' {* Y/ Z8 T
1 O" T. j/ p9 K' E/ B$ ?4 l. o' Z# l" T+ H1 t& i
/*8 B0 e- u, i( n2 b! W$ j
*  ======== Miscellaneous Configuration ========- L3 t: F, q% C% S5 t3 C
*/% K5 ]; X  D0 e9 L+ u$ g3 M
. x: g9 R! W# ?& ^8 I& e; c
/* set default diags mask */
' U: z. X! H% d4 m% c( {var Diags = xdc.useModule('xdc.runtime.Diags');
" z% R2 _! E6 f4 J# ]var Defaults = xdc.useModule('xdc.runtime.Defaults');
$ v5 H& O6 \! N: R# x
- F% X/ u7 |) d, y% @0 C3 MDefaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;& c$ m7 X# V" f
Defaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;
9 _  C: A* U5 z3 W8 S. wDefaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;
; h# a2 F) L. |1 ]# x4 lDefaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */6 P: `! e2 H4 a* J- ?5 s! q
Defaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */
( k# B/ @- \# |* P6 }Defaults.common$.diags_STATUS    = Diags.RUNTIME_ON;  ~1 V$ ~0 |5 m7 z+ X8 Z
Defaults.common$.diags_USER1     = Diags.ALWAYS_OFF;# i7 G& Q% N+ O
Defaults.common$.diags_USER2     = Diags.ALWAYS_OFF;
- W3 M' b, d5 B/ o& wDefaults.common$.diags_USER3     = Diags.ALWAYS_OFF;  x4 }! }9 [' P$ R; U
Defaults.common$.diags_USER4     = Diags.ALWAYS_OFF;  r5 p. ]0 s( A; G  ?( _7 h- o
Defaults.common$.diags_USER5     = Diags.ALWAYS_OFF;4 P: K5 t6 }: i: Z6 l/ J
Defaults.common$.diags_USER6     = Diags.ALWAYS_OFF;
7 D. ]7 m2 D1 o( kDefaults.common$.diags_INFO      = Diags.ALWAYS_OFF;* \# }+ H0 j. a' K
Defaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;" q1 D% F5 w0 J7 t

! y' a* Z' \+ R8 G/* override diags mask for selected modules */
. g1 i$ x! ~2 G9 b; N, o* W! Rxdc.useModule('xdc.runtime.Main');; P  ]7 p$ Q0 @2 Q. t
Diags.setMaskMeta(
, s3 p) E& w+ K, }) j$ f& _7 N6 g    "xdc.runtime.Main",
0 i$ B, `1 S4 r3 ?. c6 R    Diags.ENTRY | Diags.EXIT | Diags.INFO,
8 H( y/ _9 z; e2 Z2 x    Diags.RUNTIME_ON, r# T* c0 F, q* B: B9 i7 R5 J% ~1 u
);
6 }+ I( F- N, V6 }% y: t
: d6 J; y% o& o3 `  uvar Registry = xdc.useModule('xdc.runtime.Registry');' E9 E$ i  {/ V4 p$ X
Registry.common$.diags_ENTRY = Diags.RUNTIME_OFF;
3 D$ `" A4 b3 Y/ [/ X( X/ ^Registry.common$.diags_EXIT  = Diags.RUNTIME_OFF;( o+ ~2 H- S' Z, p6 n
Registry.common$.diags_INFO  = Diags.RUNTIME_OFF;
( c( l  o5 i8 I1 ?Registry.common$.diags_USER1 = Diags.RUNTIME_OFF;
& x: q' R/ q5 {" H  j( C. c1 v; I0 o( \! `3 d, t" n
/* create a logger instance */2 C7 `' B5 B) d, w" v5 ^. a
var LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');
: t$ y" s( y9 X4 N$ r, lvar loggerBufP = new LoggerBuf.Params();% B% F8 |* h, x1 a% _, b$ R& j( [
loggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */4 @; Q$ t6 ^6 g- D
loggerBufP.bufType = LoggerBuf.BufType_FIXED;0 ], r' R3 \/ K" G( }

% S  `" @; W- a+ P4 Jvar appLogger = LoggerBuf.create(loggerBufP);6 ]* W" A$ p) X) P' E  r
appLogger.instance.name = "AppLog_Core1";+ S; y& L: A. U! d
Defaults.common$.logger = appLogger;- @3 ~) D2 ]8 k$ p4 a' r9 a
Memory.defaultHeapSize = 0x8192;   
( t$ K9 ?1 g/ v0 sIdle.idleFxns[0] = "&LEDStatus";
& G/ u9 A! c. l4 z# FCache.initSize.l2Size = Cache.L2Size_32K;) ?# c. r6 U3 m7 z* a4 [9 }

: X4 {( l; H) j# g& O
回复 支持 反对

使用道具 举报

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 */
- i1 Y3 J: F, F  U! k: Q( E; lvar HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
' D( I' e" P, q+ j" ^6 dvar heapMemParams = new HeapMem.Params();
" X5 h5 v( W1 ?: u6 [* p) g' c5 y9 LheapMemParams.size = 0x4000;
: I* @/ E: S' X5 N/ G/ n( L9 a+ E9 ?4 U+ w% k" k$ V
var Memory = xdc.useModule('xdc.runtime.Memory');0 s( N1 v6 d7 W* D
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);
$ O  d7 V" V- O( _5 H/ J- h# R. [) m; ^6 D% e- B) \! k
我大约calloc  每次共计大小为5K*16bits,+ F; i" S4 m4 c7 D" j
而默认配置才0x4000、需要改大。
/ E6 v; [( r# j# U6 M: B( T2 |% m4 |
! I7 _4 Q) L+ S9 N, L
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
5#
 楼主| 发表于 2015-10-28 16:14:47 | 只看该作者
/* no rts heap */
9 A5 S3 v- R4 C; Z& }& s  d; zProgram.heap = 0;
" C9 \8 y. b% F) q) }Program.argSize = 100;  /* minimum size */! W8 p1 E5 Y7 U: V
Program.stack = 0xF000;                   //我改到F000  也不行
回复 支持 反对

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-12-21 17:21 , Processed in 0.041366 second(s), 23 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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