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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

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

) n* E( m* c" q! E# T# X% ?  Q5 }    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //256
  [* O2 @: {0 u
( F5 q3 C7 `, z4 d: q( \+ z7 l其他程序段。。。。。
6 [# k& Q2 G* [ / C0 U5 Q2 Q1 j$ s% B7 [
   free(x_d);
' r- A+ S1 \' }9 J* y. W0 C# |% @. f- L. f" X8 P
使用DSP侧单独调试功能,验证动态申请没有问题,
+ N! `# |. V4 }. p, r8 ?% s/ o: r3 X
: v+ H$ e* K2 x, E但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。
$ P3 c( }5 ~/ M& q( E
& Q3 P1 }8 q6 q, d

) J- s# D" g# n' G) i, ?  X! p; |5 G6 X( ?8 U
& M5 e, v# l3 e& W+ o% l4 D& L

' O$ x0 P4 S, Y  _* G2 u
4 S8 O( F! t2 z! Z  ]7 s8 |; D; H$ `" H5 ^
1 ~3 [' K& S1 t6 W

9 x7 V+ z/ }% X( T1 C- I6 w. c$ k& a9 W: I2 s  E
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2015-9-4 10:29:21 | 只看该作者
补充说明
6 B& H1 m1 E& r: T我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下# p* t+ H4 t- ^+ p2 \* L; B
(不过疑惑的是,为何单独DSP仿真就没有问题呢?)+ J* t( E3 G8 f! \& N. |' W
: |  E, o+ Q% j
是不是需要在DSP.CFG中进行配置9 {0 F8 C% N9 G# G) z( U% _
我现在的配置为
; Y1 @$ I/ ~4 V  r. Z; J; a
' [' l6 b$ Z( q* U$ T/*
& O1 T( B9 z3 F- {( S *  ======== Operating System Configuration ========
$ N2 g% |. t; |1 k6 ^' \ */. {4 }# F) l/ j1 c/ l7 t

% C, {; q* ?# ~- ~+ K  m. ?' ]/* no rts heap */, Z, X7 S1 E3 a: A7 I" v
Program.heap = 0;
$ g$ }2 j! Z- o  eProgram.argSize = 100;  /* minimum size */
& K% P" ^  Q4 @" Q5 }Program.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大. U" X  C2 s5 R2 _* j- M

" E, E8 n( T/ I! K/* create a default heap */1 h% b( Z: q; ~; |4 q
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
) P4 g' z9 Q3 p. n3 Uvar heapMemParams = new HeapMem.Params();$ L. F2 \' P% ~  O. C
heapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大0 z, r8 B8 z7 E% h

# T/ F! t  j' t$ F# N4 Z
var Memory = xdc.useModule('xdc.runtime.Memory');
6 C% u; j+ h" S4 OMemory.defaultHeapInstance = HeapMem.create(heapMemParams);$ g7 ^6 `( I% c- b- V) D( q( D

5 v; @; S( G% i4 P# }5 i* L- v, K/* configure System module */
- h( Z2 {  j( |var SysMin = xdc.useModule('xdc.runtime.SysMin');
& R, y- a! l! N# J4 XSysMin.bufSize = 0x1000;
7 {0 M; ^! G6 U6 R) E0 A& iSysMin.flushAtExit = false;" M" z  R- w+ }3 \
" i, V( e  p/ F3 g! E
var System = xdc.useModule('xdc.runtime.System');
! \0 B; d7 r1 D# rSystem.SupportProxy = SysMin;5 ~, H( z( N. }& D5 T* A( a. v
" O* z1 i7 K1 E  Z* g( P# Y
/* configure SysBios to use the lower half of Timer 1 */- j5 z/ I+ z4 c$ k9 s3 p
var Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');
2 }! u. ?3 ]0 ^var Clock = xdc.useModule('ti.sysbios.knl.Clock');+ P( {- Z  P# ?: ^
Timer.timerSettings[1].master = true;; q1 k# U/ I) `4 {  Q1 E
Timer.defaultHalf = Timer.Half_LOWER;
" @# X8 }# h! A' X4 T1 QClock.timerId = 1;; N8 C6 b: G, p1 g0 [
& {& r& x% _" D3 L1 d
( }0 _1 s# n. G0 K* K& q
/*! r. _2 ?" ]4 @1 y7 e
*  ======== Miscellaneous Configuration ========( ~- M; a7 a+ d3 c& G. r
*/" B$ b# P9 ?  ^6 g" z! m$ L0 T

2 M/ F& K5 \$ F) Y/* set default diags mask */) ^5 W) }4 y! ~* Q
var Diags = xdc.useModule('xdc.runtime.Diags');
' A' v, \) Z: }! E6 B/ Q4 `var Defaults = xdc.useModule('xdc.runtime.Defaults');
* Y, I; K: L: S& H* G) T6 h9 ]* H/ n% N
Defaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;% ^% `! @; N& A
Defaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;
' E7 o7 }- d. L% F% w( `+ oDefaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;# k5 ]( O. Z! T( t
Defaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */
# w  D8 E( H( C2 sDefaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */
- K. p  x+ W$ Y. J1 XDefaults.common$.diags_STATUS    = Diags.RUNTIME_ON;7 I' N5 k# l. B, m# i
Defaults.common$.diags_USER1     = Diags.ALWAYS_OFF;
, y3 |' l* L9 W/ u. a8 vDefaults.common$.diags_USER2     = Diags.ALWAYS_OFF;
: T$ @5 D; y# }. D1 n! k/ Z) uDefaults.common$.diags_USER3     = Diags.ALWAYS_OFF;
3 _' b  i% Y/ ]! wDefaults.common$.diags_USER4     = Diags.ALWAYS_OFF;
- K5 T4 Q! f0 n4 C/ h/ WDefaults.common$.diags_USER5     = Diags.ALWAYS_OFF;  n9 m( y# i/ o& G: T' X$ o- Q
Defaults.common$.diags_USER6     = Diags.ALWAYS_OFF;
8 Y( k( Y9 `4 `( G2 ZDefaults.common$.diags_INFO      = Diags.ALWAYS_OFF;
! [5 c& k, A0 x% d% F, T+ \. E7 kDefaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;
$ o+ Y1 j( c5 Y! z7 y( w4 e( J2 B* h3 H! n/ X$ E+ H& P: W
/* override diags mask for selected modules */$ H( z1 t4 [  {+ w% q
xdc.useModule('xdc.runtime.Main');
2 ^$ v- `. w# q( [- n  i( p$ tDiags.setMaskMeta(& s( U. T1 t" j0 L& @+ e
    "xdc.runtime.Main",0 ?, j9 H6 s7 y8 a  s
    Diags.ENTRY | Diags.EXIT | Diags.INFO,0 \" p/ \! m0 R1 \, [
    Diags.RUNTIME_ON
, u4 d" v5 S. W  n);
! C7 \  \" L& o* |+ H$ `& F1 X% V' ]# U
var Registry = xdc.useModule('xdc.runtime.Registry');
% U; p  H( j5 x0 B7 [Registry.common$.diags_ENTRY = Diags.RUNTIME_OFF;' A; _! H+ Z( t4 c) |4 L
Registry.common$.diags_EXIT  = Diags.RUNTIME_OFF;- V* Y- A0 Z% j$ k* {4 {! v& \2 r
Registry.common$.diags_INFO  = Diags.RUNTIME_OFF;2 {, R  L$ a( k  W
Registry.common$.diags_USER1 = Diags.RUNTIME_OFF;
: m$ i" q1 ^5 c, E7 O' \: i" K6 b: }% J
/* create a logger instance */0 P. P5 K$ H0 ?" B3 R2 z+ ?! c
var LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');( i$ Q& y, |+ L, ]
var loggerBufP = new LoggerBuf.Params();" l1 |. [4 }! G* ^1 h1 L
loggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */$ ]: X( y1 b0 A* h
loggerBufP.bufType = LoggerBuf.BufType_FIXED;
( L( y( A: l, ^. N9 K1 k7 e9 |6 `8 f& ~8 E% z: j
var appLogger = LoggerBuf.create(loggerBufP);) \+ I$ y5 a$ v: @9 {# T' E, I- f
appLogger.instance.name = "AppLog_Core1";
, L  N* V+ {! h" C3 V8 k3 A5 ?Defaults.common$.logger = appLogger;$ q) K3 |, x  [, m$ b+ T
Memory.defaultHeapSize = 0x8192;    + q; n. a$ o: @2 H. l0 e9 {
Idle.idleFxns[0] = "&LEDStatus";
( @! c, Y4 G& l9 v3 ]" i& n% OCache.initSize.l2Size = Cache.L2Size_32K;
& z- c8 w, i6 C5 x; D/ k
+ K& Q' n* F4 H; s8 s
回复 支持 反对

使用道具 举报

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 */7 d3 t, O/ T9 F* h- J8 W8 a7 F
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');: J( S( G3 c2 Q8 a
var heapMemParams = new HeapMem.Params();
! Y+ D: r; ~5 C, s  LheapMemParams.size = 0x4000;/ s5 `$ V  x+ D- F) I

7 H1 Z8 a3 {; S0 dvar Memory = xdc.useModule('xdc.runtime.Memory');
/ I& E  E  j2 ~* S* P7 {4 ?5 zMemory.defaultHeapInstance = HeapMem.create(heapMemParams);, {1 a) e0 i/ D
2 k5 o2 W3 T4 ]8 Q( r! O5 E  ]
我大约calloc  每次共计大小为5K*16bits,# l: j4 u- ]  d% A: q6 E, ]
而默认配置才0x4000、需要改大。. B/ O0 |- V9 y6 q) p7 Y

4 o6 w, L9 j4 _: ]: v/ P
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
5#
 楼主| 发表于 2015-10-28 16:14:47 | 只看该作者
/* no rts heap */! L& ]* t8 @  R# X  K) N
Program.heap = 0;
! u/ A  r' q+ j- T+ m% d8 B* A% oProgram.argSize = 100;  /* minimum size */
+ K* X( ^. `0 N  @5 h) @, h( y5 KProgram.stack = 0xF000;                   //我改到F000  也不行
回复 支持 反对

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-11-27 20:52 , Processed in 0.043000 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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