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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2015-9-4 08:33:31 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
创龙工程师你好,我在OMAPL138单独调试DSP程序(使用SYSBIOS)时,在任务中使用calloc函数动态申请内存,用完后free,类似如下结构
, q, |9 r) Z6 E' B& ]( J3 S! x
- r4 K, E" g' k2 b    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //256
# {1 G6 z, [( T: d0 D0 m9 |! J$ |: A/ g2 {7 E
其他程序段。。。。。
; Y- m! n* i$ X6 U' L0 W
' g0 K  m4 u8 v! f4 W' T   free(x_d);: ]' {. x1 e8 ^0 o8 ^+ z/ U' W8 k
# N1 ^; }) @4 `; T% _% l2 ^- o
使用DSP侧单独调试功能,验证动态申请没有问题,
- O2 z, ^+ A5 k. h8 B/ C7 L2 u/ i) U; a% A$ c
但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。: }' n% Z4 J9 k& e; `' \

9 i* ~) O( A* W. \" ~% J3 j. G2 h9 U% J8 m/ t: W- P
+ t3 ~+ D, M. H& c
) \0 t. {! X/ p% u! a
: o4 c- @) l& }5 W& U

9 ^1 k1 G/ U3 q' Z8 n4 A6 c: r- T! d+ q( V
) D. c, _, \6 Z0 M9 I9 _
0 ?7 B- H* @" {" |2 S6 h
4 a' W- g8 ~6 Y% N$ a6 ]. m' p
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2015-9-4 10:29:21 | 只看该作者
补充说明- `; E7 M# @% L: F
我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下
' I- r3 M# {3 U/ c  P(不过疑惑的是,为何单独DSP仿真就没有问题呢?)
6 A$ s* n0 P3 D
- S7 @; Q! i+ Z! }7 u, k
是不是需要在DSP.CFG中进行配置
5 {3 Z# Y  \3 a( _( d我现在的配置为
' ]9 w( T" P* [+ ?2 E# y1 o( y0 C1 q2 }. t$ F- `" `* I0 F: }8 b
/*
% f0 m  Z6 d! V$ V$ q* f *  ======== Operating System Configuration ========
. o; Q5 E3 Q, b */
/ }# l! U- c$ V  J/ F: b5 h% J# i: X* L7 u6 O, ?! H
/* no rts heap */
5 W# _( h- U0 G1 n5 A- AProgram.heap = 0;
( A+ b6 A9 a4 w* {9 pProgram.argSize = 100;  /* minimum size */
+ N8 L+ z* J8 ~8 U! `Program.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大
/ ~9 V+ p; O  v' w3 S& L/ L3 [9 |* q+ g9 ~5 }) O; M: u3 n  Q
/* create a default heap */, @8 H7 G- j. h3 z- B! E2 I; d0 I
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
6 ^2 p3 F; N% U. Xvar heapMemParams = new HeapMem.Params();
! T; i$ A" c+ S% ]/ pheapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大
5 I2 L8 ~. \; N0 D& ^* b' }2 A6 Q4 |; S! K: u3 W
var Memory = xdc.useModule('xdc.runtime.Memory');9 [- i( g% Q5 q2 d9 t* V
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);
) V6 B( |0 u. {+ H+ N# a
3 }/ @% v. |2 p! B7 }) m5 r% R! E5 i/* configure System module */
4 t( o: P% g4 _# ?# q7 b  uvar SysMin = xdc.useModule('xdc.runtime.SysMin');- Y/ z, ~9 w" q- P) F
SysMin.bufSize = 0x1000;. }, B, r6 S0 x( P
SysMin.flushAtExit = false;
6 t+ Z! t" Q  ~+ h# F- w" j5 ?5 F7 |: J
var System = xdc.useModule('xdc.runtime.System');
- E: g* W) b3 M* x5 K8 K6 xSystem.SupportProxy = SysMin;( m8 z$ F5 `% `& A: _, g+ a6 k: F

) t# ^7 T9 x6 K5 t7 l3 o# X/* configure SysBios to use the lower half of Timer 1 */2 g+ K6 F! u1 u5 Y
var Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');/ }8 i8 a, I; J8 C
var Clock = xdc.useModule('ti.sysbios.knl.Clock');/ w7 w1 o; U: g9 R2 @7 _5 `8 z
Timer.timerSettings[1].master = true;
  U. @) I& m& uTimer.defaultHalf = Timer.Half_LOWER;) q; x% A$ S# W4 a1 C- _8 _5 S
Clock.timerId = 1;
9 m$ Q$ D5 w# Y9 X7 k/ j$ K# E
/ h$ \, e: p7 p. f9 N; f
& a* h' F  L. b$ f0 _/*
" u- }, F1 ^: U *  ======== Miscellaneous Configuration ========1 Q! x" y& X6 k( {1 A7 g& e$ F2 ?( H
*/
2 D5 Q& ^- t7 T4 R9 p. K+ B7 {0 k9 `5 Q4 w8 E. ^2 U4 t/ N
/* set default diags mask */0 N' z/ V( X: p9 J" H& I
var Diags = xdc.useModule('xdc.runtime.Diags');5 A) H3 k1 I' y. l* j! v
var Defaults = xdc.useModule('xdc.runtime.Defaults');
9 r! I( d% J) S0 t: f- S6 Q# h) K- K; a% O9 H
Defaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;
7 M, S1 p/ }" C- hDefaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;2 d& Y  ?+ F2 J9 H
Defaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;2 f) O  U$ v& M+ J' Z" b
Defaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */
3 I( u' |$ [5 WDefaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */  U2 h( V" t3 S. o
Defaults.common$.diags_STATUS    = Diags.RUNTIME_ON;* d. i- p2 Q! @+ v
Defaults.common$.diags_USER1     = Diags.ALWAYS_OFF;2 j2 g0 l1 h2 o; ]. |
Defaults.common$.diags_USER2     = Diags.ALWAYS_OFF;! i* J' B5 ]( N1 E- d. @: \2 o6 B% ~
Defaults.common$.diags_USER3     = Diags.ALWAYS_OFF;
# ?9 [, O2 ]$ `Defaults.common$.diags_USER4     = Diags.ALWAYS_OFF;8 }+ Q, r7 W7 j/ N
Defaults.common$.diags_USER5     = Diags.ALWAYS_OFF;
+ @5 ~+ V, r3 W8 \, U; i& MDefaults.common$.diags_USER6     = Diags.ALWAYS_OFF;
9 J1 ]/ y9 ^8 N/ ^Defaults.common$.diags_INFO      = Diags.ALWAYS_OFF;/ m. w" h# U+ z; a5 ?
Defaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;# k& k" {+ P3 e( d$ E# ]

  W5 f5 s" y& ~6 z6 `- |/* override diags mask for selected modules */
2 D6 g+ r% V: m& U: K9 Wxdc.useModule('xdc.runtime.Main');
& q8 t5 [$ u0 V+ A( z4 d' E6 ?! t) EDiags.setMaskMeta(3 _2 y; b7 S2 k4 {+ P0 W) L4 W
    "xdc.runtime.Main",* J3 [5 ?2 y- T! }# b# w
    Diags.ENTRY | Diags.EXIT | Diags.INFO,+ S2 T3 i, L( T  o) E" Q! q
    Diags.RUNTIME_ON
2 r. b5 p- I% X+ @0 z$ Y);  k. Q+ t/ e$ Q( c0 ]) ]

; e# Z# y$ v- ?; d4 z# Qvar Registry = xdc.useModule('xdc.runtime.Registry');; R; Y! X" H7 H  n1 K- B
Registry.common$.diags_ENTRY = Diags.RUNTIME_OFF;
/ |" g+ t5 f" _7 yRegistry.common$.diags_EXIT  = Diags.RUNTIME_OFF;! F1 V3 ~; F5 J/ T6 s1 C
Registry.common$.diags_INFO  = Diags.RUNTIME_OFF;
2 ]6 r2 E( ?5 Z. ORegistry.common$.diags_USER1 = Diags.RUNTIME_OFF;
; F7 x; c9 ]% @1 p" c; c6 `: u& n% B
" T8 d( S) n8 N2 o) C$ ~/* create a logger instance */
& X" T6 q3 K6 K) Kvar LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');; r: k6 Z. g- z, ^# z$ C0 ]
var loggerBufP = new LoggerBuf.Params();! L+ [; ~! V# w5 T/ y
loggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */. J" m+ _  R* b% b
loggerBufP.bufType = LoggerBuf.BufType_FIXED;" W7 i" T: t( K( v3 I& U

8 b! n/ O, C5 j9 `var appLogger = LoggerBuf.create(loggerBufP);* s3 p& u7 v$ J8 c8 s' ~
appLogger.instance.name = "AppLog_Core1";
" m" a+ d4 z' B6 yDefaults.common$.logger = appLogger;
6 L- k; H. e( EMemory.defaultHeapSize = 0x8192;    : |' T1 \! {, V
Idle.idleFxns[0] = "&LEDStatus";$ y* [+ |8 Q9 h1 l( ?! ]% R
Cache.initSize.l2Size = Cache.L2Size_32K;& x- e% \0 x" Z: I8 r
+ f; k/ b  E% E) }
回复 支持 反对

使用道具 举报

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 */
% g  p: A3 Q$ i2 P1 r' Gvar HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
( F+ J) O4 J; Zvar heapMemParams = new HeapMem.Params();0 U. O" K7 n. s
heapMemParams.size = 0x4000;
$ g5 R* C/ A" x( o# y! Z3 w8 F1 |; D# H* R5 c) R
var Memory = xdc.useModule('xdc.runtime.Memory');
; P6 M: e6 u% `) [- x" _Memory.defaultHeapInstance = HeapMem.create(heapMemParams);' U  }0 G! Q& l' m

; J/ u0 ~0 `5 I: `我大约calloc  每次共计大小为5K*16bits,! d3 f7 S& O2 N, s+ u) I
而默认配置才0x4000、需要改大。
3 l' w% F! {6 A8 p. [+ g$ Z4 b- e
! w5 j& {* B# k3 Z! ~. [- g
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
5#
 楼主| 发表于 2015-10-28 16:14:47 | 只看该作者
/* no rts heap */
- d$ t6 o; i, z3 d# X! ~8 NProgram.heap = 0;2 Z% Q# ?9 }6 K. y
Program.argSize = 100;  /* minimum size */  o$ e5 q) k; _2 _% C
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-5 20:56 , Processed in 0.041594 second(s), 23 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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