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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2015-9-4 08:33:31 | 只看该作者 回帖奖励 |正序浏览 |阅读模式
创龙工程师你好,我在OMAPL138单独调试DSP程序(使用SYSBIOS)时,在任务中使用calloc函数动态申请内存,用完后free,类似如下结构
6 n5 |# {* c( I' u2 @3 l7 x* w. S0 C
    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //256) [( W: r' f; N/ d0 L% A! O
- g2 H3 G+ l5 v8 S# q
其他程序段。。。。。% {+ o& n5 d+ Y$ M2 W9 o

: ^6 S  E8 U+ j: \5 ?! l* R$ h) ^3 l4 p   free(x_d);/ F& J$ {# u' Y+ S0 Z
+ c4 a, C) O! a
使用DSP侧单独调试功能,验证动态申请没有问题,* x' e+ w9 X* q8 R( O

, Y! s8 h9 Q+ G' V但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。
1 z5 W- r" O: f! W" S; @) z

- V: N. c9 R. v* z$ q* m4 \) ^8 }4 I# [3 `1 Z( V2 P7 Q
7 ?4 {$ h; R3 I8 z

% h6 n$ j# x# |$ t/ s
: ?; N; Y+ x6 ]& q! W
; M2 F) S) u' q; s, }+ G& t* u' }

! }2 u; Z2 e# j& N; ?5 E; h5 L0 `5 h! a. e5 O& p5 t% T0 {! E  |

: G% U7 \+ z. ?* Z
分享到:  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 */
$ C$ W3 ~+ v/ JProgram.heap = 0;3 [8 ]* r4 m9 `8 \  ^  W9 Z" J
Program.argSize = 100;  /* minimum size */- |# X6 L% t' U6 J$ V/ r
Program.stack = 0xF000;                   //我改到F000  也不行
回复 支持 反对

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

积分
1093
地板
发表于 2015-10-28 09:51:31 | 只看该作者
/* create a default heap */
9 y' k! |4 W! [2 C& _$ `var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');6 I: P6 S5 V5 [0 Z4 M& Z8 D
var heapMemParams = new HeapMem.Params();
. ?* [3 z6 M4 [heapMemParams.size = 0x4000;) E/ C: G) Z+ n; j6 p, G

1 D; p# y) X1 r7 Q, \var Memory = xdc.useModule('xdc.runtime.Memory');( o5 o' `5 W1 J4 ?9 t8 H
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);8 L& ?" o( q; _& w0 O4 p) K
  E/ B+ E; Q: @% `
我大约calloc  每次共计大小为5K*16bits,
) O+ a( E! K% u& v  b* l2 J+ m6 u而默认配置才0x4000、需要改大。
0 E1 y+ V- z  m
( ?( A% ?9 J+ p
回复 支持 反对

使用道具 举报

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 | 只看该作者
补充说明
' Z4 ?0 c- x$ p7 s+ L- m我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下
, u8 F9 O8 z! m(不过疑惑的是,为何单独DSP仿真就没有问题呢?)
) P2 `# p' a: Q2 G

8 i& A* r7 o* F9 ~& I  B/ \是不是需要在DSP.CFG中进行配置! z3 c3 e& v( s& P+ w* N
我现在的配置为1 U: e( \: C- F: ^0 i" x

4 b- V" F2 ]) h% M- `  U/** ]0 F+ S$ X- K' W' Z
*  ======== Operating System Configuration ========
: q8 w5 U4 ?& Q4 X: L( _8 F */
& t, l. b/ d: `2 ~, k% k3 ~+ t3 L$ c
/* no rts heap */
2 P% D) O3 V& f: a+ d: O. KProgram.heap = 0;
2 J& h7 I1 @4 n2 x/ p$ OProgram.argSize = 100;  /* minimum size */
/ @+ t; s9 r. `# [, rProgram.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大
$ D: X% h9 d/ o1 g$ s
$ I: K8 C( L5 L$ `! N0 ?/* create a default heap */
, V+ W8 ~+ F3 i0 g/ _* Y! [2 Nvar HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
  U* y  y, o5 v1 U! q. \var heapMemParams = new HeapMem.Params();9 R; M; l( o' l+ [1 r+ e
heapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大
; l, L; ^: \. X6 V+ q+ T1 q. q. Q; ^" \: j2 G& ^' {# @4 c3 d4 F0 ~
var Memory = xdc.useModule('xdc.runtime.Memory');; X8 |+ X  |! a" i
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);
( F& h, ]2 I. i3 Z
. X8 X/ @+ X: w1 j4 e7 I( \) h3 H/* configure System module */# M* H# o1 f( L2 y8 m- ^: y
var SysMin = xdc.useModule('xdc.runtime.SysMin');0 z" n6 ?! w/ Y1 f7 D
SysMin.bufSize = 0x1000;! O0 L# Z: f3 q3 l" b  ^: i( u* B
SysMin.flushAtExit = false;  x/ h. t$ m5 q( _. ~% j
. l6 {* ?: v6 a; v9 {
var System = xdc.useModule('xdc.runtime.System');
' |9 y8 E. D. ^4 W3 M6 p4 tSystem.SupportProxy = SysMin;
$ N0 \% T+ y: V* m# H% e
- i3 [3 o$ m. L9 o8 U/* configure SysBios to use the lower half of Timer 1 */) @7 s4 s2 C. g, K! i, b* n3 I
var Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');
8 N& W8 J& q# \4 m9 \0 Uvar Clock = xdc.useModule('ti.sysbios.knl.Clock');
# q6 ?, D' F" _Timer.timerSettings[1].master = true;
7 j5 z) R' A) l" ^( V4 w' wTimer.defaultHalf = Timer.Half_LOWER;
% Q' [3 W0 L1 \3 H% H) rClock.timerId = 1;
2 f4 ?' E' Y2 C8 F% g
# x  V% L3 I8 I' _7 S  m" D- R$ `
/*
" n; Y" y5 V9 t2 ^% P# Y/ _/ m *  ======== Miscellaneous Configuration ========5 b' V4 S7 \( G; t+ ~
*/
; Y; O. }+ x# G1 y+ Y' z/ U
2 F' g( c0 z! \  O9 e/* set default diags mask */; ?% h8 c3 X- s; [" D
var Diags = xdc.useModule('xdc.runtime.Diags');
% S, T: C; H+ a) wvar Defaults = xdc.useModule('xdc.runtime.Defaults');
8 x2 t2 n( @/ b9 D
) H1 ~4 }; D" x1 C: S+ C+ kDefaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;
  O5 v$ ?' r1 E. V0 bDefaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;8 l: |5 Z0 L; d
Defaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;
4 D% v3 D/ m$ P; A+ s" fDefaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */- k1 q/ F! c7 f- f! K) q
Defaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */+ B# I, X/ C# y: x8 N
Defaults.common$.diags_STATUS    = Diags.RUNTIME_ON;! ?, p3 E; l& H4 ~. p/ B9 y
Defaults.common$.diags_USER1     = Diags.ALWAYS_OFF;, q3 d3 E, H8 p' F) }
Defaults.common$.diags_USER2     = Diags.ALWAYS_OFF;/ K+ S. U  ^0 O1 C* J
Defaults.common$.diags_USER3     = Diags.ALWAYS_OFF;. I. z. y: I9 A! L" V% _  X
Defaults.common$.diags_USER4     = Diags.ALWAYS_OFF;2 v* E7 ?  J, o
Defaults.common$.diags_USER5     = Diags.ALWAYS_OFF;
6 R% \* R2 x& eDefaults.common$.diags_USER6     = Diags.ALWAYS_OFF;
- v2 y- K, y8 L9 G" W) }Defaults.common$.diags_INFO      = Diags.ALWAYS_OFF;
% V+ T% S& v% P) B! aDefaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;, c- m: k3 b0 X

0 @. Z3 z. g( v: l/* override diags mask for selected modules */! t: F  c: x0 ?7 ~  @5 z* n
xdc.useModule('xdc.runtime.Main');0 J" a6 f- H. U4 N
Diags.setMaskMeta(
) t5 u6 o" C* e    "xdc.runtime.Main",
2 a/ Y2 Y6 }" C    Diags.ENTRY | Diags.EXIT | Diags.INFO,& @! K8 E, X7 c$ ]
    Diags.RUNTIME_ON
- }$ u5 d: [& |- l. ?# J);6 s: U. ~  t& E/ D: _$ B
7 S' }3 d, o  R
var Registry = xdc.useModule('xdc.runtime.Registry');) R4 f* j1 Q. p& V* a
Registry.common$.diags_ENTRY = Diags.RUNTIME_OFF;$ D( {7 C5 d0 M! ~; A1 X+ g8 W, ^
Registry.common$.diags_EXIT  = Diags.RUNTIME_OFF;. }5 x9 P8 r' h8 L2 T" I
Registry.common$.diags_INFO  = Diags.RUNTIME_OFF;
2 z- O, J' Q& w$ z3 n- g2 CRegistry.common$.diags_USER1 = Diags.RUNTIME_OFF;- A" V+ j8 _: y  S1 {
5 l1 V+ \" \- K' z2 F9 u0 D2 N
/* create a logger instance */
( S' }" }. ?- e+ Jvar LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');, u, ?/ V, {& F1 V
var loggerBufP = new LoggerBuf.Params();% b+ x) G/ `8 n7 T2 p- ^7 @* q
loggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */
( A5 X: v2 e2 G- aloggerBufP.bufType = LoggerBuf.BufType_FIXED;9 k& @( s3 o5 P; h# A
$ m' \, i6 J" R# c, d
var appLogger = LoggerBuf.create(loggerBufP);" W0 s  B6 Y$ P0 }# F
appLogger.instance.name = "AppLog_Core1";' Q+ V( w  h3 a, V% i7 J
Defaults.common$.logger = appLogger;& s# z5 N7 g  Z( M
Memory.defaultHeapSize = 0x8192;    0 X" I5 F  W& `. y0 o! s2 b) Z+ O, x
Idle.idleFxns[0] = "&LEDStatus";
% U0 I, c& f7 R: t- u$ d5 V, s0 {Cache.initSize.l2Size = Cache.L2Size_32K;
/ ]" u* k) A4 R$ q4 `
1 _- U  i; C/ d2 C
回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2026-2-9 08:48 , Processed in 0.042437 second(s), 26 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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