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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2015-9-4 08:33:31 | 只看该作者 回帖奖励 |正序浏览 |阅读模式
创龙工程师你好,我在OMAPL138单独调试DSP程序(使用SYSBIOS)时,在任务中使用calloc函数动态申请内存,用完后free,类似如下结构
" d) a& w1 q8 y8 ?! x+ g( x% j
& v" B8 A  T& m    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //256- F: P: y" N/ {0 Y8 c2 a4 {5 Z$ [

: [- t8 g1 D# `4 {& V: B* _其他程序段。。。。。
* a7 ~1 ^7 x9 T  V; t% h$ C% | $ W) |5 Q* o+ H4 `. J6 o
   free(x_d);: b& D3 P5 y* U

! @1 K" c" F" }使用DSP侧单独调试功能,验证动态申请没有问题,
1 \2 Q' p' _0 G0 @! @4 }: M
/ E- M; ^! A. x5 Z' H但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。
' @+ P6 p0 [6 N. ^1 }# O
  _/ F2 R* m, u5 V" E
  d; q4 w) B, t/ o9 O; {3 B
8 @# u7 e% e5 R3 h" n* E
- Z( s( F/ b' ^1 {, n1 W

& E- h: `4 J$ E% B- c4 q. {, ]0 U9 m$ C4 p9 Z! V
* e  |* z) T, x) u3 x+ K3 f1 n
- a! l2 r& d5 o- M- Y7 s  j; D
7 }2 Q3 g( c! \
2 g. j4 [) V% `% x0 W
分享到:  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 f& Z3 z; W  w* e& o9 _Program.heap = 0;4 o1 _4 x6 V  v6 w
Program.argSize = 100;  /* minimum size */
! F* F' I% ]1 V: \Program.stack = 0xF000;                   //我改到F000  也不行
回复 支持 反对

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

积分
1093
地板
发表于 2015-10-28 09:51:31 | 只看该作者
/* create a default heap */3 \9 V$ _! ]; Y
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');' _' i" J( U" K( N. d
var heapMemParams = new HeapMem.Params();
7 w9 ~4 J2 m9 c/ x3 `heapMemParams.size = 0x4000;
$ Y$ ]( p8 H  M( Z4 Z, A$ J1 @
+ ~! H& G/ [# g! ~3 n; X; w1 A3 jvar Memory = xdc.useModule('xdc.runtime.Memory');( m4 z, M, D: o( b3 {! c
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);' |* O$ j( n$ ^
2 B: ?' T+ q* S6 C/ F
我大约calloc  每次共计大小为5K*16bits,; R- @2 {' ^3 O( N
而默认配置才0x4000、需要改大。2 t4 t" v9 ~/ _6 \2 J
: _& a  y5 \  Q& U
回复 支持 反对

使用道具 举报

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 | 只看该作者
补充说明
; I" F9 S: j# w0 N我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下+ I+ {8 X# ?4 g& U) R$ e$ U7 D9 G
(不过疑惑的是,为何单独DSP仿真就没有问题呢?). J/ L  J6 f8 {' X6 g
. Y6 P/ X4 @% k/ Y/ G, M
是不是需要在DSP.CFG中进行配置7 c+ {1 l0 O- |5 y
我现在的配置为# I# F: E! q5 b6 K
1 B2 ]) I$ N2 d- J9 P- a
/*
$ i5 u4 B9 ~* M2 G0 z9 F *  ======== Operating System Configuration ========3 `" N$ w* M1 j7 P' |
*/) J) p, W0 R4 W0 K

1 H7 {+ G$ k5 I+ G. p( t/* no rts heap */
8 k; k$ ]$ g1 B5 S/ I" C# F" B& DProgram.heap = 0;* D5 s0 U; N6 e  ^) m8 K
Program.argSize = 100;  /* minimum size */6 J) p: s& L/ M
Program.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大! \8 t9 {( C$ R/ O" l

; h' s/ x5 |9 G5 ?! f/* create a default heap */* A5 j+ Q- \0 n& D5 q& G- q" t
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');* I! F! @5 l: _9 l0 {' p0 U
var heapMemParams = new HeapMem.Params();- N# ?+ v5 z, D, C. {6 j
heapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大
+ {  D1 u0 ~" E  Z- r
2 `) z0 [9 d& c, P9 ~
var Memory = xdc.useModule('xdc.runtime.Memory');/ N/ a- Y2 S4 f
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);
$ B, e/ C1 v  g# h, a
: ?7 `2 V0 K: ]) i/* configure System module */3 A0 C, x; {$ m6 c$ Y+ M: K5 D. F1 T1 F
var SysMin = xdc.useModule('xdc.runtime.SysMin');
# `+ ~4 q  g! B. ~SysMin.bufSize = 0x1000;
/ |4 _+ |  ~+ l3 l4 G1 Y6 [) zSysMin.flushAtExit = false;
% S2 F) _( O' O) y' }
6 [  Q' O' a9 ]9 u7 w8 ivar System = xdc.useModule('xdc.runtime.System');
! @! d9 j% a" E! ]! R* eSystem.SupportProxy = SysMin;
& o3 O3 |+ t- U3 F2 t! W, f9 \. w* K9 w* e8 `7 R" |
/* configure SysBios to use the lower half of Timer 1 */" p+ R, J4 X: z9 f$ X
var Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');" s6 w9 C6 [! T. `8 W! f4 M# u
var Clock = xdc.useModule('ti.sysbios.knl.Clock');
; c. m2 Q' i. P) D; O8 \Timer.timerSettings[1].master = true;
! K' ]( a! T4 X- XTimer.defaultHalf = Timer.Half_LOWER;# n$ I  G! I+ a
Clock.timerId = 1;, C% U2 m' E" ^# A2 Z. J

6 |3 _, J1 A/ U+ R% F9 K+ F) U7 Y, E6 I! t( B
/*
. g  ?# {3 B4 @) a *  ======== Miscellaneous Configuration ========
- r- _5 g  T  ~1 t */
& P4 v# j" z4 d6 r9 g0 P0 K$ u
; {2 x* s' y- ^' V/* set default diags mask */
4 B9 U& u" B" \+ ?var Diags = xdc.useModule('xdc.runtime.Diags');
  C: a* V0 A4 `var Defaults = xdc.useModule('xdc.runtime.Defaults');
' [2 {$ Z$ H7 B9 a/ \* K4 t( l: \7 m
- h0 ?5 I4 r+ k. H: t1 Z% g# ], L: ?( g; a: HDefaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;
: U1 k% Z, m+ j6 c4 w9 XDefaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;, D/ c: U$ H% M# s& n( T- C
Defaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;
* f* H- }0 Y2 K6 d, fDefaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */% T8 a& N( \2 H& k: P; _5 R$ j
Defaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */
! B& n& X  `* A+ r# c. e! ?Defaults.common$.diags_STATUS    = Diags.RUNTIME_ON;
0 J! l# l7 n! `) ]5 `* ^6 XDefaults.common$.diags_USER1     = Diags.ALWAYS_OFF;: P2 Z  \0 `: Q) U% ?
Defaults.common$.diags_USER2     = Diags.ALWAYS_OFF;2 V+ w2 ?6 ~' A
Defaults.common$.diags_USER3     = Diags.ALWAYS_OFF;
$ K1 f& }2 T9 V! IDefaults.common$.diags_USER4     = Diags.ALWAYS_OFF;
7 g- d  s2 s$ H3 u+ C. i+ Y7 XDefaults.common$.diags_USER5     = Diags.ALWAYS_OFF;
6 d- x3 ?6 P' {9 v' m2 VDefaults.common$.diags_USER6     = Diags.ALWAYS_OFF;
4 R; n" m5 N: G6 }1 y# m6 oDefaults.common$.diags_INFO      = Diags.ALWAYS_OFF;! V! ^- p% U! R: i5 R/ O
Defaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;
4 E  h2 I2 Y+ _# Y7 y. `
; A9 n2 d( n" N, Q/* override diags mask for selected modules */
) t+ P' o  S+ P$ P! ]2 b2 mxdc.useModule('xdc.runtime.Main');
0 h3 ^: @+ c% l8 ADiags.setMaskMeta(
2 V6 y6 ^7 n! j. i) p1 |2 F  F    "xdc.runtime.Main",
4 {7 ~4 h6 s! ]9 w2 s: A  X    Diags.ENTRY | Diags.EXIT | Diags.INFO,
8 @2 H1 t0 [5 ?; R    Diags.RUNTIME_ON  A9 O+ }  z! v0 e/ P/ B% u( I
);
7 k8 N( `% a2 u5 O1 v- B; H, E5 |0 q# f2 c  c7 O8 G
var Registry = xdc.useModule('xdc.runtime.Registry');' [! L* X0 J1 f! [+ W& @) X' x
Registry.common$.diags_ENTRY = Diags.RUNTIME_OFF;/ _) c- f' v5 c2 {
Registry.common$.diags_EXIT  = Diags.RUNTIME_OFF;" O  ^1 N) K& M8 p* z
Registry.common$.diags_INFO  = Diags.RUNTIME_OFF;" C* o$ N: k/ D; i& i; F9 b$ d
Registry.common$.diags_USER1 = Diags.RUNTIME_OFF;; j$ J4 _! G* m/ S  X  U6 P5 ~

) N: B' y4 t6 Y1 T0 W$ V; G( k/* create a logger instance */. E2 ]# h+ i" D8 z
var LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');
% ^. c: |* z5 V3 a# m: r6 ivar loggerBufP = new LoggerBuf.Params();, z- y! c: c3 i# q& C5 S* ^( f+ A
loggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */
* ~1 F. X4 {4 \) \; QloggerBufP.bufType = LoggerBuf.BufType_FIXED;
8 l5 h) r8 A" Y: ^+ s8 [& G+ l% Q; c
, `" a- O; _, Rvar appLogger = LoggerBuf.create(loggerBufP);
8 W  m) a% j0 u: ^. ]: ]appLogger.instance.name = "AppLog_Core1";
! d) U# g7 @: R" [5 N$ GDefaults.common$.logger = appLogger;" D& v( m3 {$ L
Memory.defaultHeapSize = 0x8192;    % b$ t! @' q5 C
Idle.idleFxns[0] = "&LEDStatus";: s8 n# V& A) h7 L1 I8 G
Cache.initSize.l2Size = Cache.L2Size_32K;+ j% X) c" C6 i1 W
% V! \3 X3 \3 d4 @: p- N1 I
回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2026-2-8 12:39 , Processed in 0.040758 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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