关于OMAPL138在SYSBIOS下DSP侧动态申请内存问题 - OMAP-L138 - 嵌入式开发者社区 - 51ele.net
设为首页收藏本站
点击跳转“创龙科技服务通”

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2015-9-4 08:33:31 | 只看该作者 回帖奖励 |正序浏览 |阅读模式
创龙工程师你好,我在OMAPL138单独调试DSP程序(使用SYSBIOS)时,在任务中使用calloc函数动态申请内存,用完后free,类似如下结构' Q6 f% Z9 I. S2 u- f# T, }
1 u# I+ ~1 F- K* t
    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //256  y  R0 ]' p' N' B6 h: g
  ]' J) q3 ]% J8 H1 I" j- z
其他程序段。。。。。/ Y: ?' f" j: ?
- F0 W( p# N2 l$ \, H: l$ r) f9 w+ C
   free(x_d);
4 s8 I4 C. V4 E( c1 l+ ]
' U8 H" {/ ]+ x/ \: |, T$ A使用DSP侧单独调试功能,验证动态申请没有问题,& D) ]/ h, x5 H

; J1 M% G+ T" `6 M, Q但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。
# c8 B* U; p  |
9 K5 z' K! {7 M! D# b5 J9 {/ v) {
4 |3 W0 j/ G9 k% ~8 w& N" J
/ r3 n3 T& O4 u( r

- s# K  g: N+ j* W
& P. S. W7 o5 G3 L1 u  x/ q
: x. s* ]% B* c: ~% f9 w/ l  ^. p/ k1 G% W; r# o( g
1 W7 i1 D! |' b: S# Y
. H- r! d) J# P* o5 a- ^
0 t. W% A& ~+ p6 N& T! g
分享到:  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 */* ~5 c) U$ l: \' s8 h2 x: Z
Program.heap = 0;
+ v4 x+ G% Q0 ~( d" P7 [: I9 pProgram.argSize = 100;  /* minimum size */  C0 U+ x) M& d9 a: s7 L# a5 ]
Program.stack = 0xF000;                   //我改到F000  也不行
回复 支持 反对

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

积分
1093
地板
发表于 2015-10-28 09:51:31 | 只看该作者
/* create a default heap */
2 [3 N1 o! H. }2 w% Yvar HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');* l- U# g8 `9 R4 A+ M% C1 t
var heapMemParams = new HeapMem.Params();
3 d7 Q( Q* F, E) _# u. }heapMemParams.size = 0x4000;
$ G+ D+ S+ [) Y1 G$ Z  A0 M+ ]; D$ o* F; v6 V- f& Z! G8 ^
var Memory = xdc.useModule('xdc.runtime.Memory');
) f+ V  E& m; k4 R7 r/ d8 SMemory.defaultHeapInstance = HeapMem.create(heapMemParams);( V6 o  U6 P+ K; ?) Y% B0 o
/ I2 d4 u6 Z% C- q1 u! M$ }- s0 t" N
我大约calloc  每次共计大小为5K*16bits,
/ {( ~" `. z4 V9 z, O" n而默认配置才0x4000、需要改大。' n9 h# b2 `  B% A% t

! Y' w3 T1 c# [7 J4 R3 z
回复 支持 反对

使用道具 举报

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 | 只看该作者
补充说明
7 v+ ?/ v2 w  ~7 K9 T1 G( _我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下
) J" J3 S7 u+ O, _6 y(不过疑惑的是,为何单独DSP仿真就没有问题呢?)
9 \! o0 G, h/ _( s

* v+ H8 Z$ U6 a( Z5 I是不是需要在DSP.CFG中进行配置
1 T: e( g: L+ C我现在的配置为2 U8 m# ^2 G) e! a' H: X" m; W2 b0 H: l
6 a7 G' x- b5 r4 u, I
/*3 P9 q6 P! y8 J7 u, S
*  ======== Operating System Configuration ========
$ K; B" R, I( u* H( V: U4 i */! l+ Y9 t$ G3 @2 s; ?

* d- B2 z+ h) r  C8 ?$ {' p- C0 o/* no rts heap */
% O2 t$ o/ O8 @: U3 E* b/ S5 n7 SProgram.heap = 0;
3 t5 q1 Y1 ?4 [+ D# V% lProgram.argSize = 100;  /* minimum size */
0 k" L; }( P: E3 \8 GProgram.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大
8 Y, y& F9 t% C! a2 m
0 R9 o2 f& _2 G/* create a default heap */
  N' w+ |7 h: w, ~" t" w4 cvar HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');1 `4 l  ]* n3 ?1 `
var heapMemParams = new HeapMem.Params();
4 Q, M& `. t: J! P2 JheapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大7 H) B9 A5 ?( I# J; I+ O

% ?% f* o! d9 k  W5 ]
var Memory = xdc.useModule('xdc.runtime.Memory');, e2 @) M: N+ t
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);
  D; N" u+ u) i5 I$ ?: O5 i7 J0 A
& w$ k* V+ A$ x2 i% l/* configure System module */  X2 I: `; c$ D6 i8 A& ]
var SysMin = xdc.useModule('xdc.runtime.SysMin');! S8 s( z' ?+ E. c, H: }. {1 s5 c
SysMin.bufSize = 0x1000;
, s7 F" }: v. |) nSysMin.flushAtExit = false;
9 a9 }( r( y# h% i) K* X: e) y
) j" {) E8 o8 B# M' M& T: q$ uvar System = xdc.useModule('xdc.runtime.System');9 J6 J: _! I+ p
System.SupportProxy = SysMin;# c* F6 B" W/ D5 ~# w+ i
' l9 e* a8 C6 N' g
/* configure SysBios to use the lower half of Timer 1 */& v$ f0 w; S8 p  O
var Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');( I# |  ]$ Y% R1 q
var Clock = xdc.useModule('ti.sysbios.knl.Clock');
, R' x  \* c8 e3 X  BTimer.timerSettings[1].master = true;
$ n/ h6 c$ x3 |6 C" m& yTimer.defaultHalf = Timer.Half_LOWER;
  Y& u# f* G4 R+ J2 m% dClock.timerId = 1;
3 B3 k$ p2 w% Q  W& o. V1 w1 v0 q4 Z$ V9 X, M) i: W! H" l. k

% |; I3 H. x: s: c# V" d7 d) x/*
9 g. h0 y$ G' l5 R& K7 t5 J *  ======== Miscellaneous Configuration ========
5 ^( j7 \% `, ]& [ */3 N2 \* f5 ~# ]: @/ w6 _( P4 s3 I

. x  j# S0 Y6 M$ B( e8 ]4 e- H0 S. Z/* set default diags mask */. W0 l0 t, o; `
var Diags = xdc.useModule('xdc.runtime.Diags');
4 P( R3 o2 v% Y5 {var Defaults = xdc.useModule('xdc.runtime.Defaults');
& i+ |# x2 N5 m+ P) O  X4 f- d- p* N. G% m, T9 ~3 R6 v
Defaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;! u) D. [+ V/ o% B
Defaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;
! U5 T( D( t1 z6 Y0 T4 L4 LDefaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;
7 F% Z) K! h- j, R' S* yDefaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */
) t) L, M' p  b: q% [Defaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */
2 u- k; T5 a9 t  \7 D, b8 j$ yDefaults.common$.diags_STATUS    = Diags.RUNTIME_ON;
; T# {' ~7 F# e( R! M- JDefaults.common$.diags_USER1     = Diags.ALWAYS_OFF;5 R" ?9 d9 O: }3 V) w3 n8 V6 O* q7 T  m
Defaults.common$.diags_USER2     = Diags.ALWAYS_OFF;
  Y( X/ K0 v5 P" ]* @: v0 e/ ^/ Q& hDefaults.common$.diags_USER3     = Diags.ALWAYS_OFF;" f0 ^) }. i. {
Defaults.common$.diags_USER4     = Diags.ALWAYS_OFF;4 ^) A$ w+ q: ?
Defaults.common$.diags_USER5     = Diags.ALWAYS_OFF;
% Y# o: p* N$ s- K6 M4 z. A9 }Defaults.common$.diags_USER6     = Diags.ALWAYS_OFF;: a5 Z$ {% ~1 f  w4 o9 }; @' S
Defaults.common$.diags_INFO      = Diags.ALWAYS_OFF;
7 t  s6 J- E6 ^9 iDefaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;
& c. `- j. @$ K" R6 L/ E; y, r' t& z
/* override diags mask for selected modules */7 s  F( B  d' D9 Y
xdc.useModule('xdc.runtime.Main');
2 e/ V# S5 o& S8 N, lDiags.setMaskMeta(
9 O! U7 K9 D) a- _# A    "xdc.runtime.Main",
) K  d7 x! n4 Z  k% l% h! r! `    Diags.ENTRY | Diags.EXIT | Diags.INFO,
5 T7 O( n: P$ g. q) e9 P3 Z- j    Diags.RUNTIME_ON: z# n$ S$ D: J
);
- I- y- b) p. h, C
2 ]5 S; F: N. P4 v: B2 C6 x# @  ivar Registry = xdc.useModule('xdc.runtime.Registry');
( x( q2 R; @7 U: @" x( }  _Registry.common$.diags_ENTRY = Diags.RUNTIME_OFF;
/ a5 w' J: R1 L# y& A: ]Registry.common$.diags_EXIT  = Diags.RUNTIME_OFF;
" Q. I0 @/ y1 R% jRegistry.common$.diags_INFO  = Diags.RUNTIME_OFF;2 |  a' Q/ B' |  b# h" B- M, v
Registry.common$.diags_USER1 = Diags.RUNTIME_OFF;
( _9 M& y; ^% x' ]% u+ O
9 R6 L8 ^/ t% z4 B9 A( l/* create a logger instance */* l  Q$ C; Y& c5 X  A" T' X& u, I3 z1 ~
var LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');$ u, k8 N2 L8 Y" ^4 I
var loggerBufP = new LoggerBuf.Params();8 m, @& o9 O( ~2 G0 Z, E
loggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */
3 _& N# N; T* ~( Q# RloggerBufP.bufType = LoggerBuf.BufType_FIXED;
1 h; E: m* F: P; p! D4 {# u6 V/ u
var appLogger = LoggerBuf.create(loggerBufP);
7 r" B7 K0 ?. u5 VappLogger.instance.name = "AppLog_Core1";, j* f* r( e4 v5 k3 V5 q' D- [
Defaults.common$.logger = appLogger;$ a% D) Y7 @8 S4 P
Memory.defaultHeapSize = 0x8192;   
) x. n6 b7 p! T, U! X' QIdle.idleFxns[0] = "&LEDStatus";
+ `1 [$ o4 C: i+ O; d0 g, @Cache.initSize.l2Size = Cache.L2Size_32K;
1 G8 u; g" r- b) p  o9 q: a: O9 x; D. C! g2 E# p
回复 支持 反对

使用道具 举报

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

本版积分规则

点击跳转“创龙科技服务通”

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

GMT+8, 2026-2-22 19:22 , Processed in 0.046872 second(s), 27 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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