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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

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

6 o/ G+ f6 Q* F$ l/ O' B. [/ G    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //256
9 W1 P# K/ K4 x8 K$ n; q
; _2 V' c( m. t, @$ g% R/ }其他程序段。。。。。6 U* N$ p/ g% `9 ~

8 z* Y( ?: C8 ^- V2 n( p9 \   free(x_d);& X. z- B/ \5 r; m+ M" ?* X
! y% Y! {0 \: {6 v$ W( X1 Z
使用DSP侧单独调试功能,验证动态申请没有问题,0 j# {; r# q' {
3 G7 Q+ ^; x' G8 E
但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。, B) W" a5 }0 P: Y7 \! h2 v

' q$ i3 O0 c, Z/ W/ n8 f7 R, E$ N' Q, }* u! R: R/ Y

( o; ~" x" z# `' @, J3 B7 x( ^# U" l1 m
; F; F8 n* O2 o5 I

' |4 t5 q, e# z) |% b* C8 h) i; K+ l% h2 O+ f
, G& |* F8 P; z* X* T  I( B

, H- }- ]+ A9 \  ]. ~
2 m% f, R5 l; T3 U2 j! s" M, l
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2015-9-4 10:29:21 | 只看该作者
补充说明  ]& ]; e; {6 B6 }
我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下6 X4 ]% u+ U: ]& Q6 s1 D
(不过疑惑的是,为何单独DSP仿真就没有问题呢?)" h4 `! k1 e* P2 \

  g" C  R1 S% u9 \5 Y& `是不是需要在DSP.CFG中进行配置
4 J1 [. H# r7 v1 l: ]; P& g我现在的配置为
0 q3 G+ s' H1 N* P5 c$ W/ R
* C# H- v: L7 K1 ~, u/*. F8 h: Y0 Z/ O9 C- Q. l
*  ======== Operating System Configuration ========
! r* ?# C2 L, Z3 G, M/ V */
# p, k, |$ @& v
" b  E) M6 E, i7 E+ q4 _( j/* no rts heap */
3 l( z% T9 u+ T4 ]6 N- O" O) q5 wProgram.heap = 0;; ]( R- |; k3 U" J/ o
Program.argSize = 100;  /* minimum size */
  _  z2 {0 I: {# K# ~8 BProgram.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大
/ N9 ^6 a/ _  I* N0 p7 ?8 ^4 Q1 w6 n4 B: Y$ x3 G# k$ \
/* create a default heap */4 I* @, a5 |6 V) `- f
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
, `0 E4 |' R  u8 m, Vvar heapMemParams = new HeapMem.Params();
; q! F; u' F# kheapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大
' X' X7 O, R% y; X" l$ S; O4 o/ J2 c& `
var Memory = xdc.useModule('xdc.runtime.Memory');
+ d, U( G! L  m$ f( k) f5 [& r$ pMemory.defaultHeapInstance = HeapMem.create(heapMemParams);6 V0 N) d9 a# }- M6 i' I

7 a  L$ g) S8 I: ~% s2 ?/* configure System module */
) x# \8 J1 o+ Gvar SysMin = xdc.useModule('xdc.runtime.SysMin');
% }% @4 X1 u; X; r& FSysMin.bufSize = 0x1000;# [7 r: X) ]2 ?) F' A
SysMin.flushAtExit = false;
  l3 J! f# j3 T+ f9 |6 J) ~+ D
. ^( K; C: p8 Z  P( n5 M" g+ Nvar System = xdc.useModule('xdc.runtime.System');
7 m, _& K, m' J! d' bSystem.SupportProxy = SysMin;. J# j4 p7 z7 T* _9 k

8 z3 @: P$ L" ^8 c6 ]/* configure SysBios to use the lower half of Timer 1 */
! f# T+ T5 P8 j" W9 }, C8 f0 Kvar Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');  p( x0 O4 K* A" B. n
var Clock = xdc.useModule('ti.sysbios.knl.Clock');
* A$ Y  p2 z3 j, V7 \! QTimer.timerSettings[1].master = true;
! D" @# j, j- {5 ?6 mTimer.defaultHalf = Timer.Half_LOWER;
9 x; _; d3 P8 F7 o" e5 `  n) NClock.timerId = 1;
0 E/ L1 T) x# a* G4 P) E/ X: a- q5 L/ l$ k1 w0 K

) M2 r6 F7 X$ B, r/*
% F7 U9 d8 f2 @ *  ======== Miscellaneous Configuration ========+ P  t% R; e/ p- ^7 f( E
*/: G- _6 b  |0 S( c

! `! g) O: `$ O: g7 W( G; q& N/* set default diags mask */  G7 d  u# W) @) ]/ g& q  P. f! }
var Diags = xdc.useModule('xdc.runtime.Diags');
/ m! H$ r, U) ?var Defaults = xdc.useModule('xdc.runtime.Defaults');7 D. P& D0 |0 S1 |

" r7 ~$ A: I& q( E( L/ c# K  gDefaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;
" Y6 R$ g2 O) m5 A4 pDefaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;5 i/ y7 |/ C3 L
Defaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;
3 i! l; X2 I2 J/ ^% a. CDefaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */$ v2 e$ Z* [$ ^$ {
Defaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */
2 f8 b8 u8 e( B6 s8 k# aDefaults.common$.diags_STATUS    = Diags.RUNTIME_ON;
  Z* s3 e4 y2 W  f' gDefaults.common$.diags_USER1     = Diags.ALWAYS_OFF;. l- [' x2 `. M6 O) K2 J' I0 J
Defaults.common$.diags_USER2     = Diags.ALWAYS_OFF;
1 q- @4 R% v8 I& vDefaults.common$.diags_USER3     = Diags.ALWAYS_OFF;
( h, P5 M" U' U; h  t* L# w! B# WDefaults.common$.diags_USER4     = Diags.ALWAYS_OFF;0 l) h- a: X% `! l6 w3 i
Defaults.common$.diags_USER5     = Diags.ALWAYS_OFF;8 t1 @# F( f% O6 V$ c9 L; U& [1 l
Defaults.common$.diags_USER6     = Diags.ALWAYS_OFF;; Q! F( R0 n" B' P6 Q; P. {: m
Defaults.common$.diags_INFO      = Diags.ALWAYS_OFF;
+ n# @# P0 b, `Defaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;
* F5 e8 r% u! O+ p' G0 t, w# r. X2 f) Y& A
/* override diags mask for selected modules */: n; I, m1 I  G: N. q' @
xdc.useModule('xdc.runtime.Main');( _% g: r+ f3 P* q4 w4 D0 ?
Diags.setMaskMeta(
6 }! a) C4 _, q) F0 u# u9 ?; a    "xdc.runtime.Main",
1 t3 R( D4 A2 R, n* }    Diags.ENTRY | Diags.EXIT | Diags.INFO,3 C8 z9 p2 V( [
    Diags.RUNTIME_ON3 o  d& C! x) F5 f4 `# W& P
);6 J8 |5 L) g0 H4 I  j
! U) i4 z9 T6 z+ q0 {1 T
var Registry = xdc.useModule('xdc.runtime.Registry');
* I* x( L: b( T: v# F2 o" ?Registry.common$.diags_ENTRY = Diags.RUNTIME_OFF;3 I. F# I" R/ m
Registry.common$.diags_EXIT  = Diags.RUNTIME_OFF;
- T  ]6 a% G+ aRegistry.common$.diags_INFO  = Diags.RUNTIME_OFF;7 a- u3 a1 p1 N$ N. U* Y  \
Registry.common$.diags_USER1 = Diags.RUNTIME_OFF;6 M# P5 m! j3 F9 `

4 F  z, @( w4 j  P/* create a logger instance */
- g$ e& V' Q; }  a/ uvar LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');
8 s& S7 P( b7 a) f5 N, m: xvar loggerBufP = new LoggerBuf.Params();
0 g) L( e- g7 z( t  rloggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */' z0 C% i) v* p0 e+ y& J3 j# {
loggerBufP.bufType = LoggerBuf.BufType_FIXED;
% N* H+ `* b# X3 x" c
5 _' x+ i' m' z8 z3 P5 Qvar appLogger = LoggerBuf.create(loggerBufP);
* a& d7 O. N! ^" e' LappLogger.instance.name = "AppLog_Core1";% D& H% m9 o5 o
Defaults.common$.logger = appLogger;+ A# t& J# ~4 P( b. z7 u( Q% P! _" T
Memory.defaultHeapSize = 0x8192;   
. X: j6 m! w. c! ^6 OIdle.idleFxns[0] = "&LEDStatus";
: G4 S" ~8 C9 c8 s: w# R- b& S! NCache.initSize.l2Size = Cache.L2Size_32K;
3 `$ j0 R( {1 p" L6 t( }7 l* f1 W  h
回复 支持 反对

使用道具 举报

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 */
" m* l. q9 X9 t  b  A/ O. cvar HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');% T& Z+ W% p/ p2 r8 C, X* P+ m
var heapMemParams = new HeapMem.Params();+ O, k+ t5 c3 `5 H$ |- w
heapMemParams.size = 0x4000;7 [, m( N+ Y) m9 u+ @
- _- M5 D+ t$ v0 _+ M
var Memory = xdc.useModule('xdc.runtime.Memory');7 D8 U. d* Y8 {' _/ T
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);1 k* S4 Q3 X9 I. Z' P9 \0 ^; Y

4 y/ R( `5 o& m3 l# Q4 X* b3 _我大约calloc  每次共计大小为5K*16bits,
" X  f: E6 W! r, ]( d" g! S/ `而默认配置才0x4000、需要改大。6 g- y% E, _3 f6 D8 c. a

4 X0 j2 s; ?, `$ e8 Y
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
5#
 楼主| 发表于 2015-10-28 16:14:47 | 只看该作者
/* no rts heap */! O" c( d/ a+ E1 i
Program.heap = 0;
8 i: Y# U" u5 W2 c3 FProgram.argSize = 100;  /* minimum size */4 D+ M0 H9 F1 d! C
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-31 18:54 , Processed in 0.040079 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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