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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2015-9-4 08:33:31 | 只看该作者 回帖奖励 |正序浏览 |阅读模式
创龙工程师你好,我在OMAPL138单独调试DSP程序(使用SYSBIOS)时,在任务中使用calloc函数动态申请内存,用完后free,类似如下结构
& e2 a0 K+ j; w9 J) d
( W2 |' }, U9 Q5 T0 {. h    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //256
3 k2 O* D, i% R1 P# O. @) R1 z7 B3 ]# M
其他程序段。。。。。
, ~: ]( h0 z$ o- q " J7 m7 n8 S; k
   free(x_d);
$ ?! [/ V- @, t1 H% T- G
+ j# b' W0 _/ \% ~) _使用DSP侧单独调试功能,验证动态申请没有问题,1 b: H3 V( ?* B. g( a& P$ R0 W

% K! g1 S- P, A8 h, ^但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。- g% M' g. _9 K; ?2 Z

: C- }9 i+ P1 G" I
( `- y; g# C8 I8 t! [' @
/ K% q8 c2 |" X, v0 O8 j5 D8 J& o8 q7 Q* m9 s
  [4 c1 {; \5 O

5 G7 J7 P2 D$ l' ^4 j+ B  k0 m  y+ v2 Y; o. T
$ T& ]! p; C" ^) M' E( W# N
" H5 \7 W3 b; t- g
3 L9 F" e+ D& }% k! }/ U
分享到:  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 */
" n, L  ?+ s5 t  n1 ^Program.heap = 0;
3 C/ \1 U3 L7 `9 b$ t& PProgram.argSize = 100;  /* minimum size */: f; @/ ?8 ^. C9 \. G& X5 g
Program.stack = 0xF000;                   //我改到F000  也不行
回复 支持 反对

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

积分
1093
地板
发表于 2015-10-28 09:51:31 | 只看该作者
/* create a default heap */& N) e% W. H1 p. Z# n
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');% f# z1 z2 }5 S8 ~7 d3 u
var heapMemParams = new HeapMem.Params();
8 m% {! Q; \" I/ y8 h4 |0 h! A/ oheapMemParams.size = 0x4000;
( Q8 l8 D6 C- ^& I% Q6 |
- i3 S2 b) F( ]+ @7 n& A$ ?( Xvar Memory = xdc.useModule('xdc.runtime.Memory');
: H2 b$ e% i. \" F- bMemory.defaultHeapInstance = HeapMem.create(heapMemParams);
9 C6 c/ C$ `0 n  j; t0 Q, j0 e, e# ]9 h* U' {# L1 l. C; Q
我大约calloc  每次共计大小为5K*16bits,; U5 v/ p; v9 r2 g
而默认配置才0x4000、需要改大。1 t' K# a2 b1 I; d
" ^! U7 U! Z1 t* m3 e1 |
回复 支持 反对

使用道具 举报

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 | 只看该作者
补充说明  v# W5 C) H. o7 P7 S
我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下+ [9 F  Q/ @  q8 n
(不过疑惑的是,为何单独DSP仿真就没有问题呢?)7 D# e  A- ]0 a
0 ?. ?; ?$ s$ C& v
是不是需要在DSP.CFG中进行配置
- l/ @3 }, K  T& G, i1 w  F/ n7 M我现在的配置为
) S- y# ?  `4 _1 S. X. U% W8 ]0 f8 ]6 i4 v
/*0 e. ^# b4 _* c" i0 i
*  ======== Operating System Configuration ========
  [/ Z& {( e7 _4 M: j: i */; M$ K' |6 O: L" X
! |* Q) n2 x  D5 l
/* no rts heap */7 D+ A' T+ M" H; h. {/ r8 [
Program.heap = 0;
9 S: }; n  x5 B/ }4 I. e( CProgram.argSize = 100;  /* minimum size */
' n0 q/ M( {+ r) l. nProgram.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大
- x9 L! m; j: T: ?9 w/ P3 Z/ X( J: u- }( ]# _$ h2 M
/* create a default heap */
5 d- N: j. I3 h7 Z2 d5 _& Jvar HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
! D* H& X9 _9 V" ]var heapMemParams = new HeapMem.Params();
/ F! C1 D' k% M. H- Z2 |# vheapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大; M  ?0 B# u9 K) u
* P/ D' W1 b  K% v6 {3 e3 i
var Memory = xdc.useModule('xdc.runtime.Memory');
% e0 B# D" m* C, X3 lMemory.defaultHeapInstance = HeapMem.create(heapMemParams);
- @# e$ ^# S9 P& S" L& b  D9 @# z! J, _+ B- ~% \. E" A7 M5 |/ [
/* configure System module */
" o) A/ Z, ?. tvar SysMin = xdc.useModule('xdc.runtime.SysMin');
! c0 B0 p6 C. [SysMin.bufSize = 0x1000;
$ f" i2 g/ L1 s) |0 x0 wSysMin.flushAtExit = false;  O' j8 G  g3 R4 \1 w/ `

- p3 R' D, R0 l9 ~9 C- X% w0 l* F+ evar System = xdc.useModule('xdc.runtime.System');; W& a  k% j% L, J
System.SupportProxy = SysMin;
, O) F  x# F" b" e  t
* @/ \4 P6 u! Z# P; E7 d2 p" f/* configure SysBios to use the lower half of Timer 1 */
$ r& C( w: O! y5 v% |var Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');
* h+ Y6 n) B+ |) ivar Clock = xdc.useModule('ti.sysbios.knl.Clock');
$ T# k8 U1 M' V, P5 ^Timer.timerSettings[1].master = true;
" }, {0 R7 I0 r0 TTimer.defaultHalf = Timer.Half_LOWER;! t, Z; Z( M+ r
Clock.timerId = 1;
. h, M! `! h% j: `; U+ ]% ?
# [+ L! G3 t' Y" z- c* ?3 U0 `. k
3 i$ [$ E* l4 F1 a7 ?/*4 N, t+ B4 p/ {0 r6 m$ Z
*  ======== Miscellaneous Configuration ========- C. Y) V; t7 w3 z
*/
# v" n  `2 c  Y, d+ Y# S; L; `' N$ X5 V
/* set default diags mask */* k" f" J2 U3 a$ Z1 ^- O: }, Z
var Diags = xdc.useModule('xdc.runtime.Diags');( N# E' [: t! |( q
var Defaults = xdc.useModule('xdc.runtime.Defaults');, T1 t( W/ F4 H3 ~' w% h. z

) a2 b4 X1 M6 G  r: eDefaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;
9 }& l3 M/ J; v: s, jDefaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;
) L7 i+ v+ P# e& q3 c3 m  ^: iDefaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;# t6 N4 u, }" h: I) w4 |. a$ U
Defaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */, z# {" N5 @1 F' Y
Defaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */3 W) k! C6 C' t
Defaults.common$.diags_STATUS    = Diags.RUNTIME_ON;# n* V: J" E3 W+ m9 v* D; Y' N
Defaults.common$.diags_USER1     = Diags.ALWAYS_OFF;
, t  s3 m2 z1 R" b- {Defaults.common$.diags_USER2     = Diags.ALWAYS_OFF;
! w$ Q" {% F# }% EDefaults.common$.diags_USER3     = Diags.ALWAYS_OFF;# \9 ^8 y) f4 h. \' ^# R
Defaults.common$.diags_USER4     = Diags.ALWAYS_OFF;
  l# m! E5 q* @Defaults.common$.diags_USER5     = Diags.ALWAYS_OFF;6 f- P# U9 V, h) K
Defaults.common$.diags_USER6     = Diags.ALWAYS_OFF;! E! J; E- L$ J% I3 y4 e
Defaults.common$.diags_INFO      = Diags.ALWAYS_OFF;3 I; B; _5 I8 \$ V1 h/ r2 t$ s% g
Defaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;
/ V# z. f7 q- f! r3 _
$ \) K1 W0 q' z3 w/ v" q% z/* override diags mask for selected modules */
0 @$ a5 h. K( d: L* G# n6 Qxdc.useModule('xdc.runtime.Main');
) U% j) M0 U+ q- S( ~Diags.setMaskMeta(9 v& f% S! ~  @0 j; {
    "xdc.runtime.Main",
' H) I) w7 L9 J) B    Diags.ENTRY | Diags.EXIT | Diags.INFO,* d/ X0 w3 y3 U& j  `+ _
    Diags.RUNTIME_ON
* K2 r# _6 J' C);7 h0 m0 r4 u9 ~9 H! A
/ L6 k9 _: |/ T4 G+ B: q- O
var Registry = xdc.useModule('xdc.runtime.Registry');
( ]+ c# j6 l, p5 a* }) d8 A2 `* a% D8 tRegistry.common$.diags_ENTRY = Diags.RUNTIME_OFF;7 o4 H$ X7 M5 t* h6 R& m4 R
Registry.common$.diags_EXIT  = Diags.RUNTIME_OFF;
9 V( H8 V0 K4 w5 o1 y* U. T$ cRegistry.common$.diags_INFO  = Diags.RUNTIME_OFF;6 d1 G6 B+ s7 q( U! V
Registry.common$.diags_USER1 = Diags.RUNTIME_OFF;
% ^. w* K  D; |  _. m9 t/ L5 ~1 U6 {% J) `( v; u% {
/* create a logger instance */
$ u8 o2 a5 }9 |6 k) I" K9 p, tvar LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');' a+ f, [( ]! U' A$ D7 {( C
var loggerBufP = new LoggerBuf.Params();
3 ^1 ]( b( O1 L" n/ }; aloggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */
" ?; k; Q2 z& t6 i. @loggerBufP.bufType = LoggerBuf.BufType_FIXED;
  n: C# Z+ [0 L+ b7 ]+ J) f
* {0 C3 N: I) w4 fvar appLogger = LoggerBuf.create(loggerBufP);4 L/ k+ {* k( t- e' T  y2 J1 M7 Q
appLogger.instance.name = "AppLog_Core1";2 n% _4 ?. V( l8 A# R
Defaults.common$.logger = appLogger;  Y5 G% B4 ^4 ?% @+ v6 j; m# x
Memory.defaultHeapSize = 0x8192;   
1 a5 A2 g- w$ ZIdle.idleFxns[0] = "&LEDStatus";0 w, D4 F' Z/ q% t- f
Cache.initSize.l2Size = Cache.L2Size_32K;) |* [2 u3 S  B; c# C' d7 Z/ g

9 i2 K. ]0 y% Q3 ], s. U
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-12-20 22:25 , Processed in 0.048082 second(s), 26 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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