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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

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

2 @4 `: ]% I/ U: `$ E5 p    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //256" k( t4 x5 ~# d# N8 r. l. \
) c# H& i, P$ [2 X4 t5 B9 N" g
其他程序段。。。。。; Y* t( r% Z" E
* v$ a% E# F6 S9 A8 M" ~3 _* U
   free(x_d);
- j9 C& V! ^& N- U7 O' {$ n9 A
, o. i/ g9 |& W. O5 i( S使用DSP侧单独调试功能,验证动态申请没有问题,6 y0 {* T% N$ `# U% g2 }

( A- ^6 l" u- e( m/ g8 @# d但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。$ W2 n4 V( g: m7 f8 j- L) N" w+ }, \, x1 C
- |) U4 a' k' Z. p

) L9 h3 ~' q0 @. Q# c- T+ W& F1 O2 h$ \/ R5 G
, t+ T- @  ?6 s* |
+ S. u) x! c) b) E! D/ M* ?
: b9 l7 m$ E- g6 ~

4 j8 h7 n* h  a( c% ]
+ t( j& r# X5 f2 z) l
( X! z: W& m/ I6 b
' N, R" G( x  z1 g# s- b2 f
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

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

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
5#
 楼主| 发表于 2015-10-28 16:14:47 | 只看该作者
/* no rts heap */+ R. ]/ j$ p/ @1 N) m! N' j" m
Program.heap = 0;
  j: l- i+ W; c5 U) B* X# g5 y9 U3 |" nProgram.argSize = 100;  /* minimum size */
' b  O  w2 R1 f9 S+ YProgram.stack = 0xF000;                   //我改到F000  也不行
回复 支持 反对

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

积分
1093
地板
发表于 2015-10-28 09:51:31 | 只看该作者
/* create a default heap */
& @9 J2 e) A  v! G- Z# j7 l$ k/ Bvar HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
3 T. k; `( m  r6 ?" Svar heapMemParams = new HeapMem.Params();$ m  L; u) F4 P0 `
heapMemParams.size = 0x4000;
) f  s; L3 T$ s" `/ J6 z# m  @& @% s2 g0 g/ I" \6 O
var Memory = xdc.useModule('xdc.runtime.Memory');) ?) S9 c* c- S6 b/ |* d9 f
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);
- Z) a5 q% x/ [1 S1 N% e9 c8 ], H( @5 |1 V1 C6 B& U" X' {
我大约calloc  每次共计大小为5K*16bits,) M* {7 l: e6 ]. `' {2 H
而默认配置才0x4000、需要改大。) N7 K7 z! i. C
  M2 Q. |5 O  _1 Q
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
板凳
 楼主| 发表于 2015-9-7 15:38:00 | 只看该作者
为什么没人回答呢?   大家都不用动态申请内存方式吗?
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2015-9-4 10:29:21 | 只看该作者
补充说明
# J0 s5 M2 j; F( M我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下
" C: q5 `8 I& f% [(不过疑惑的是,为何单独DSP仿真就没有问题呢?)2 x" [- g: G5 V& Z' E0 K+ Y% l

, y9 C& p8 W$ ~- C是不是需要在DSP.CFG中进行配置  n7 @+ Q3 w. d6 {8 t2 E( O* `
我现在的配置为
* z8 w6 O+ I+ e0 X# R6 Q2 p
) n( V) ^( N& t+ P, `( i6 T/*
$ R% C4 S9 t. H0 b- Z. s5 s9 g *  ======== Operating System Configuration ========. ~4 t) C  M% H' \5 B
*/
1 H, T" m. u2 E6 Z- L/ A; a8 H& F& o. a  {7 [( O
/* no rts heap */2 J6 `' v0 Z5 h% {, A
Program.heap = 0;
" ?0 y3 T2 R* l& R0 }4 yProgram.argSize = 100;  /* minimum size */# O, F7 c( u! U
Program.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大
7 ]! d! N& A8 d, t- e, ?8 }5 l& C% a& ^, M3 C
/* create a default heap */
& ^" N- B" X3 L9 z& i/ vvar HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
8 `8 q2 v, r/ e: w0 l! K3 I0 P+ |2 ?var heapMemParams = new HeapMem.Params();
! J# M5 ~/ F3 [- M. J3 RheapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大, P# \0 Y3 _( L- `& J1 M

' M6 r+ ~5 A2 D, e
var Memory = xdc.useModule('xdc.runtime.Memory');6 J4 n( I9 }1 R0 T
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);8 }6 l7 q/ @( h$ j) {) t: E

! p# V1 s( [" \8 ~/* configure System module */
/ f  v3 C: O+ N3 w  H' vvar SysMin = xdc.useModule('xdc.runtime.SysMin');
/ f/ D4 \9 Q" ^) M+ |* h; m6 j# b$ [SysMin.bufSize = 0x1000;
1 {3 M2 V- Y/ J6 A) E) `SysMin.flushAtExit = false;
. ~8 `, o" D, c
/ J: f+ V2 M  N& _6 kvar System = xdc.useModule('xdc.runtime.System');
* R* m! F2 Z7 u& ]& sSystem.SupportProxy = SysMin;
" [! h" I8 }( A$ [# q, k$ G# O0 b8 i/ a! @  q  S- k% ~. P
/* configure SysBios to use the lower half of Timer 1 */6 }5 L& p5 `9 a# e
var Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');# d  T. }& a+ f* A  d5 H2 H# G
var Clock = xdc.useModule('ti.sysbios.knl.Clock');
4 n6 k# v0 A8 I0 C" {Timer.timerSettings[1].master = true;1 v6 k8 y# B% d! O0 X6 g) z  V
Timer.defaultHalf = Timer.Half_LOWER;
* A8 L& C+ J1 s( JClock.timerId = 1;
# Q0 P. Y+ v  @' [
! L0 _% Z! }# @. Y3 h$ D! t2 S3 g4 Y1 e) u% }9 O
/*# H& m! Y( }) v' L$ k* O( b5 B
*  ======== Miscellaneous Configuration ========! Q- |& @+ O" ]5 G& F. k, {2 @
*/
( O  e+ E* q& ]* m  H* Z, z, I0 H
- S2 h) [. ^+ @/* set default diags mask */
* z  a' u' W8 ]var Diags = xdc.useModule('xdc.runtime.Diags');/ c4 Q1 S( h- C1 }
var Defaults = xdc.useModule('xdc.runtime.Defaults');
' L) m" T8 {& o( o* T  B& g  j0 @& _4 _, g
Defaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;1 y3 A4 ], c! z, g; G- \$ `: T
Defaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;
3 i7 C; u4 ^/ i5 g( E6 j2 NDefaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;2 ]! {8 w( e8 F& E1 u
Defaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */
+ \1 Y& l8 i3 x: {& k# i4 Z; ^Defaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */
7 R. \! c- G4 V' G) C. |  tDefaults.common$.diags_STATUS    = Diags.RUNTIME_ON;6 C' G4 Y* g' ?
Defaults.common$.diags_USER1     = Diags.ALWAYS_OFF;- d7 C1 U& W8 j4 i
Defaults.common$.diags_USER2     = Diags.ALWAYS_OFF;
' N" m" }9 _4 r: S7 U+ gDefaults.common$.diags_USER3     = Diags.ALWAYS_OFF;
% \- J7 @1 X2 pDefaults.common$.diags_USER4     = Diags.ALWAYS_OFF;
; _$ \' Z* W- g+ s- n4 S$ @Defaults.common$.diags_USER5     = Diags.ALWAYS_OFF;
; u$ c+ f1 l6 {0 N" a/ M; f- g  qDefaults.common$.diags_USER6     = Diags.ALWAYS_OFF;- V- C+ A, [$ m+ m$ V( {  T: |7 n
Defaults.common$.diags_INFO      = Diags.ALWAYS_OFF;; v1 t6 o9 S; e
Defaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;
- c/ v" o1 R# l$ ]0 M  \7 D' G) D% h: |$ D& {# I- p3 C
/* override diags mask for selected modules */
0 V: _+ G  W2 S2 L1 E. ]9 Mxdc.useModule('xdc.runtime.Main');% G. E3 l2 |0 F5 S  s
Diags.setMaskMeta(
# x6 z1 n& B) I( Y( K6 w    "xdc.runtime.Main",7 q7 [# V9 |! c$ p! R7 T3 E/ A
    Diags.ENTRY | Diags.EXIT | Diags.INFO,$ o8 y% u  t- V6 I* g8 p
    Diags.RUNTIME_ON
. A! V, I0 [; k6 ~/ F4 a: u);7 b0 `( p$ D: e2 C* x2 e( B  H, @

9 V8 P/ U; U* r: [9 y; W% Nvar Registry = xdc.useModule('xdc.runtime.Registry');
3 f, _' E( s, l) L( U  e3 [! H7 xRegistry.common$.diags_ENTRY = Diags.RUNTIME_OFF;
0 K" ~( F6 b  d/ ]- w" e% _5 NRegistry.common$.diags_EXIT  = Diags.RUNTIME_OFF;
, C' Q3 x2 N% S, l6 QRegistry.common$.diags_INFO  = Diags.RUNTIME_OFF;
. ]: [: g) p0 ]- n0 }$ V  yRegistry.common$.diags_USER1 = Diags.RUNTIME_OFF;
+ j! ?' N6 F) N  l$ R1 r% I( m" l4 O2 L; X
/* create a logger instance */
; S2 H3 @& G4 N; Q- Qvar LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');
& _9 a# a# P# [  O+ y2 k! }5 lvar loggerBufP = new LoggerBuf.Params();
2 k8 I3 k5 N. X2 `9 F2 nloggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */
& C2 G* J5 i# M2 IloggerBufP.bufType = LoggerBuf.BufType_FIXED;
9 u1 a( J& K+ m1 l/ V2 V
/ w. }. d9 M/ E$ y! Y2 Y# avar appLogger = LoggerBuf.create(loggerBufP);
3 ^" N0 p1 J- h5 W( h3 [/ W9 dappLogger.instance.name = "AppLog_Core1";+ }: _' d' M3 N! B) ^, \3 U
Defaults.common$.logger = appLogger;
# h  S" ?( [2 E1 NMemory.defaultHeapSize = 0x8192;    % b# u& Y0 b4 C3 o# t
Idle.idleFxns[0] = "&LEDStatus";  U. c3 b" Z' v, S
Cache.initSize.l2Size = Cache.L2Size_32K;- b- D4 g0 j7 Z6 c1 G8 B) J
, |: W" C4 G, Y5 b# T
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-12-3 17:32 , Processed in 0.041701 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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