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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

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

$ o! s5 R) C9 w    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //256# W4 v9 M9 H. K7 V  P& Y$ Y
- T: v% N9 V& x: w& B0 q& X% F' G
其他程序段。。。。。
/ F3 ?. e6 g, z% N! U
& {) h- e( l( z2 I   free(x_d);( ~" r7 o  q) p. X  H
) U: Y% X9 P/ H
使用DSP侧单独调试功能,验证动态申请没有问题,( J5 w% f: l( @
8 U# ~' C6 _& Q
但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。
, n$ G- F3 k- J( p% Q3 q
) p& ~3 C4 O! C# Q1 g, J, z
( U( q: ?: b$ k0 y8 Q
! M8 P3 X" m: y8 f, p  [

) E1 }- M2 N( u+ ]& u2 o3 }5 i2 ^% F# q) b( }+ L- m6 e1 B

# f: w4 W# o8 }& S) [5 j8 A. {
: q4 G5 P4 m0 y6 Z, e7 H0 W0 Z) D+ P8 _4 E( y  m" q; s+ N- |

) l4 H1 G3 f) o) d; n& n, l0 j2 l2 F' ?' v, [; P! h  }
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2015-9-4 10:29:21 | 只看该作者
补充说明+ M  ~6 |# X0 F. ]3 o; M
我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下; u2 ^7 x) E% f, V- @
(不过疑惑的是,为何单独DSP仿真就没有问题呢?)
: d# a8 n/ P" v! I5 Y

: q1 W) ^3 m7 z3 D是不是需要在DSP.CFG中进行配置3 q9 `9 H. T7 E# H, c! z
我现在的配置为
9 Z4 `; ^5 P  z3 e$ T( D/ D1 t) N9 V* R& z& w4 P) d
/*5 G" h8 ]: m  C1 O
*  ======== Operating System Configuration ========
0 R& R& o+ D" Q) B* P8 u */
" u5 b  e4 x1 u3 t! j2 b
1 H$ n+ I2 f* u( l/* no rts heap */
0 R& `  @- B' B+ b3 y6 ~0 g: [# \Program.heap = 0;
5 l# ~; s+ q/ n0 \Program.argSize = 100;  /* minimum size */
1 P  l7 m: U2 `3 ^; E0 G$ r) K1 ZProgram.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大; ~% V0 m% v7 L1 {2 u! P

- }& j( _8 g( n+ X, F/* create a default heap */
0 I: _  @. O- A7 W$ m% G( F; _% jvar HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');/ R6 r! G( N7 I8 y: ^
var heapMemParams = new HeapMem.Params();4 U7 q8 e& o9 P" r/ X) ]/ e+ ~& w
heapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大; r/ @3 j+ ]+ {2 V3 C- G

& r: a2 Z* n. s9 V5 X7 B
var Memory = xdc.useModule('xdc.runtime.Memory');4 O+ x4 Z, `3 J$ {! U8 `! j
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);2 ~1 I$ I; u; u) G* v* A5 ^" k
6 D) ~1 `$ B2 X
/* configure System module */
8 M6 x2 @( x. C1 G  P& O" |9 C2 }4 cvar SysMin = xdc.useModule('xdc.runtime.SysMin');
" {& `# i* h6 OSysMin.bufSize = 0x1000;6 I& r5 f+ L7 ~
SysMin.flushAtExit = false;
8 t2 S1 K& F! X
3 z; s( A; v; |  g- a! evar System = xdc.useModule('xdc.runtime.System');7 H' q5 p" x8 C5 b
System.SupportProxy = SysMin;- D5 b' Z2 {7 ?+ X% u6 K
/ v* Z  x% V5 p+ x: i/ K( ?
/* configure SysBios to use the lower half of Timer 1 */
1 C2 Z7 _& ]& |, X! t: b2 r9 ?# p+ s; Nvar Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');
0 E) A0 z4 k( F9 T2 N7 ?- H2 |! H0 wvar Clock = xdc.useModule('ti.sysbios.knl.Clock');
( s% Z' i" s/ m/ d$ u8 g0 iTimer.timerSettings[1].master = true;$ e2 u( L5 v" V" X
Timer.defaultHalf = Timer.Half_LOWER;. {, `( r0 s: E. j- M. i4 {- E
Clock.timerId = 1;4 Z9 A; e0 w  h$ ^, O* D& W

9 t* p% R; r# M- `9 _- B
5 v# h* y7 y$ S) ^3 q8 `/*
7 T3 o9 c; ~. d *  ======== Miscellaneous Configuration ========
3 e8 @, Q  e7 ~8 u */
" \) P  F/ N" D- A0 I, a! U, o% A3 l5 o$ h/ n. E) L
/* set default diags mask */
' O, p6 s4 G& f- J" Vvar Diags = xdc.useModule('xdc.runtime.Diags');. c7 S. h0 @$ _# B, ?
var Defaults = xdc.useModule('xdc.runtime.Defaults');
6 m6 B9 ~1 `9 g
8 R+ V9 J: C' ?' m' x- y; iDefaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;7 p" ?" M7 x' ]4 @7 q* P! Z# {1 J
Defaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;' m( v% g, s; a1 w& [# k: S7 H1 w
Defaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;7 e4 ^  ^0 j$ ~5 X1 d+ `
Defaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */
  `  u  l. a! o. r9 jDefaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */0 O8 G' o3 N/ y3 ?7 s( G
Defaults.common$.diags_STATUS    = Diags.RUNTIME_ON;8 L4 T" u1 t: H  n
Defaults.common$.diags_USER1     = Diags.ALWAYS_OFF;
& a! U6 U; l% Z7 D: NDefaults.common$.diags_USER2     = Diags.ALWAYS_OFF;- O$ k4 w$ s0 S5 r
Defaults.common$.diags_USER3     = Diags.ALWAYS_OFF;$ ]! Q& J* l  ~. n
Defaults.common$.diags_USER4     = Diags.ALWAYS_OFF;1 J( b8 V8 f! W5 d3 N. t9 ^; V$ M
Defaults.common$.diags_USER5     = Diags.ALWAYS_OFF;
9 g0 J4 K0 ~3 A1 t' }7 zDefaults.common$.diags_USER6     = Diags.ALWAYS_OFF;, R# L1 X, q$ x6 Z7 L) W& ~
Defaults.common$.diags_INFO      = Diags.ALWAYS_OFF;
2 D. B5 v( n5 UDefaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;
( G: j' D* \6 w  N4 l
; n+ }% q5 M8 L7 S% G( ^7 \/* override diags mask for selected modules */$ m- G. a# p# D8 A. D# a8 g; |, j
xdc.useModule('xdc.runtime.Main');5 e3 d+ O- q& U% @1 A! b
Diags.setMaskMeta(
$ j* j3 \3 a: k3 H. X8 C- R0 o, n    "xdc.runtime.Main",0 E! {( z4 S% m2 R
    Diags.ENTRY | Diags.EXIT | Diags.INFO,5 a0 n) }! L, o8 y
    Diags.RUNTIME_ON/ v0 f2 m1 x# u5 c, {
);
( D$ Z8 h4 k" I( C6 p- M: {4 W6 x+ I$ y% L  s) [7 N
var Registry = xdc.useModule('xdc.runtime.Registry');
2 D3 ]& Q1 K2 w- \7 f6 F+ rRegistry.common$.diags_ENTRY = Diags.RUNTIME_OFF;
# L$ l: R9 W- p6 p$ G# K) H3 rRegistry.common$.diags_EXIT  = Diags.RUNTIME_OFF;1 v! H9 `1 x. w$ ]1 C$ {" Z7 ]) ]; C
Registry.common$.diags_INFO  = Diags.RUNTIME_OFF;
" P+ g8 v* b; H/ s* X+ IRegistry.common$.diags_USER1 = Diags.RUNTIME_OFF;
, l2 s! J0 @) e; i5 ^* q8 l$ i! h( j4 [0 D. \
/* create a logger instance */$ |. v' @( I" G1 c' d0 n; o
var LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');3 v) L) [9 @' z. z9 a2 u  U
var loggerBufP = new LoggerBuf.Params();
2 ^  a! w- U: _9 SloggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */8 I0 |) |: g8 p6 ^0 i5 C$ H/ i
loggerBufP.bufType = LoggerBuf.BufType_FIXED;7 Q6 g9 o- U  \4 `( g. K5 j2 E

8 H/ D3 r/ b5 rvar appLogger = LoggerBuf.create(loggerBufP);
+ W& \2 R/ R# A. z# f# m6 s0 G: f* B( [% PappLogger.instance.name = "AppLog_Core1";
) k7 q7 v. G; k; B; TDefaults.common$.logger = appLogger;
* Y+ g8 s" P' O( aMemory.defaultHeapSize = 0x8192;    # n3 C& a* F' [$ y" o3 T# _
Idle.idleFxns[0] = "&LEDStatus";0 E+ I% O2 w( }& J
Cache.initSize.l2Size = Cache.L2Size_32K;
" v6 |' r, f8 ^/ V! M% i6 N
% S5 p0 k$ s1 ?( E  D
回复 支持 反对

使用道具 举报

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 */* h7 @8 a% s7 {1 {
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
9 L5 v- C+ Z3 B: M3 nvar heapMemParams = new HeapMem.Params();
6 B' x; ]6 A6 C8 x8 aheapMemParams.size = 0x4000;
; v$ l+ I, D* i5 O5 o) H) l5 m. i; H/ b
var Memory = xdc.useModule('xdc.runtime.Memory');
. z# l* X3 j9 i' E* v- p3 P0 g% m5 RMemory.defaultHeapInstance = HeapMem.create(heapMemParams);
6 \) v! [5 Q! ^! j3 E& C! x6 w, e3 n' z- F: k* U+ O% x7 g( X, T
我大约calloc  每次共计大小为5K*16bits,
1 P$ B+ r( z0 U, F, @; c+ w+ j0 N而默认配置才0x4000、需要改大。
- c% h* _7 Y" b: k, A+ o8 V7 C) X: f7 \2 h
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
5#
 楼主| 发表于 2015-10-28 16:14:47 | 只看该作者
/* no rts heap */
* X# \" F7 C4 ~( u5 tProgram.heap = 0;/ |! E5 v) m$ O/ q/ b$ [' J# x, p
Program.argSize = 100;  /* minimum size */
, h5 \# b$ \) [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-14 17:45 , Processed in 0.041653 second(s), 23 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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