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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2015-9-4 08:33:31 | 只看该作者 回帖奖励 |正序浏览 |阅读模式
创龙工程师你好,我在OMAPL138单独调试DSP程序(使用SYSBIOS)时,在任务中使用calloc函数动态申请内存,用完后free,类似如下结构
& K/ X! l& J. U; r7 T8 ]
/ e1 }7 c$ n% R, j. v. |. l( [; {8 j    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //256; d. M$ C# v. q: x  q  I
+ a9 G# b- c  |% v' D  U1 o
其他程序段。。。。。
6 w- }+ v( x( c5 {
5 z2 Z1 t" q1 p/ `( E% d   free(x_d);+ y$ f' _' _! {$ _0 z
" D% O- |5 i' a! q! [
使用DSP侧单独调试功能,验证动态申请没有问题,: M4 O2 }% \' u' A5 q* z5 |( w
1 H5 v. G: [! _2 d
但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。; o& }; p4 S$ o" Z  z3 G; `8 L
6 v3 i1 H( @; x4 T

: F( K- I, {+ n0 V3 Y$ s6 R
" q6 b4 Q( r2 S3 a- U( I0 C/ t" ?5 L5 S9 y9 }+ g5 x: h
1 _9 e2 v% R1 H. D9 T1 a
& n! a/ Q: A9 I6 c8 p
  z- Q- |8 @; }8 n. n+ p2 N
+ @! s3 ^8 p) s8 H
( C7 ?4 t: C- k. {! a( \" V

- Q& b  H6 s. C1 G+ L+ {0 @
分享到:  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 */
6 A  E* S- x7 X. v2 A3 L8 E2 nProgram.heap = 0;* j( j$ X/ i7 t# k/ F" u
Program.argSize = 100;  /* minimum size */
4 C9 J- c+ n- |Program.stack = 0xF000;                   //我改到F000  也不行
回复 支持 反对

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

积分
1093
地板
发表于 2015-10-28 09:51:31 | 只看该作者
/* create a default heap */
4 r% B3 Y/ y* D1 K3 yvar HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');3 F/ {" S$ U) U- O: A! G1 _
var heapMemParams = new HeapMem.Params();
1 s' P8 Y$ T$ F3 G0 V7 W3 G" fheapMemParams.size = 0x4000;
6 U. i0 g: E: k' d  w# ~
0 X( l& x% z1 G% r) B  \var Memory = xdc.useModule('xdc.runtime.Memory');
/ ~/ W" L0 w7 i# g1 d6 E: c) A" qMemory.defaultHeapInstance = HeapMem.create(heapMemParams);
- {; x! x) v$ R' [  Y$ @- F+ T5 H4 C$ @) w5 g
我大约calloc  每次共计大小为5K*16bits,# S; @6 X$ Q9 \
而默认配置才0x4000、需要改大。
3 k7 P: ^+ j$ p1 q2 U+ l
7 Y! C$ r$ D! z2 ]
回复 支持 反对

使用道具 举报

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 | 只看该作者
补充说明7 |# f& _3 Z/ j: {, A0 V
我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下! v( E. e. w1 A) o" B+ z
(不过疑惑的是,为何单独DSP仿真就没有问题呢?); B7 |7 [# ^3 K1 m9 b

5 h) W5 ^) ~/ O5 M  p是不是需要在DSP.CFG中进行配置
* o6 W) {: d; T2 X- N我现在的配置为
, p3 u7 a9 v4 F. k, S6 i' v, i
  L2 C7 ~- \1 m& h0 @! V/*. m( X- u+ F. S- S3 j# k* ?7 D
*  ======== Operating System Configuration ========
* |- Z7 b/ X- r: [; @$ H */
6 g' c# d6 J( j0 u; v# w/ c4 O4 U9 A# X
/* no rts heap */
# H2 N7 u+ @0 eProgram.heap = 0;
( o; k8 Q1 k) G% N0 h- m3 IProgram.argSize = 100;  /* minimum size *// |& y: D  `8 X1 i2 }8 L. a9 S- Z
Program.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大
* _6 Y% E8 ~/ w- G! W) l6 T  K+ J( K! V0 d4 q
/* create a default heap */& `4 P( s+ F  M9 v
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');; N& [) k2 t/ V  V+ j# U
var heapMemParams = new HeapMem.Params();
) w8 Z$ x7 ]' H# ~' R# wheapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大8 }9 ^: B# G# K5 R6 [5 U$ ]

' m5 K: \& S* R
var Memory = xdc.useModule('xdc.runtime.Memory');! V9 G; {- x$ l
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);. K" Z9 o; |/ S& K

( u* k) j( N: l. A/ F/* configure System module */; e& A7 ~0 c' ]/ w. e/ d- k- `% a
var SysMin = xdc.useModule('xdc.runtime.SysMin');* d; B; i" u: F* W6 o) r0 y
SysMin.bufSize = 0x1000;
* Q( |! O; j/ b$ W8 \SysMin.flushAtExit = false;. Q4 j6 j1 ^$ Q

. }7 _) i$ c6 x8 lvar System = xdc.useModule('xdc.runtime.System');: Z- o9 Y) D& ]7 r5 j' u
System.SupportProxy = SysMin;" c6 @" i' m  C& Y

( W7 U5 v3 l4 Y( O5 t8 Q. g: i% w4 a/* configure SysBios to use the lower half of Timer 1 */0 M8 R0 M* X2 r
var Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');
5 v, p% H0 i; J7 {5 ^  ~" b  Hvar Clock = xdc.useModule('ti.sysbios.knl.Clock');7 e; s: ^! ?, o  }2 H2 p
Timer.timerSettings[1].master = true;: a; P( Z- Y* I1 D4 t
Timer.defaultHalf = Timer.Half_LOWER;- d6 R  ~* e& \! b; Z, ~
Clock.timerId = 1;  T5 q  \; [/ L& Y+ ]/ P

# ]: w/ u$ m5 K3 \6 L. M: w) l& D" O6 F- r( e3 X
/*) ~- F& g+ `8 q9 I
*  ======== Miscellaneous Configuration ========. D3 H; t7 c- O- b' k
*/
9 R. t1 }0 I$ J- v
; M# }% I1 g% _' M- ]3 `/* set default diags mask */
9 w! H' C5 t5 `& b" x, R% ^var Diags = xdc.useModule('xdc.runtime.Diags');
$ Q, C5 w' h9 avar Defaults = xdc.useModule('xdc.runtime.Defaults');6 W. U) U! i8 x  q- D' i+ C5 s9 i

, k1 w: v# l. V; g" BDefaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;
! p& Y* _5 y9 ]$ O5 A" vDefaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;. O% Y: P3 q' Z, |8 R- |# S
Defaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;
# I5 H; S+ a* }( ]. KDefaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */3 t! @4 @5 A" r2 t, T' l* D4 A
Defaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */
6 x2 w' ?+ U$ Z; x  R' y4 `. n: gDefaults.common$.diags_STATUS    = Diags.RUNTIME_ON;& Q" T" B) \0 w* O, L  R
Defaults.common$.diags_USER1     = Diags.ALWAYS_OFF;: l* N# f, _; {2 B; ]9 p6 e# Q
Defaults.common$.diags_USER2     = Diags.ALWAYS_OFF;( a8 @' l4 l& e8 X" B) p! |
Defaults.common$.diags_USER3     = Diags.ALWAYS_OFF;
5 H: J. E6 E! P0 P$ sDefaults.common$.diags_USER4     = Diags.ALWAYS_OFF;
4 C2 p# a  p* j4 P  G- H! M: y+ lDefaults.common$.diags_USER5     = Diags.ALWAYS_OFF;4 t- @4 [7 x+ O. C& p& c
Defaults.common$.diags_USER6     = Diags.ALWAYS_OFF;5 O/ z3 a! c8 R$ ]. f; \5 ^6 G
Defaults.common$.diags_INFO      = Diags.ALWAYS_OFF;6 o5 S8 w4 h3 G+ K7 _
Defaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;
' L" ~6 `4 G* v* u" o% T0 g
/ L6 ^# |0 r& a8 E' m6 _0 E5 q/* override diags mask for selected modules */
4 `& v3 J# D* N) S  l" Z1 E. p. O0 [* cxdc.useModule('xdc.runtime.Main');+ D' `$ P% i6 a0 O1 F/ |7 H
Diags.setMaskMeta(
6 x5 K4 o# i: a& ^    "xdc.runtime.Main",5 G" C+ |! }" T1 b
    Diags.ENTRY | Diags.EXIT | Diags.INFO,
2 C$ N. z4 L0 L: e    Diags.RUNTIME_ON4 Q- E9 ?8 _, v. g$ g8 B$ R, z
);: ?/ G% q- K" d, Z$ n/ N

+ o1 \! I! O, t/ `5 @& Ovar Registry = xdc.useModule('xdc.runtime.Registry');. `' ~: Z5 e. o" _0 P/ c
Registry.common$.diags_ENTRY = Diags.RUNTIME_OFF;: _$ d- h: R$ Z/ M: C# l" w- H
Registry.common$.diags_EXIT  = Diags.RUNTIME_OFF;
3 I; H& Y9 R! |; P7 t1 WRegistry.common$.diags_INFO  = Diags.RUNTIME_OFF;
3 F! h, |8 P& V5 @! nRegistry.common$.diags_USER1 = Diags.RUNTIME_OFF;
5 _/ j2 s0 f4 y0 i( n) l
; C% H2 M* t5 {; c" u" V8 }8 z1 Z/* create a logger instance */
8 ]8 Y; d% Z$ _, g5 f( _0 [- k  Yvar LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');# x. j, o% G) x/ R* J5 _" E
var loggerBufP = new LoggerBuf.Params();# E" Y1 L0 F7 y* _. G  i& y" O* y
loggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */
) M. r, Q! D- T5 C3 _$ O% yloggerBufP.bufType = LoggerBuf.BufType_FIXED;6 M$ H+ q+ q# W- r, `. c8 Y

6 l# [; W% O8 O. a9 ~var appLogger = LoggerBuf.create(loggerBufP);1 z8 X7 R7 K$ ^% k* E1 V# C" i: E4 M
appLogger.instance.name = "AppLog_Core1";$ `2 n" e  @5 Y/ k! ~' p. Q% E" C
Defaults.common$.logger = appLogger;
7 ~  R# ?+ K4 H2 DMemory.defaultHeapSize = 0x8192;    ( v2 K; ?$ J$ {8 s
Idle.idleFxns[0] = "&LEDStatus";
6 K- Z& U2 \1 [' k3 r; Y7 @Cache.initSize.l2Size = Cache.L2Size_32K;
0 C& ]- W& k4 {) r% `# i# Z3 Q8 {$ S. t
回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2026-3-3 05:26 , Processed in 0.055360 second(s), 26 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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