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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2015-9-4 08:33:31 | 只看该作者 回帖奖励 |正序浏览 |阅读模式
创龙工程师你好,我在OMAPL138单独调试DSP程序(使用SYSBIOS)时,在任务中使用calloc函数动态申请内存,用完后free,类似如下结构
, `) }& R- b8 n9 w* s0 h1 u" E( l+ w+ U: i% g. P( |; ?
    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //2569 q8 |! L" {( t, v; y+ t- G$ v
! D! o+ ^% C/ l6 [8 v# D
其他程序段。。。。。
& I! Y% {/ M. f' h
* ?5 H5 h8 x1 c3 H   free(x_d);
" o5 t9 J6 f$ c9 m2 O" z2 R6 A8 r* l4 M9 w
使用DSP侧单独调试功能,验证动态申请没有问题,
7 p0 r/ e6 ?2 G( d+ L+ ^9 s9 N5 `1 y4 {" v( D7 F
但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。
! R/ b  ]$ q1 }3 ~" q7 Z7 @

& w1 i2 r. O/ I+ X: F7 @
3 w* H+ U0 N, H4 S
8 h' u# L2 L0 T' h# ^, r. f. m- G% b& p+ g9 q. C' W, O

9 u% H3 Q5 `9 T. w* D. r' @9 h% n; I6 r8 B9 s/ k

, ~) A5 }$ X( K# \+ ]: w8 ^
4 o( U* {: S$ f
  N1 _9 A( c- c( Z
/ y/ w$ b$ _) H/ T- p! R
分享到:  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 */
( v$ D" Q8 A# q8 kProgram.heap = 0;3 U) Y' h6 P7 O( @" T! c8 j
Program.argSize = 100;  /* minimum size */
, \/ S! a# E) g1 JProgram.stack = 0xF000;                   //我改到F000  也不行
回复 支持 反对

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

积分
1093
地板
发表于 2015-10-28 09:51:31 | 只看该作者
/* create a default heap */$ T: h( b' l% ^% |/ a% U0 R: E
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');! z6 z3 _6 L, b; j
var heapMemParams = new HeapMem.Params();8 Q" Z. z6 p0 j) n
heapMemParams.size = 0x4000;" W: p3 X( k  A5 k. y, v$ I$ K( e; {$ W

% Q4 u; ~) ~. m4 G2 G% q* v! Lvar Memory = xdc.useModule('xdc.runtime.Memory');
9 {4 K$ R, m8 C) c( {Memory.defaultHeapInstance = HeapMem.create(heapMemParams);
$ a" h4 H; o# l# Q' L% P! i
6 @7 W0 _; E' F  g我大约calloc  每次共计大小为5K*16bits,$ M; e* J0 D" Q2 h2 ~$ k
而默认配置才0x4000、需要改大。
; O1 c' H7 B' d& r5 D: P# k$ Q) Y
- o" G; t+ w- P0 v. Z0 @" l
回复 支持 反对

使用道具 举报

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 | 只看该作者
补充说明
0 w7 [. k6 H! Z* @' J我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下5 X) `3 n8 U; K7 {% ]/ ^; w0 C' P
(不过疑惑的是,为何单独DSP仿真就没有问题呢?), j- A4 B7 s& V/ G) h# s- q
$ L* f2 @' Y& h
是不是需要在DSP.CFG中进行配置
- `' @' F* O( i  _8 Q7 Q* `我现在的配置为
7 l4 p5 U4 i$ @* ^4 K, {: l$ o& o& y& `3 B  g5 ^! `" Y
/*
6 V* s, U5 ]/ A *  ======== Operating System Configuration ========7 Q& b; l& d0 v9 ?- n
*/
' d) Y" T7 N' G* }, D& F- v0 o: W# M& `7 s9 O: R. V
/* no rts heap */  s0 k# H2 }: I. ]' N8 c- k& X) ?  u9 A
Program.heap = 0;
/ ~+ w2 N, b2 h* l( WProgram.argSize = 100;  /* minimum size */# c0 y3 d+ J! X# `
Program.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大" k6 Q/ [. X3 o( ^# B

# R- J8 a' w/ e  x/* create a default heap */, L  w. H: J, G% y0 F
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');, {% G) |5 P* r7 D
var heapMemParams = new HeapMem.Params();2 l# h2 ~" j% H2 ~% z
heapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大
2 |2 p. v5 E3 W5 e; ^1 O4 i3 r- S
/ ?! u, i1 Y2 z2 A  ~
var Memory = xdc.useModule('xdc.runtime.Memory');
# p: m1 O1 d5 O% @1 i& ?5 _2 y; \Memory.defaultHeapInstance = HeapMem.create(heapMemParams);* c4 {  x% Q, ]8 r5 R4 P+ N

1 s  n& g4 Q/ b+ g/ c7 G/* configure System module */
- j* u2 T& ?! X' D1 ?) }var SysMin = xdc.useModule('xdc.runtime.SysMin');
: o! A7 M/ }  t  xSysMin.bufSize = 0x1000;( A) U5 W7 k  H  ^6 Z  _4 ?
SysMin.flushAtExit = false;# v' i2 e4 g/ E6 N- i8 k: M

2 L: f( a; I# Z& w. o; ?var System = xdc.useModule('xdc.runtime.System');+ J2 v& v  a+ K% n! A5 @
System.SupportProxy = SysMin;
3 Z! H% m- Q8 b! @+ W4 {. D: n. K0 N: v( G, |
/* configure SysBios to use the lower half of Timer 1 */
- i4 ?. x/ \$ i8 v; U! B! Svar Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');8 _# C+ _, }6 V# s' f
var Clock = xdc.useModule('ti.sysbios.knl.Clock');% _& o; @: {* s9 J
Timer.timerSettings[1].master = true;: @6 e8 ^7 U% k/ v9 X: w
Timer.defaultHalf = Timer.Half_LOWER;
# M+ G  m6 j& @) WClock.timerId = 1;
" P9 r% I# R, J, @% [( P0 h. H3 _4 U$ x' Z* M/ X) _! S8 u
/ F0 u( q1 D* `3 X2 d4 u
/*
0 D) a6 N- R3 x$ f, _1 ` *  ======== Miscellaneous Configuration ========
/ p2 R9 R! V; a" R8 K */0 g: k8 t: A  O. \- z1 r
) n* u+ q; _$ O  ?2 G1 T; p: z
/* set default diags mask */3 J. \8 \+ o4 b6 e
var Diags = xdc.useModule('xdc.runtime.Diags');) }* o" |% i1 a' T& L
var Defaults = xdc.useModule('xdc.runtime.Defaults');
; O: b0 q+ |# d
" ^% U2 @9 p% u9 }- H# `Defaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;3 s+ P- n2 G$ {6 R/ ~) g# t
Defaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;7 g6 f/ n6 I6 O7 ~2 Q8 C/ c
Defaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;
0 j; U3 Z. ^. W0 Y! u2 YDefaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */' k" h  l* H$ T3 {; ^
Defaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */4 }; ?( D$ `/ a# m1 `2 l: W
Defaults.common$.diags_STATUS    = Diags.RUNTIME_ON;% A1 l# `* I% H. k; j: q+ R
Defaults.common$.diags_USER1     = Diags.ALWAYS_OFF;( S' @# d7 n- {$ ?0 a! Q8 S
Defaults.common$.diags_USER2     = Diags.ALWAYS_OFF;
" t: F5 A  N: s- G! N( {3 L3 Y  P* T% mDefaults.common$.diags_USER3     = Diags.ALWAYS_OFF;
% w" J1 R/ j! \& E7 JDefaults.common$.diags_USER4     = Diags.ALWAYS_OFF;+ I: V4 J7 L3 c, B
Defaults.common$.diags_USER5     = Diags.ALWAYS_OFF;. [$ Y( S) }* Y9 |: [, ^: ^1 N
Defaults.common$.diags_USER6     = Diags.ALWAYS_OFF;0 G0 X0 T& U5 a4 |
Defaults.common$.diags_INFO      = Diags.ALWAYS_OFF;4 w# }: Z0 w" R
Defaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;- c! C2 R! L9 [' ]& m8 X

2 G0 J' ~+ y& P# A9 T) E/* override diags mask for selected modules */
2 r" R" k2 b- d5 }, }xdc.useModule('xdc.runtime.Main');
: I) R, ]; S4 {3 k' GDiags.setMaskMeta(
/ u. x6 X7 G. J8 u6 F# y5 r. n  {    "xdc.runtime.Main",
  ]% ~4 Q2 [, o- J# M+ v- a! w    Diags.ENTRY | Diags.EXIT | Diags.INFO,; ~& E7 b+ }3 S! R1 J8 y
    Diags.RUNTIME_ON
- m. e8 T1 k# n);$ T2 V# o' m$ h! W7 j7 P3 c

! n0 E% B% g9 t7 Cvar Registry = xdc.useModule('xdc.runtime.Registry');% {* _, `4 i3 f- f2 [' D
Registry.common$.diags_ENTRY = Diags.RUNTIME_OFF;
# i% J) p4 F) N; X1 L7 `Registry.common$.diags_EXIT  = Diags.RUNTIME_OFF;+ K# G. b3 h' H8 V+ D
Registry.common$.diags_INFO  = Diags.RUNTIME_OFF;
2 n3 A5 H! o. O9 m" j9 e; n& \5 E, CRegistry.common$.diags_USER1 = Diags.RUNTIME_OFF;4 S* e* J' b7 V3 e5 ~, j

" _$ y+ O5 I4 ]0 B" I. `) O/* create a logger instance */
- ?$ y2 j' X* E, y1 Xvar LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');
- c3 b: j/ S, n6 Gvar loggerBufP = new LoggerBuf.Params();  k; V1 m6 G! b$ {2 G7 D' m& ?! m
loggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */
( `8 S! h% d8 |( Z% U4 n9 GloggerBufP.bufType = LoggerBuf.BufType_FIXED;
3 a/ `  c1 u7 r& L0 a! y& t0 Z5 V" l" F( Z( v$ i* P% G
var appLogger = LoggerBuf.create(loggerBufP);
2 c+ k+ P2 ^. yappLogger.instance.name = "AppLog_Core1";0 ]& @' ]# i- O- {  o2 e
Defaults.common$.logger = appLogger;
. `4 Z2 {0 P6 t8 s: h# n( h9 AMemory.defaultHeapSize = 0x8192;    7 A# J; y, a1 R. o' s$ ^/ l" T
Idle.idleFxns[0] = "&LEDStatus";! M4 u/ ]8 y% p, A# `
Cache.initSize.l2Size = Cache.L2Size_32K;- y; S: O  s9 o

: s. v) B5 Z" ^* U+ k
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-12-8 13:01 , Processed in 0.042875 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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