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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2015-9-4 08:33:31 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
创龙工程师你好,我在OMAPL138单独调试DSP程序(使用SYSBIOS)时,在任务中使用calloc函数动态申请内存,用完后free,类似如下结构4 h2 X+ G8 X/ \* X3 U

- k6 @' T; D0 |4 @, j# P    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //256
1 V0 t+ j3 t; D% ?+ e1 e5 L
; \  r# z) W& R! a  D) j其他程序段。。。。。3 l( `9 w, l8 q! w% H/ u

1 y: t  D1 ^* m1 i$ H   free(x_d);
, E0 \. N- z* }( i5 e* L5 ], s- K/ M/ c
使用DSP侧单独调试功能,验证动态申请没有问题,' s. B# r6 l% _& B$ A/ q

% w/ D( N( J3 r; k2 p6 \- _" r) [) }但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。
8 p. ?( i" C; T* D

3 r) U6 z/ N% l9 c! N( ]  i9 |1 ~2 A: P. w% I! c" f- T

% e/ X5 D, B0 D: R$ [9 f; ]$ h: l2 e4 I6 a
& e) N+ X9 Q. n1 i+ i5 _7 u
" O8 D& u  V6 {, f, ^
* ~* ], D1 ^& A( n. L0 e$ R$ T
( \, [( R. {1 |0 ]
  L" s0 C, v9 S" |$ k/ ~; a
( J: S- X. w/ @; B' p& z3 e8 _% I# X; F
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2015-9-4 10:29:21 | 只看该作者
补充说明
1 @9 L: p- |8 f" h我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下! O( v5 Y& K! K
(不过疑惑的是,为何单独DSP仿真就没有问题呢?)
; x2 V+ s1 I7 L' o  m5 K7 C& p

# C% h0 J. j8 @  R* {, j9 b: E是不是需要在DSP.CFG中进行配置
# N) E8 R# ^: C我现在的配置为
: v0 C& i' q- I) ?' p# S
% V  p. [( ?3 Q/*
- T0 {  B  [1 ~ *  ======== Operating System Configuration ========/ I* |! \" ?0 v; ?4 j+ Z
*/
/ Y1 h% ^' l& ~& \2 r5 t% s/ @, l
" u# [) @% k" n0 m2 w% ?9 U/* no rts heap */# l' t, t: |# J/ Z9 n5 ^( `
Program.heap = 0;
: U# x* s/ V1 G* A% N0 E$ L+ @Program.argSize = 100;  /* minimum size */
) s/ n* T! I$ g8 f" mProgram.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大
# n" Z% V3 r$ M9 O
0 \0 |8 i# _! u/* create a default heap */3 a- |3 i' b8 g. R2 g
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
8 n5 Y( W* Z: U4 E+ [7 {, tvar heapMemParams = new HeapMem.Params();* Z  ]7 J5 h+ u* l8 P2 v  b
heapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大: l# Z/ ?+ Y0 E, t$ L# W) D

# Y  ~% F% v# L  C, {9 ^7 H% j
var Memory = xdc.useModule('xdc.runtime.Memory');9 A2 L* ]  `- o( F9 \- g
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);; |2 R, z, |% c0 T4 Y4 V6 Z
! P1 Q; w/ \" n# }
/* configure System module */
: c4 s7 p% H& |var SysMin = xdc.useModule('xdc.runtime.SysMin');2 T5 f( b5 j" b5 T$ F7 Q, S! I
SysMin.bufSize = 0x1000;
3 r! T' f& J6 K" P! JSysMin.flushAtExit = false;
3 W  F0 b( j6 q! T: ~, A! m" d2 Q7 Q; M+ f2 e
var System = xdc.useModule('xdc.runtime.System');
; c& N5 l- d( ^6 ]# T% CSystem.SupportProxy = SysMin;
/ K# U7 }2 m& N' y  l- q) ?2 {
/* configure SysBios to use the lower half of Timer 1 */
& X% ?9 `' X/ d( g, g: Mvar Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');
% K; p' G- ?, ^3 G& N. u" B# d  Q5 ~var Clock = xdc.useModule('ti.sysbios.knl.Clock');3 W% @0 }, Q  j+ D6 G
Timer.timerSettings[1].master = true;
& Q4 ?' L1 x9 ], ]" PTimer.defaultHalf = Timer.Half_LOWER;9 p) q  m  T5 ~! q9 l; M
Clock.timerId = 1;
5 R6 [$ g7 j& x( f& [1 {# I2 w! C
# K5 k% Z& m( k1 O4 q' P9 x. W) R* @4 V% H+ _" O
/*& e, W( R6 U; x: Y- B* w
*  ======== Miscellaneous Configuration ========
- l  @- x! W6 j: X6 B: F/ D */: l- C" q3 |( r4 g8 \& c* N/ W

- s5 n* O/ d; H$ r/* set default diags mask */
8 J1 Z  I1 }( k" Q0 Jvar Diags = xdc.useModule('xdc.runtime.Diags');& X- ?! j  I/ |& s) l
var Defaults = xdc.useModule('xdc.runtime.Defaults');
. f4 N1 n  G" n. e2 S
* [% `) A+ ?+ I! H1 TDefaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;
9 @9 j' E- L$ b2 tDefaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;
5 X" S" ?( q6 O- u) c9 s7 g- p0 }Defaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;
# }9 Z6 A7 F, z% ADefaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */
7 U$ @9 @3 a' F6 _: c7 e' z; pDefaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */
- o. l" p5 q. r5 K7 v) y" A# E* IDefaults.common$.diags_STATUS    = Diags.RUNTIME_ON;4 k; ~$ g7 r6 c7 S; S
Defaults.common$.diags_USER1     = Diags.ALWAYS_OFF;
1 _$ A- f# a2 A' t( b: qDefaults.common$.diags_USER2     = Diags.ALWAYS_OFF;$ z& I2 f( Z7 @) ^
Defaults.common$.diags_USER3     = Diags.ALWAYS_OFF;( Y) e7 a5 ~! l1 M) M$ a- x$ z6 c! O
Defaults.common$.diags_USER4     = Diags.ALWAYS_OFF;% C; r% x3 l5 Y7 r2 A" V3 N
Defaults.common$.diags_USER5     = Diags.ALWAYS_OFF;/ R' ~2 X# O. \
Defaults.common$.diags_USER6     = Diags.ALWAYS_OFF;
5 c7 X, S4 C8 Z- x8 LDefaults.common$.diags_INFO      = Diags.ALWAYS_OFF;& c. }/ f$ D; E  H8 n5 }/ j1 @6 B
Defaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;& P8 O4 Q7 X$ L% M- S( }
# u: R% b: e5 T& F8 {
/* override diags mask for selected modules */
9 T* l3 L0 J7 x1 z: t0 Zxdc.useModule('xdc.runtime.Main');
6 \# q0 |: f3 _6 `Diags.setMaskMeta(4 u8 X( j2 x7 l
    "xdc.runtime.Main",& j, L2 w1 r% P- ?8 r
    Diags.ENTRY | Diags.EXIT | Diags.INFO,
* c: [1 O0 m- W$ R& [7 {6 V( R    Diags.RUNTIME_ON- g! A6 ^0 |- F: n/ X: S+ X6 \
);
  Q, g, Y+ I; V' b
; o2 E, f% c  K- P2 G  ]# |var Registry = xdc.useModule('xdc.runtime.Registry');
: B2 Q  ~: M7 T6 p1 G" Q1 O/ _Registry.common$.diags_ENTRY = Diags.RUNTIME_OFF;
3 }( G. Z3 f, dRegistry.common$.diags_EXIT  = Diags.RUNTIME_OFF;
3 e; L2 N9 f$ [* G6 M. xRegistry.common$.diags_INFO  = Diags.RUNTIME_OFF;% H5 U  h" j8 I
Registry.common$.diags_USER1 = Diags.RUNTIME_OFF;
6 a* M- T) S5 S5 X7 j1 E: J4 b
1 R9 P+ H. H/ n0 v2 [) `! }9 g/* create a logger instance */
+ m7 ~6 v$ y4 uvar LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');) P/ |$ x6 V& c# Y4 O4 b4 o! @9 a
var loggerBufP = new LoggerBuf.Params();
  K7 `' i  J/ sloggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */
  Z( E4 m4 }! Q# s( D& CloggerBufP.bufType = LoggerBuf.BufType_FIXED;
4 `+ T) b7 E/ C7 W
( {! I+ `9 z1 y0 m! Bvar appLogger = LoggerBuf.create(loggerBufP);' ?. R8 s( |# P9 s: E
appLogger.instance.name = "AppLog_Core1";/ W* i/ x" i' y: @/ Q  j  G
Defaults.common$.logger = appLogger;
$ s7 L2 @7 [; lMemory.defaultHeapSize = 0x8192;    . U: ~. B- N% V
Idle.idleFxns[0] = "&LEDStatus";6 M" l6 f- y- |1 ?0 S% m* m
Cache.initSize.l2Size = Cache.L2Size_32K;
' H) B) \8 t( W' s  m7 D# ^7 ?4 C1 {$ a
回复 支持 反对

使用道具 举报

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 */- F& ?) K. X5 H
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
8 q, Z" I9 X& C& Y. g; i* Dvar heapMemParams = new HeapMem.Params();- F0 t4 C2 V' N2 ~$ p$ C1 X
heapMemParams.size = 0x4000;* \- N# o7 z5 ]9 g" W8 n# ]5 K

; G. R9 g! l/ m& Z- E3 T6 Nvar Memory = xdc.useModule('xdc.runtime.Memory');" `% @) C) [$ Z/ h* M9 h
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);  \$ a3 t# E* o& ?6 G' h$ c

( t# l& Y1 e# D/ N& P我大约calloc  每次共计大小为5K*16bits,
! `0 B6 S* Z' K: m- Y2 f* I而默认配置才0x4000、需要改大。
+ e. w6 F& p/ y1 ?4 _; I; a3 v! r# A+ L7 b" [) v5 A* ~" W
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
5#
 楼主| 发表于 2015-10-28 16:14:47 | 只看该作者
/* no rts heap */9 c' l' I; B$ d- X9 P
Program.heap = 0;' K/ M- ^* w5 L' v1 Y+ h! x% h
Program.argSize = 100;  /* minimum size */* E0 [3 t- Q  T* t  V
Program.stack = 0xF000;                   //我改到F000  也不行
回复 支持 反对

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-12-4 13:38 , Processed in 0.040684 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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