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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2015-9-4 08:33:31 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
创龙工程师你好,我在OMAPL138单独调试DSP程序(使用SYSBIOS)时,在任务中使用calloc函数动态申请内存,用完后free,类似如下结构9 V; [. d8 _1 s
, M" H1 ~+ F5 _0 e( o* E3 {
    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //256  Z/ m" h3 u4 ?  D. q

+ Z" |" u  s4 }7 {  r5 }6 \3 O其他程序段。。。。。
% B0 Y( H8 O5 N . E( e. E; W) _) E5 m
   free(x_d);
1 {, g& q7 ]* `' B* x, _, E3 w8 Z3 r* Y
使用DSP侧单独调试功能,验证动态申请没有问题,
- O$ f) z6 [! ~) v9 Z6 y* i
* P, E* z1 C* x0 c" P! X. w$ x但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。
. S1 a8 ]) F& U1 s
$ e6 m) X$ l- n, i
) J* Z  R8 b/ N0 t$ i7 B
" Z6 g! D- y4 c$ D# o+ D

' ]$ @; [" J# y+ R% H: X0 I' d4 ?& C. e

% W6 X2 u# k( C8 y- `" ?
* p- w: s4 h$ H2 w6 A
7 x! A; [6 `! Z4 T( J" H
& K: a- a2 K" W
/ t; X6 A! X7 v7 _  B+ U8 K
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2015-9-4 10:29:21 | 只看该作者
补充说明
. b6 R. x/ D! ?, ^, l* h我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下& r1 H3 [3 h7 d  O# q( Y; ^0 L
(不过疑惑的是,为何单独DSP仿真就没有问题呢?)8 }, K2 f7 |# f! B- o
9 T, R: T0 t' r
是不是需要在DSP.CFG中进行配置
8 G4 T8 m2 C2 F% V. K# Q我现在的配置为
! E3 V  z2 m" V: U* {  ^: W4 H( Z( p- i5 e7 R
/*' }! d, A# o/ h3 k0 A% h  B( R
*  ======== Operating System Configuration ========
5 D2 `( S: \& e: j- }- w, n- K */
) P( u. J) ]4 _" \# I: O% y
! ^: }" ?9 ?& |; r6 Z) u3 k/* no rts heap */* w) Z# I) }8 Y  Q/ \
Program.heap = 0;
; T+ w  w+ Q4 fProgram.argSize = 100;  /* minimum size */7 ~) q7 s, Z2 l- }1 m
Program.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大
4 W; _& x* X( V4 ^# J9 v: [) V: q6 P! s" i9 Q& c( {/ I* Q
/* create a default heap */1 g: t0 h! i4 [/ A
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');$ P! C3 o; T) m5 w
var heapMemParams = new HeapMem.Params();: G; w' y/ \( c# N- s# ~& A
heapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大1 B$ f' K- {  U( ^2 N: K
, {/ U3 E6 `+ G
var Memory = xdc.useModule('xdc.runtime.Memory');/ V( I- u* J+ l& z4 R' Q  H8 b
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);
# Z5 G# j- b9 x
/ P" n" e7 U+ F" e/* configure System module */: G+ l7 Q8 a7 _4 Y) T/ P
var SysMin = xdc.useModule('xdc.runtime.SysMin');, x+ |& R  d1 G$ ~
SysMin.bufSize = 0x1000;
9 r# Z: \" i( C( L4 fSysMin.flushAtExit = false;6 H" o" B' v. O9 P9 \% [: w
: A6 c+ r3 e2 n: C! u7 X+ {6 d0 g  @
var System = xdc.useModule('xdc.runtime.System');7 E. r# K, k) h+ N( c# H  o
System.SupportProxy = SysMin;  M7 `: ~) V  L4 {$ M

% g& n2 ]$ E& U/* configure SysBios to use the lower half of Timer 1 */0 N, \9 \% D' o( Y; r* `" C
var Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');
' d, o6 X1 r, ?$ ]var Clock = xdc.useModule('ti.sysbios.knl.Clock');
+ H& {4 r6 O0 i! N: ?6 ZTimer.timerSettings[1].master = true;9 }# l2 f2 r6 M$ @
Timer.defaultHalf = Timer.Half_LOWER;+ J* \" i% i- L3 [
Clock.timerId = 1;6 b: n3 m" |( ]* e9 v" X) v

# e9 k& r( p$ [3 ^9 @3 M4 ?- N' O: X3 M0 U* Z
/*; E& s4 |1 |  A) \+ O# ?8 N/ Q
*  ======== Miscellaneous Configuration ========
& F; \) |0 @; P8 g6 } */
8 X- e5 W! \- z- d; i
9 U' b$ J- \  G5 k; ~+ y/* set default diags mask */
, F" T$ l: [! j' ~var Diags = xdc.useModule('xdc.runtime.Diags');
. q4 E; f0 H  U5 w% U" pvar Defaults = xdc.useModule('xdc.runtime.Defaults');
8 O1 H. J; M; O4 S8 ^& r- o8 Y0 D, F8 _3 c: t3 @  `' _
Defaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;1 z8 {  Z% M, h6 ~9 j
Defaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;/ X" E/ G' H1 M9 C
Defaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;
0 {0 c! }5 e& [" _6 fDefaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */4 m' b/ y! H$ `! E& o
Defaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */
4 V4 z# C" f  U8 S9 o1 H* Z0 `Defaults.common$.diags_STATUS    = Diags.RUNTIME_ON;
4 T1 ~4 \( Z. q7 @" tDefaults.common$.diags_USER1     = Diags.ALWAYS_OFF;7 d. f( m) L( a% O
Defaults.common$.diags_USER2     = Diags.ALWAYS_OFF;" a/ }! W: Q& Q$ I' F5 ?
Defaults.common$.diags_USER3     = Diags.ALWAYS_OFF;
* L# S. D1 ~) t8 LDefaults.common$.diags_USER4     = Diags.ALWAYS_OFF;8 Q; v# b; p' F
Defaults.common$.diags_USER5     = Diags.ALWAYS_OFF;
( A% P3 h: V  M0 XDefaults.common$.diags_USER6     = Diags.ALWAYS_OFF;& K) C8 C$ k; R' e
Defaults.common$.diags_INFO      = Diags.ALWAYS_OFF;+ i5 q. ^6 f& g% R9 j
Defaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;! c% j, t+ F) J3 P
/ h% }3 A; V2 W" y
/* override diags mask for selected modules */
: N2 \' n" R2 y: k& w% ~xdc.useModule('xdc.runtime.Main');) r: B. M$ N, J0 I- v/ c+ x0 \9 t2 w
Diags.setMaskMeta(. w+ S* }: N/ b
    "xdc.runtime.Main",
: r+ C+ J. N6 y2 T' c    Diags.ENTRY | Diags.EXIT | Diags.INFO,* n8 m' j- Z8 \  S
    Diags.RUNTIME_ON
8 c1 t- g) \) g6 P);
7 a- B" ?4 G' h7 U0 J8 {4 j. @3 v! A1 K5 J! m
var Registry = xdc.useModule('xdc.runtime.Registry');
: f7 W7 R( g. n) L- ERegistry.common$.diags_ENTRY = Diags.RUNTIME_OFF;# O7 C7 E0 s+ R0 d
Registry.common$.diags_EXIT  = Diags.RUNTIME_OFF;
0 L( V, [" l3 y& @Registry.common$.diags_INFO  = Diags.RUNTIME_OFF;2 \1 i$ G+ N/ \8 C2 f$ v$ Z
Registry.common$.diags_USER1 = Diags.RUNTIME_OFF;) W: D1 C. m9 W% {* S6 \; d7 t( R
  w" C* s( Y4 [0 o; b5 g) U. ~9 K  G
/* create a logger instance */
8 t" a8 f; _: `4 ?- M0 f# Svar LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');
" A1 w4 i; p" ivar loggerBufP = new LoggerBuf.Params();
( |+ |  g$ C8 \# E7 p1 C. g0 |loggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory *// g! J' Q+ A  l; {- R
loggerBufP.bufType = LoggerBuf.BufType_FIXED;
% N6 j0 q3 g3 [7 Y4 z  x- T& o9 e" F; n/ Y- A# v
var appLogger = LoggerBuf.create(loggerBufP);
6 y* X4 ]# A. s) j: p2 ?4 k& Z6 S( ?appLogger.instance.name = "AppLog_Core1";* g; ]: O( _: _. i
Defaults.common$.logger = appLogger;+ r6 G/ W0 L- v  i( r4 ]7 D
Memory.defaultHeapSize = 0x8192;   
9 @' M. n/ S; oIdle.idleFxns[0] = "&LEDStatus";
3 f: a. f" |& _+ D. n: ~; H5 LCache.initSize.l2Size = Cache.L2Size_32K;: I; k- k$ c" O; k# j: F+ J
- w# Z! f) Y8 k8 n5 l7 F6 ]
回复 支持 反对

使用道具 举报

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 */( b. R9 v! F9 y# B- h& {
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
+ h/ S; F# S1 E3 o2 l+ pvar heapMemParams = new HeapMem.Params();
2 x" `% b( t' T" M: E: FheapMemParams.size = 0x4000;
4 m3 d0 O/ S7 }3 ~/ b& \7 d9 e! |. ^! x% j2 J
var Memory = xdc.useModule('xdc.runtime.Memory');* W( c/ n) b2 [' \3 o; G
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);. ?6 W: k  {/ N3 y

- R% i/ R1 k( G4 i; i我大约calloc  每次共计大小为5K*16bits,( t, @& q/ J5 c$ `8 M
而默认配置才0x4000、需要改大。" B4 R* H3 Q, i: k7 ^

$ a0 o- F# n0 `- K4 r" C
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
5#
 楼主| 发表于 2015-10-28 16:14:47 | 只看该作者
/* no rts heap */4 d2 `; m  x# ^" {% K0 g0 S9 C
Program.heap = 0;9 I6 Z6 P+ `. i$ @  M, e5 Z: T
Program.argSize = 100;  /* minimum size */
% [: l5 ]4 \0 }$ `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-2 14:29 , Processed in 0.042956 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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