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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2015-9-4 08:33:31 | 只看该作者 回帖奖励 |正序浏览 |阅读模式
创龙工程师你好,我在OMAPL138单独调试DSP程序(使用SYSBIOS)时,在任务中使用calloc函数动态申请内存,用完后free,类似如下结构
4 G( O# a  T2 r2 V1 p7 W2 J; c$ i4 @" a( v; }9 y
    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //256
- W8 c1 t9 y! J- s* g! F  d
! ~5 b% Q5 |/ W0 ^% _其他程序段。。。。。
: v# o  L* I* x/ r" K6 [ * z' g6 ?3 X1 Y
   free(x_d);6 S3 O, K: O! u0 |

# ]  |. o+ g1 S* N使用DSP侧单独调试功能,验证动态申请没有问题,( n6 T# a3 c, L6 h* f4 y  W

7 |% R4 p5 u/ |8 ~. K0 {0 H% }/ D但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。3 A  g' L  B5 _' a! D9 }9 Z; B

* b! u* Z. C% \! O, f6 V  m
, A0 [; v3 _# O& `, j% t. s  u/ d) z6 t" c# b* j3 p" J0 t8 i

* x; N% f! S1 v" d6 ?: e, T" z) C* {: f, T! t5 }
( g* ^; b* r3 s7 J- m" k+ U
% H- U$ M3 l& ]: J& R& F1 W
; n* _0 M2 I. f7 `' V8 y3 H! v

3 f2 V- C  D6 r! @- o7 W: J8 L% u) Z# 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 */2 ?+ F2 q4 y6 [6 |% D! H1 f! M
Program.heap = 0;, t* ^+ l. k! O) f+ F  [; \
Program.argSize = 100;  /* minimum size */
# X" d3 \! Q( V4 o7 U. h$ y1 vProgram.stack = 0xF000;                   //我改到F000  也不行
回复 支持 反对

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

积分
1093
地板
发表于 2015-10-28 09:51:31 | 只看该作者
/* create a default heap */( B4 {, ?  D/ Y7 ~  n! M- Q- o0 a
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
# Y  V" P* f! f! Mvar heapMemParams = new HeapMem.Params();1 ]+ J/ j0 d$ q  `# @+ N$ v
heapMemParams.size = 0x4000;5 }2 v; }* x7 G' H# ]6 l+ \/ O

0 [5 U( l1 }8 k. ivar Memory = xdc.useModule('xdc.runtime.Memory');
9 c# K" a5 V% b7 j& y; O  ~Memory.defaultHeapInstance = HeapMem.create(heapMemParams);
) t7 o6 C  B1 \% M6 z, M4 b% t9 {6 l3 M# X% e5 [" k
我大约calloc  每次共计大小为5K*16bits,
  F6 @$ M9 m  _而默认配置才0x4000、需要改大。
1 l- y; N* _' Y5 o* a
/ F. q! C6 E6 i; ?
回复 支持 反对

使用道具 举报

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 | 只看该作者
补充说明
! w4 V4 c) Y/ `2 C' ^% D我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下: o1 K7 q, X! `8 i* s
(不过疑惑的是,为何单独DSP仿真就没有问题呢?)
) j2 @: r( b( h( a

2 [3 V" j  d' Q是不是需要在DSP.CFG中进行配置2 ^- K  ~: d, i0 R9 e
我现在的配置为
4 ~& @. h7 G  \* C( g* {; I; V, i+ m! G, y
/** U$ g- y! B' U/ \0 r1 N; h3 X3 ]
*  ======== Operating System Configuration ========
! v6 g( V2 D+ s+ w. J! e7 \$ Y */
7 E: Q: m/ p! O; k7 I
4 r% B6 E, o% J7 o" T; @$ J/* no rts heap */; v' E9 A2 g+ T6 @: r! }* `
Program.heap = 0;. i/ y+ G* \( o: k9 w+ w  p
Program.argSize = 100;  /* minimum size */
0 b# y. k  A( y8 hProgram.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大
) U0 X. @$ z7 n2 F5 t& \! ], {9 ^
/* create a default heap */
; H4 b8 Y! X# Evar HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');8 N( d9 ?) g4 W  b
var heapMemParams = new HeapMem.Params();
; V, b, }& a# a4 w1 U1 R" T2 kheapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大( O# Q+ G4 T, [; g, o% q) X

) S" _  Y; N  ?: n& W- a6 d
var Memory = xdc.useModule('xdc.runtime.Memory');  K+ a: d7 R. T& W4 ?0 a% E3 q: U
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);) w0 c$ w7 Z% }# Q; c# [  }
  Y: V0 h. Q4 S6 m) ~* O
/* configure System module */
" Y3 G9 `- p( _- h6 `var SysMin = xdc.useModule('xdc.runtime.SysMin');
$ `. q; I9 @! S* _) n# N; l' ]SysMin.bufSize = 0x1000;
* b1 i8 C/ ~8 J) Q; T* D4 m) |SysMin.flushAtExit = false;
6 B+ z- O! w( f& W$ U$ a9 J% r* Z! D% W7 F8 ^6 O0 A4 W  w7 T
var System = xdc.useModule('xdc.runtime.System');
( W0 ^6 k% h6 c( p4 G* P: VSystem.SupportProxy = SysMin;
4 ]$ P+ }+ Y( a) @( S5 ~7 J7 B/ _4 S- @; S3 U) m6 J$ H& [: _
/* configure SysBios to use the lower half of Timer 1 */: B, O, m6 z' h! ]' Y" s5 x. G
var Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');( S: c1 Y2 U$ K7 ^" z2 r
var Clock = xdc.useModule('ti.sysbios.knl.Clock');
3 M5 Z; {% g1 U3 a$ NTimer.timerSettings[1].master = true;
% |4 d5 @: M% \  d, L' v* R0 S/ m1 fTimer.defaultHalf = Timer.Half_LOWER;
% C- _+ z5 g- X# ^3 @/ nClock.timerId = 1;# ~5 o/ W7 E8 R/ q. U6 f7 K
' ^) r7 K6 T6 q  S7 m

9 ~/ R1 ^* A+ W- e" @2 |1 t+ a; `* ^8 |/*
& D2 h; z* {1 x! Y0 [ *  ======== Miscellaneous Configuration ========
. r" [( ]& E  b */; Z( h6 c# k# o% B! t( j# e
4 v0 W* A  m4 a7 N0 H
/* set default diags mask */8 x" h: y* ~' g7 @( X. I, y
var Diags = xdc.useModule('xdc.runtime.Diags');
6 `/ O+ K. x6 Cvar Defaults = xdc.useModule('xdc.runtime.Defaults');/ s: @( C+ H0 B2 [

& }: m4 C, x2 O+ p8 g; P, }Defaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;
: V; Y+ W1 }: y2 ]Defaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;
* D8 Y$ B/ V1 f6 gDefaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;. A) q# O  R! r4 U' w
Defaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */0 F' a2 w; B+ J9 G  W
Defaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */6 j! @% E3 e0 h) g) I
Defaults.common$.diags_STATUS    = Diags.RUNTIME_ON;
& _0 H0 C# {( P2 D" z, UDefaults.common$.diags_USER1     = Diags.ALWAYS_OFF;
1 ~4 e- V" R7 f  @1 RDefaults.common$.diags_USER2     = Diags.ALWAYS_OFF;
; y3 ~8 y% I$ [) ]Defaults.common$.diags_USER3     = Diags.ALWAYS_OFF;
" ?; J5 {% W! W) n5 B' O# H+ ^! Q- B! ^9 ZDefaults.common$.diags_USER4     = Diags.ALWAYS_OFF;7 @  c; X7 j' s% t
Defaults.common$.diags_USER5     = Diags.ALWAYS_OFF;) F) {& f; b, U- K2 b5 r6 u
Defaults.common$.diags_USER6     = Diags.ALWAYS_OFF;9 l7 ]0 v7 ]* t0 m6 j* |% o
Defaults.common$.diags_INFO      = Diags.ALWAYS_OFF;
3 Y  A4 ?+ q0 H; yDefaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;8 r2 \! A/ @7 [: i" S

4 g5 ~5 ^: o  n* ?- b+ [5 r/* override diags mask for selected modules */1 S7 o7 c" D' p
xdc.useModule('xdc.runtime.Main');
7 y4 q: i$ [, X7 qDiags.setMaskMeta(
# N6 y) z, R5 |1 M    "xdc.runtime.Main"," {6 N1 W- X; N+ J* D( |
    Diags.ENTRY | Diags.EXIT | Diags.INFO,$ B6 Z- F. _+ _" N9 d7 G, S
    Diags.RUNTIME_ON  J' r& R" A: L8 e4 w
);
) {0 m; U1 D1 E% M% x: v( S* e5 @+ G) v. D
var Registry = xdc.useModule('xdc.runtime.Registry');! d3 v! i' E, t. a, e* w
Registry.common$.diags_ENTRY = Diags.RUNTIME_OFF;
# ~3 F; X+ D2 Q7 I  m" m+ q7 MRegistry.common$.diags_EXIT  = Diags.RUNTIME_OFF;6 M& }5 {: _* N# G, t
Registry.common$.diags_INFO  = Diags.RUNTIME_OFF;
' o. Q* o: V. @& v% Z. [Registry.common$.diags_USER1 = Diags.RUNTIME_OFF;8 @! {' @2 u% e6 B9 [& G
) S$ `& Q" Y) O+ w0 c- {
/* create a logger instance */  J8 }2 r/ X! d# k: a) w; I5 Q' O
var LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');
5 X; b8 r" h5 f% ?var loggerBufP = new LoggerBuf.Params();
! p5 \$ y) |0 i& \' C' C* ~! nloggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */9 E; Q: J% \0 Y! f: Y' F7 L
loggerBufP.bufType = LoggerBuf.BufType_FIXED;4 n4 r2 x) A2 k& P9 p$ z5 ~/ C
. a4 L8 L7 z- Y8 Y6 m( _; G
var appLogger = LoggerBuf.create(loggerBufP);
/ W: U2 ^7 e+ }* e# X1 L3 S5 KappLogger.instance.name = "AppLog_Core1";1 d3 [5 [4 f- H
Defaults.common$.logger = appLogger;+ {4 B9 A2 k# a- x# E3 ~6 I8 e
Memory.defaultHeapSize = 0x8192;   
& U( z, r7 T$ p, a" K7 NIdle.idleFxns[0] = "&LEDStatus";
& A$ C0 F- ?0 pCache.initSize.l2Size = Cache.L2Size_32K;
: V6 v- L9 q2 L" {0 `3 ?+ ?: G) S( H4 s4 Q
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-12-24 17:24 , Processed in 0.041857 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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