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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2015-9-4 08:33:31 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
创龙工程师你好,我在OMAPL138单独调试DSP程序(使用SYSBIOS)时,在任务中使用calloc函数动态申请内存,用完后free,类似如下结构* R; Y: R/ X+ T$ A# Y; ]  @
6 Z1 y  S) {9 X/ u; d
    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //256, b: J# F# x% C# ~; M5 D

) j4 B$ |% C8 a% B0 ]; h其他程序段。。。。。
7 w; ~9 j$ }( I0 `$ ]! M
. j% @6 o" I4 n; t6 q8 `/ n+ R   free(x_d);. l( r9 y4 I' [& p0 {
4 J( k0 e0 Z: d- x+ \
使用DSP侧单独调试功能,验证动态申请没有问题,. _) O5 P. T$ \- F. S, a  S
/ J) C2 ^: C4 Z4 R% F
但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。# H( k$ t8 ^. N3 r& \

( d5 e7 q! B8 q
' W9 G- T1 `1 y9 p: n
' L2 M' t* @( l' n1 Y- Y
* ~: K, L7 y. n' e1 O
# Q0 u' F4 N6 [! _0 U) P# t% Z8 |# D' l: N

  H3 k; F+ L2 r/ c' T6 N. k
$ L( ~8 m& d* R" A- ?
" {3 m  K" i, v8 ?/ U$ A* ]7 C- [) o% |& Y6 A* @2 _
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2015-9-4 10:29:21 | 只看该作者
补充说明7 S; l# J  J4 c9 B" Z! d" K& I
我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下; O/ B: m& n. `  D! K$ z
(不过疑惑的是,为何单独DSP仿真就没有问题呢?)0 p9 }& M# G8 N6 c0 r. f9 p2 c2 e
$ b: h: c) E4 O" ^* y
是不是需要在DSP.CFG中进行配置
3 m0 A2 S# \( r3 ~( z+ `我现在的配置为& A% a! F6 q9 E" E% l! z- X/ A

! |7 T. X' `# o' ~- J/*
: }6 y! N. G6 _. G3 W8 e- S *  ======== Operating System Configuration ========
8 q9 m" h: S- J% y& Z- B( }: h+ e */+ T% ^% W& Z7 }8 ~

  M8 `0 ]+ K7 H& u+ l) X/* no rts heap */% d5 Z4 B! |. e/ s8 J
Program.heap = 0;' q' o" C4 N2 L; R2 e2 ]8 f" u- J
Program.argSize = 100;  /* minimum size */: |. @2 D- H5 F7 R; k
Program.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大
$ N7 j( O9 d. c; N. {1 o. \+ Q- }8 N$ m& H  x! n
/* create a default heap */; V' F% o5 t- [. s$ E9 i
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
: z; L- f# z- c6 q6 J) fvar heapMemParams = new HeapMem.Params();! C1 S7 j/ _5 @9 M/ e' z
heapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大. Y3 z* Y/ S7 v& Z& `( n

8 \9 P9 v; u3 B; e. y0 X. d
var Memory = xdc.useModule('xdc.runtime.Memory');
2 e  _, K3 p& J5 KMemory.defaultHeapInstance = HeapMem.create(heapMemParams);
  }! B( u3 q7 a3 x4 k6 s3 N. M% O- ]3 s, }. W' ^3 e8 V, e0 d) M8 Z: ~
/* configure System module */
) E$ v+ e5 W' G5 Mvar SysMin = xdc.useModule('xdc.runtime.SysMin');; |. j, ^" g% W
SysMin.bufSize = 0x1000;
/ T  o( A* {0 X4 J  A+ ~SysMin.flushAtExit = false;; I% u/ H4 U  k, L8 _* o
, w. O* |: ?9 m, D
var System = xdc.useModule('xdc.runtime.System');! c  [% N6 n& W5 z
System.SupportProxy = SysMin;$ p+ }' s  P! U7 J7 r, Z& O

. w) X! q' B# ]; l; w3 j/* configure SysBios to use the lower half of Timer 1 */
6 T/ S6 g' c  R5 {! `7 E1 l+ mvar Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');- m2 t% v) z9 P0 V7 n4 d/ e
var Clock = xdc.useModule('ti.sysbios.knl.Clock');
' z2 x* F/ k0 F/ uTimer.timerSettings[1].master = true;
4 E( w  a6 ]& d0 VTimer.defaultHalf = Timer.Half_LOWER;4 z' m5 G' }8 T/ ~  _  X
Clock.timerId = 1;
8 f  M# D4 }. O" Y( \
2 X7 v2 j! ?/ ]# G3 L- E* Y  C% ]& C( z9 H; G
/*' d/ |- k; F& g* n' w; @
*  ======== Miscellaneous Configuration ========, Q$ q' p9 @" C- ^: Q
*/
( n( ]' k* B- S$ P& X; C4 y/ a) j( }+ S4 i% Z
/* set default diags mask */
5 ]) D/ S. T0 Y3 xvar Diags = xdc.useModule('xdc.runtime.Diags');+ a* e! c6 l- S+ J6 u! ?$ {# `+ |
var Defaults = xdc.useModule('xdc.runtime.Defaults');; d- n4 E4 U6 F$ K0 y

: f$ e) `1 l& K9 I9 g! @Defaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;
& ^. t5 c+ z8 Y4 f  v* g5 @# ODefaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;! z" U, ~+ |8 `  {
Defaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;
* M* Y; A- ^) c" |Defaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */4 ?) e! f' C. H1 S$ c6 R5 h0 J& F
Defaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */6 L. M& R. ~% O. g& Z& |% f. G
Defaults.common$.diags_STATUS    = Diags.RUNTIME_ON;
# w- D, \6 q/ R( L% [/ n9 DDefaults.common$.diags_USER1     = Diags.ALWAYS_OFF;4 }: R. |( t$ p* G1 ]
Defaults.common$.diags_USER2     = Diags.ALWAYS_OFF;& g2 f( S+ c# w# C
Defaults.common$.diags_USER3     = Diags.ALWAYS_OFF;* C; _$ w, j, k7 w& l  ?: h! a
Defaults.common$.diags_USER4     = Diags.ALWAYS_OFF;- e7 d" ]/ V& p$ b4 P. J
Defaults.common$.diags_USER5     = Diags.ALWAYS_OFF;& @5 u+ O7 m# K
Defaults.common$.diags_USER6     = Diags.ALWAYS_OFF;
7 g: i+ g- [1 V3 P3 {; VDefaults.common$.diags_INFO      = Diags.ALWAYS_OFF;
5 [! N# L9 E2 p8 mDefaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;
* O7 F5 g3 K, ~- d. p/ t3 V2 ~' [- `/ t& H2 D
/* override diags mask for selected modules */
& e3 n2 r7 Z3 Z5 exdc.useModule('xdc.runtime.Main');/ [4 _+ p8 B1 X- ^2 N2 D) N
Diags.setMaskMeta(6 i! A( _4 ~- h$ o# `
    "xdc.runtime.Main",
% L+ `3 i( J% k  m    Diags.ENTRY | Diags.EXIT | Diags.INFO,+ a, o, ]: ^; h6 A2 b% o
    Diags.RUNTIME_ON0 w4 U" n; {7 _9 l( ~% W3 p
);
0 f5 t2 ~' e" l, U2 e1 G& X% q$ \8 C2 Y. G; O4 T
var Registry = xdc.useModule('xdc.runtime.Registry');
8 f: E) u$ N9 L/ O5 }Registry.common$.diags_ENTRY = Diags.RUNTIME_OFF;
$ s9 S3 k& B* t6 M) @Registry.common$.diags_EXIT  = Diags.RUNTIME_OFF;: q( [! H% h0 @$ i, v7 m1 s1 u
Registry.common$.diags_INFO  = Diags.RUNTIME_OFF;4 C* ?$ V( ~. G, P0 W
Registry.common$.diags_USER1 = Diags.RUNTIME_OFF;1 U+ D0 U, w6 E" n

& Q6 t3 _! j6 a8 S+ C. Z- d0 ^/* create a logger instance */$ b% C) W  o2 `* Y' D
var LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');- {6 f- s: o% N/ e
var loggerBufP = new LoggerBuf.Params();
  T+ Y$ X& w/ R4 z; m" Z7 a: d( P0 |/ SloggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */3 j- ?' j1 V/ ?% _. Q. {% z
loggerBufP.bufType = LoggerBuf.BufType_FIXED;
2 V6 w! V2 L. N/ T
0 F: O6 U7 \0 w, ]6 Y/ L: G# lvar appLogger = LoggerBuf.create(loggerBufP);6 ]# c' p. l/ m0 ~  I
appLogger.instance.name = "AppLog_Core1";
! S  B' O9 D& b, l  f) ^Defaults.common$.logger = appLogger;
* c! b( L  x# v% F1 C9 q- q* {& {, zMemory.defaultHeapSize = 0x8192;    0 G& b8 R/ }8 N/ }9 _, a3 @6 o; c
Idle.idleFxns[0] = "&LEDStatus";
3 Q, t; b6 B2 X1 V: s/ wCache.initSize.l2Size = Cache.L2Size_32K;3 e. ~3 ^$ S& t' n( {) n+ b2 Y$ h
# A2 s/ t* S' v* Y' l, a. m
回复 支持 反对

使用道具 举报

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 */. S3 q, u6 D7 l" E
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
. {+ N9 P4 Q/ P. G+ Rvar heapMemParams = new HeapMem.Params();$ M$ }6 Y# V4 m$ U9 U
heapMemParams.size = 0x4000;
9 |+ [' L& f8 M* _8 c7 x$ \
6 A* p( A0 B; n# i& `var Memory = xdc.useModule('xdc.runtime.Memory');& ~2 X  m9 Q9 i4 g
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);; C- j# |5 e4 B) l
7 K2 x0 p2 a6 s6 f1 }/ F
我大约calloc  每次共计大小为5K*16bits,
( R. Z2 A8 C: @) Y而默认配置才0x4000、需要改大。
# f4 d: F! m) m( ], _7 F- M. H1 X0 p# B  S% ^  Y( s
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
5#
 楼主| 发表于 2015-10-28 16:14:47 | 只看该作者
/* no rts heap */
0 f2 X( R+ G; G) Y- f/ l" I' iProgram.heap = 0;1 g  A  G. j4 S# {
Program.argSize = 100;  /* minimum size */5 O  R8 u+ @3 S) B
Program.stack = 0xF000;                   //我改到F000  也不行
回复 支持 反对

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

积分
1093
6#
发表于 2015-10-31 20:55:50 来自手机 | 只看该作者
这个问题,我再测试一下,过两天实测后给你答复!
回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2026-3-22 20:54 , Processed in 0.046829 second(s), 27 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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