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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2015-9-4 08:33:31 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
创龙工程师你好,我在OMAPL138单独调试DSP程序(使用SYSBIOS)时,在任务中使用calloc函数动态申请内存,用完后free,类似如下结构0 A9 M- w% A1 f& A
' ^5 f7 S& l4 K: [8 F1 j' F
    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //256
+ f: r3 `& c; u/ ^7 I# l1 I9 C1 L% \) k  v) m  ^: f
其他程序段。。。。。
' j, R. }6 x" C0 X1 ]4 S  v2 e; c
9 m# L9 s* o1 o1 ?   free(x_d);
, H! ^0 J$ l6 ]5 e4 J
- z2 X; b1 F2 a" ]1 P使用DSP侧单独调试功能,验证动态申请没有问题,
. G* g$ @+ k3 a
5 h/ O9 S2 }& |6 x# s# f- [但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。
, h# q6 [' Y1 p- \: m! D2 N" h& y+ B
: t2 G( @$ g/ L# I
' C  H. M9 z8 b/ `$ [+ d( |; k

' X- J& D, Q7 R4 C2 H
" N1 n9 ]2 z- l* @* U8 ]# H- U, ?& z- u3 |9 U
# F, ~9 ^$ Z$ u: l1 x; D3 y
( P+ X# @# [" Q' N* F/ \# h

- `# n; W+ S8 C0 t8 Z5 j+ M5 t1 q4 s1 a8 t% A3 h

3 d3 o, P+ X2 K* X/ J. e! G3 v
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2015-9-4 10:29:21 | 只看该作者
补充说明
1 ]- {/ S( L/ A# I) S* H我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下4 o0 Q8 D( ~. d) I# a  ?
(不过疑惑的是,为何单独DSP仿真就没有问题呢?)
- g5 V4 Y5 m$ d! X
% X  C6 z# a. z2 P8 _+ p
是不是需要在DSP.CFG中进行配置
$ n; d2 a9 ?" s6 s0 [+ L0 h我现在的配置为4 I  N% A6 q: Z! D$ \
' \& R% v8 c# V+ s" k: `
/*2 O) ~! h) X9 H; T" h$ S
*  ======== Operating System Configuration ========
8 p! i3 y2 s: i */) m* P- V, }9 f1 t( `
  Z- @- n* F$ `
/* no rts heap */
' m0 h! b! o- M: s  @Program.heap = 0;
, M9 q3 l3 p  n5 _* bProgram.argSize = 100;  /* minimum size */; ]5 i/ c* F0 R0 R1 {8 {
Program.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大. {" x* z* \2 r6 c# e% j, x
6 |& y! Q" v& y, _/ h) h' j( y
/* create a default heap */* P( }* O2 E* W- y( L# j0 `
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
' |1 c- S( Z0 }, [! yvar heapMemParams = new HeapMem.Params();/ B1 v* w* Q) u5 \
heapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大- O  q; t+ j" u( Y6 b7 z" S

* q  |' Y4 q- y0 w7 X& w
var Memory = xdc.useModule('xdc.runtime.Memory');3 ?) g- z7 J0 s' Y  e: L4 e
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);3 u" ?6 [9 _4 b2 ?

6 K& X: M* y& w: s7 V2 j5 r) Y8 q/* configure System module */
) w8 R1 o' y8 i; s# V* d, Z: Bvar SysMin = xdc.useModule('xdc.runtime.SysMin');( V1 ~5 ^: O+ h/ q
SysMin.bufSize = 0x1000;4 Z* ~$ S9 a* D
SysMin.flushAtExit = false;$ }( c$ A" ?) R6 q( M2 M
: i- j( {4 i& N$ v# B6 _" ^5 f& U
var System = xdc.useModule('xdc.runtime.System');
9 d1 v" S' k1 xSystem.SupportProxy = SysMin;
4 x9 x% @+ `# c3 v8 `# t3 ^6 q" B7 j' h' c0 n. q2 v/ w+ l: b
/* configure SysBios to use the lower half of Timer 1 */9 Z% k- A* T( }. N7 G. B
var Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');
; |; [5 b, B  ^/ ~! \6 mvar Clock = xdc.useModule('ti.sysbios.knl.Clock');' l8 m' d; H; }. }, g" C; W, G
Timer.timerSettings[1].master = true;
8 G5 N; a8 {  C, R! W  ITimer.defaultHalf = Timer.Half_LOWER;
! W& G! [7 }( K! x! A, NClock.timerId = 1;! V2 w8 N" l+ r0 a
( F& l; ^) `* V3 O) u; @+ n7 W
6 A4 H  l1 I; X
/*
. i. B9 ^' U: c( H7 h *  ======== Miscellaneous Configuration ========
6 Q& W$ c- Z  I1 R$ Z/ R7 i. {" t */) L, @( {- e4 p8 ^
  @* {  D9 [. O$ f3 V
/* set default diags mask */
% e: J/ D7 r! C; Bvar Diags = xdc.useModule('xdc.runtime.Diags');% i) f+ r" ]5 r9 Z
var Defaults = xdc.useModule('xdc.runtime.Defaults');
$ l: x9 M  u3 z* W% _$ @0 S$ ?5 p/ a
Defaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;* F' }* [3 g; c- L5 m
Defaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;3 P, F% H! v% S% W. W( g6 C8 H
Defaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;- v# H. A  ?' h$ K
Defaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */
% N' Z. r5 E; L. s1 d7 u1 F5 kDefaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */3 s+ B9 g, m  ~
Defaults.common$.diags_STATUS    = Diags.RUNTIME_ON;
( z# y* \, }: D2 F+ C: x: [# \Defaults.common$.diags_USER1     = Diags.ALWAYS_OFF;8 k0 J- T; x; H6 {* \- @
Defaults.common$.diags_USER2     = Diags.ALWAYS_OFF;
7 ~2 E1 E2 P+ YDefaults.common$.diags_USER3     = Diags.ALWAYS_OFF;
1 N& H+ x: G  q: y9 VDefaults.common$.diags_USER4     = Diags.ALWAYS_OFF;
8 ~# K" b* v# P" P- `, ?Defaults.common$.diags_USER5     = Diags.ALWAYS_OFF;
2 e- z( \" p0 aDefaults.common$.diags_USER6     = Diags.ALWAYS_OFF;# r! z5 w: O- X5 R# A
Defaults.common$.diags_INFO      = Diags.ALWAYS_OFF;8 N! L+ j6 q1 C1 r
Defaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;
* n* X+ y: a  ]' A. \$ @1 y5 Z5 P8 T0 w( N& F) l. ^' j+ J& V
/* override diags mask for selected modules */( B7 {1 W5 [9 [: [+ S
xdc.useModule('xdc.runtime.Main');
# l# H+ A8 o1 ?Diags.setMaskMeta(& Q3 W. n& Q- k
    "xdc.runtime.Main",
" G! }# ^) a) U    Diags.ENTRY | Diags.EXIT | Diags.INFO,
6 s8 J' K* l5 P3 @    Diags.RUNTIME_ON
- {- T( i0 Q5 V);, p9 K, V0 M; T+ B6 q( c
6 D$ |2 r0 ^' t# n
var Registry = xdc.useModule('xdc.runtime.Registry');7 p# C2 n& _  t5 f. c
Registry.common$.diags_ENTRY = Diags.RUNTIME_OFF;. i& q( p# f, |: |3 J4 h
Registry.common$.diags_EXIT  = Diags.RUNTIME_OFF;
$ r; ^& v& j& Q% tRegistry.common$.diags_INFO  = Diags.RUNTIME_OFF;$ W- Y& n# C' J( b; b
Registry.common$.diags_USER1 = Diags.RUNTIME_OFF;; e, L1 o! E% e7 }/ @* J& t

1 {4 Z0 J$ y4 C/* create a logger instance */
$ B6 R7 D4 I6 k$ E+ u8 Evar LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');, q0 Q! P  @- O
var loggerBufP = new LoggerBuf.Params();% i; B8 G/ z5 k( G
loggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */1 @7 J, }; h) N. a9 H4 [
loggerBufP.bufType = LoggerBuf.BufType_FIXED;4 b9 p* D  r; m, S+ M% F, m  J( X) S3 D
/ ]( v, [8 \. U. e  e4 S
var appLogger = LoggerBuf.create(loggerBufP);
8 X% G2 L6 C, r; v  M2 `7 ]% M2 happLogger.instance.name = "AppLog_Core1";
- _- F) Z( W7 K3 GDefaults.common$.logger = appLogger;
, w, |' q# Y/ O( s' MMemory.defaultHeapSize = 0x8192;    , j6 |- Z. l  g& G1 Q
Idle.idleFxns[0] = "&LEDStatus";; A9 c7 Y* U) h8 ^
Cache.initSize.l2Size = Cache.L2Size_32K;
; W- S5 K9 Z8 C/ B2 _1 A
; c; y3 c. T5 c# D' I0 v! y
回复 支持 反对

使用道具 举报

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 */5 `1 H( h9 O6 m4 ]) Z
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
7 q; d+ d) w! h* E( B2 p" Kvar heapMemParams = new HeapMem.Params();; l! |! ~% W$ Q  m
heapMemParams.size = 0x4000;
1 S# E6 \1 y7 z7 N! q5 c
  [3 c4 ]/ K9 P: t. I0 T1 ~var Memory = xdc.useModule('xdc.runtime.Memory');+ c% g% U- m1 \, D) P
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);6 E  H4 L1 D( o9 O
9 i" g6 c+ \# A" i4 f: P* D4 W
我大约calloc  每次共计大小为5K*16bits,& O4 I) E) R# Y* Y
而默认配置才0x4000、需要改大。+ N2 w7 U5 F# f5 y. [+ R

- E0 H* z" S* r
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
5#
 楼主| 发表于 2015-10-28 16:14:47 | 只看该作者
/* no rts heap */
7 P: n; \- T3 pProgram.heap = 0;
8 i1 E# G% W* b3 h/ bProgram.argSize = 100;  /* minimum size */2 V8 u. k) u2 V& M% a3 m( `
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-22 17:34 , Processed in 0.041015 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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