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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2015-9-4 08:33:31 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
创龙工程师你好,我在OMAPL138单独调试DSP程序(使用SYSBIOS)时,在任务中使用calloc函数动态申请内存,用完后free,类似如下结构
0 T: J7 C; l& M! b5 V  Q- Y0 [! t& w( q! b) e/ S
    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //2568 r4 r. u' A# w& [2 X
! J8 L: p9 B8 }" ?
其他程序段。。。。。
( \$ ^3 G; o  Q2 P) |- q
; c8 ?8 g1 N- n$ I& G' l9 ?# w7 ^   free(x_d);
0 m; Y: P& K% ?8 g/ P# ?- ]5 T7 h" M# t; ~( Y/ u9 p
使用DSP侧单独调试功能,验证动态申请没有问题," U& ?2 b' y* H4 }  N, N

% v/ b- E# E( l6 E& _' _( \但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。/ }5 e( p! _$ C$ M% G  C5 X

% j9 n, d  _0 w5 @" H0 L# `; v4 S4 y8 F# ~

& ^/ _/ A/ i6 }" S# J( k' i' }5 y8 q6 z, l: T

7 H7 T; ^3 r9 n7 \+ O: M8 V, n, O( P6 ~$ ^0 F3 C
% ^, P5 }0 f! h/ e3 q; Y/ D4 t/ N

6 s2 K, I  i# K6 |
; h' P* O/ ?- j- M) K: O3 S1 O( p( Z
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2015-9-4 10:29:21 | 只看该作者
补充说明
( V5 ?* x3 Q& R- v; I我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下
9 T7 Z5 w% _1 ]" G- G! L3 {' Z(不过疑惑的是,为何单独DSP仿真就没有问题呢?)
0 \8 y3 c0 f' E$ r! r

; ]0 e9 O: q: q) s是不是需要在DSP.CFG中进行配置
/ j# Z3 k# v+ Y# L! O- t6 Y' ^我现在的配置为
4 l" Q! ]9 w8 i% B' O
) }( G8 u6 v, M4 a. y0 O/*3 n& d) b6 l, r
*  ======== Operating System Configuration ========6 n0 ~* r2 D% G/ T
*/
/ h+ I* z1 _+ q8 f% a5 ~3 W% q" b8 G
3 U* Z- X' ]$ c' m/* no rts heap */0 l: A5 r, I6 p# E3 D6 P
Program.heap = 0;
3 G  {6 [) h$ {$ E$ _; bProgram.argSize = 100;  /* minimum size */
$ V# G. R7 v- N" I  B, XProgram.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大  j3 `2 X6 w/ P0 ^! D; @. x! |2 V* y
. n! Y/ E  s1 p2 k3 J" |& |9 }, ^& G
/* create a default heap */
4 ?: y% n, }2 g% }: u2 ~var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
  B$ J) J+ N8 r- yvar heapMemParams = new HeapMem.Params();+ b0 a6 }. u' g' k. {! b
heapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大9 d0 l( q9 s% \5 q8 L

5 w4 |: Y6 v0 b9 G7 l* I+ W" u
var Memory = xdc.useModule('xdc.runtime.Memory');
8 M6 y$ z8 `. h+ b$ FMemory.defaultHeapInstance = HeapMem.create(heapMemParams);
* n3 Q5 A. H% ^( G9 G3 }
8 N# z$ h! X4 P# C' {5 ~  Y/* configure System module */
- k: K) q7 \. y: w/ z  U1 \  g+ U8 avar SysMin = xdc.useModule('xdc.runtime.SysMin');) V, Z  B2 L( e+ f. y
SysMin.bufSize = 0x1000;
  A1 i  Y  u, p. K0 fSysMin.flushAtExit = false;+ b" ]# n7 l( t

" N- i: ]1 W# B! ^. @, @var System = xdc.useModule('xdc.runtime.System');
& B: W6 W, O+ P* k: eSystem.SupportProxy = SysMin;/ r6 u# \0 G2 @( s# p1 d
9 C0 L5 Y0 r! p4 T; s
/* configure SysBios to use the lower half of Timer 1 */1 u  `$ `& W0 Y$ w) o
var Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');
# U7 W. }7 ^- a  |- Cvar Clock = xdc.useModule('ti.sysbios.knl.Clock');
0 U& r2 F; i3 z1 J8 wTimer.timerSettings[1].master = true;3 q/ B$ w% S; s( @
Timer.defaultHalf = Timer.Half_LOWER;
1 W2 f2 h( ]& m0 `. P. Z( g6 aClock.timerId = 1;
" X+ l0 v, `, I0 E6 t% B" D2 i0 ^- K: P) m: ]
+ X+ {. C7 ^' \- H
/*$ I9 S6 s+ h+ k4 O  `
*  ======== Miscellaneous Configuration ========
" c* U# f  h) E4 h! H6 x0 c+ t */
  |+ c  I$ k) ?. |2 R+ @8 Y& w9 g" b& S. M/ k1 ~
/* set default diags mask */
- ]# b- v: i0 C+ t8 z; Z4 S: cvar Diags = xdc.useModule('xdc.runtime.Diags');  v2 }, n: M# F/ S1 s4 u
var Defaults = xdc.useModule('xdc.runtime.Defaults');
8 Z, Q; [6 G+ T  [$ s5 X
% v' B* G8 a7 l) e4 \: n* qDefaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;
3 {7 v1 t; S, i( ?! @" X0 p6 FDefaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;6 P* c) [" ^" i/ f
Defaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;; l% }# j, M! N8 v1 f8 b, n
Defaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */
2 D( S6 ]- _/ t+ N  V4 q* kDefaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */
- j5 Y' ]+ E; mDefaults.common$.diags_STATUS    = Diags.RUNTIME_ON;, y8 K$ ]% ^/ q4 Y0 k! S) G& E
Defaults.common$.diags_USER1     = Diags.ALWAYS_OFF;) P; [9 P2 a  b- o3 N1 k7 H
Defaults.common$.diags_USER2     = Diags.ALWAYS_OFF;# Z9 O1 y: j9 `$ u
Defaults.common$.diags_USER3     = Diags.ALWAYS_OFF;
4 |* ~: X) y3 {3 p1 |4 N/ NDefaults.common$.diags_USER4     = Diags.ALWAYS_OFF;' Z! Y* W6 X+ H/ ^& p* w" H5 ~
Defaults.common$.diags_USER5     = Diags.ALWAYS_OFF;
  x  q9 X  \$ k, U6 R9 |Defaults.common$.diags_USER6     = Diags.ALWAYS_OFF;6 p7 X+ T$ B4 F- Q& j, F8 G
Defaults.common$.diags_INFO      = Diags.ALWAYS_OFF;
1 o7 w9 o) ]7 F. {9 E  sDefaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;
7 Y  @7 j5 A6 A+ X' ?( G- R/ A+ u
: a. g  [0 ^9 Z1 ~5 k0 @- P/* override diags mask for selected modules */: b( W8 g: {2 J8 u* t, d
xdc.useModule('xdc.runtime.Main');7 O9 X" J* f% F  m8 j* U
Diags.setMaskMeta(
& L8 s" Y9 x% A    "xdc.runtime.Main",
1 U. r; z* O% g1 m# `, M    Diags.ENTRY | Diags.EXIT | Diags.INFO,
5 {( F6 R$ S5 B" E/ w# a! l$ Q    Diags.RUNTIME_ON
; R% N2 \- D( u: A  j1 d);/ h$ B% s8 @4 J9 O5 {. ~

5 b; O: y* j1 Cvar Registry = xdc.useModule('xdc.runtime.Registry');3 z' E9 }( a- d# Q2 t/ x% X
Registry.common$.diags_ENTRY = Diags.RUNTIME_OFF;  d9 J/ s, k6 o; u# g! Q9 H( {
Registry.common$.diags_EXIT  = Diags.RUNTIME_OFF;" m5 {2 w' G, v( L0 }
Registry.common$.diags_INFO  = Diags.RUNTIME_OFF;5 a/ S9 y% ]% A1 j0 }: l
Registry.common$.diags_USER1 = Diags.RUNTIME_OFF;
& H$ w8 ]/ k0 ^6 z0 r$ ?1 X( `' \. O$ o6 p' }
/* create a logger instance */
0 y. |, S$ c2 V0 `( avar LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');
  c: ^! u) v" U+ y# Yvar loggerBufP = new LoggerBuf.Params();
, Z& _) ]  e" P/ D# \4 B, OloggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */% w+ D: Z  W6 F. X  l
loggerBufP.bufType = LoggerBuf.BufType_FIXED;; l3 q+ @% |% r4 K& e6 \) L

8 V. t+ S/ p& i  b/ e" Z9 J: Lvar appLogger = LoggerBuf.create(loggerBufP);. x, w: f+ N2 o5 w% s
appLogger.instance.name = "AppLog_Core1";
; O1 v: F( L, P( y" M4 PDefaults.common$.logger = appLogger;1 e) q  v' B+ G+ h$ H
Memory.defaultHeapSize = 0x8192;   
* z/ s$ Z5 Z2 Q) {2 sIdle.idleFxns[0] = "&LEDStatus";
/ C  ?  {- Q! k3 y) XCache.initSize.l2Size = Cache.L2Size_32K;- V8 n) s2 F2 }  D/ b" f$ f' ]3 L
/ G, Q" d' U* K. S3 a1 ?
回复 支持 反对

使用道具 举报

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 */% X# ?% X, `4 Q* G, l7 m
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');9 z# R1 H6 T8 F6 W# x
var heapMemParams = new HeapMem.Params();
* W. M5 D% h/ L1 }2 d+ u7 eheapMemParams.size = 0x4000;
% g* Y0 I- F7 Q* L# C4 m
* s7 S3 T2 S0 r  F& B) @var Memory = xdc.useModule('xdc.runtime.Memory');
2 e# N4 A) D5 T' V  v9 N0 }9 FMemory.defaultHeapInstance = HeapMem.create(heapMemParams);3 m7 I) k7 j4 I. C. c
* N- F$ r& @1 _& e/ F$ M2 F
我大约calloc  每次共计大小为5K*16bits,
# n! {. r( f5 r# S" o& D4 g而默认配置才0x4000、需要改大。
$ J. U- E" Q" F, V8 R) ~5 H) i6 V- x. n
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
5#
 楼主| 发表于 2015-10-28 16:14:47 | 只看该作者
/* no rts heap */, \  z" |" Z, T( U# G7 }' t' w6 k
Program.heap = 0;- ?# k8 Y3 a( i5 a1 K
Program.argSize = 100;  /* minimum size */
& y6 z! }! s3 N$ d$ h2 e# yProgram.stack = 0xF000;                   //我改到F000  也不行
回复 支持 反对

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

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

使用道具 举报

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

本版积分规则


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

GMT+8, 2026-1-12 10:18 , Processed in 0.043265 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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