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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2015-9-4 08:33:31 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
创龙工程师你好,我在OMAPL138单独调试DSP程序(使用SYSBIOS)时,在任务中使用calloc函数动态申请内存,用完后free,类似如下结构
8 ]$ g8 k" ~9 |% g4 U& E
2 e+ L6 L9 D- f/ p& d    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //256. c& C' ?* P. I
$ V' X4 J) r/ s" @& Q% g+ A
其他程序段。。。。。
9 \7 W1 D3 B8 w( x  M, ?9 J
, U1 _1 e$ G7 T$ ?" W   free(x_d);$ B4 _( ~1 f8 h4 L, W2 i; _
: Q7 m( h" u# g6 X, P5 K
使用DSP侧单独调试功能,验证动态申请没有问题,$ x% {2 i7 I! L. y1 x/ I$ H4 H* B
- t' d: s$ E( o; f5 Q
但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。
4 }9 o7 g7 @' ?+ |8 r

2 A' E& A1 ~3 j; j* Q4 e) q& w. y
8 q; C! G$ Y. I6 w8 H; {; g+ H0 p/ ?% L: S! p4 U7 S6 O
% }" {; T4 Q) b" p3 }1 [
/ G5 p% q# R' Q8 W9 q2 D* n( d

0 `; B% V( O- n+ Z6 v' B
% ^; s" l6 T4 G  G8 X; x) d) F
/ o# ]3 `  B; a% k- M; P  D1 q6 z. Y% W  U

. v+ V" T5 O3 |0 p0 T' r
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2015-9-4 10:29:21 | 只看该作者
补充说明7 C5 ^/ c/ x$ l/ |
我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下
2 c) I' C1 P# I7 j7 k, C0 R! V(不过疑惑的是,为何单独DSP仿真就没有问题呢?)
2 n2 M/ B+ J" H( V; r
4 z3 W, d8 r0 j  M" W6 r
是不是需要在DSP.CFG中进行配置
1 v$ X- i, U9 r1 @) c5 C/ d我现在的配置为
  }* j" `# Y; e- c( M2 Y# K+ r0 T! N% [$ a& ?; a, R
/*
1 |; x; w! Z6 {# \ *  ======== Operating System Configuration ========
+ D1 {$ J& ?% a& z+ o */
4 _3 A& Z+ A5 v" u
$ S! C/ i" Z. P4 p  K# H& e" b0 p! B# [/* no rts heap */0 W; m" W* j; R! b1 k. A" ], P2 W
Program.heap = 0;+ @9 X, R, b2 f
Program.argSize = 100;  /* minimum size */
2 f- S4 s- Y" i% S1 [# qProgram.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大+ m1 @( s+ c; k) m

" N2 v! T. k! X3 W/* create a default heap */# i1 w/ _+ ]# [& N' [/ ?. z
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');1 Y) X( Q, F, L- z
var heapMemParams = new HeapMem.Params();. j: b) n! h7 ~. z2 F- j7 f! c
heapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大
0 S) |" n! ^( g9 X% g6 B
6 S9 j* C% z9 s
var Memory = xdc.useModule('xdc.runtime.Memory');
$ q6 J# l0 }3 g! J7 L7 x% w- OMemory.defaultHeapInstance = HeapMem.create(heapMemParams);
6 _0 |* |; F. G  g7 i* u& m
3 l+ a4 h' _: Z1 U6 ^/* configure System module */7 |* V  j, J: v/ l. g
var SysMin = xdc.useModule('xdc.runtime.SysMin');& M! h% Q4 m: E4 U6 I& Q' c
SysMin.bufSize = 0x1000;
& j; M4 |% H3 C1 ^SysMin.flushAtExit = false;: r( T1 A2 v8 n# S$ o8 Z
& D: a7 y2 c3 D0 Q
var System = xdc.useModule('xdc.runtime.System');
: S1 w9 t0 \$ u$ R3 V/ I" t+ tSystem.SupportProxy = SysMin;
& L/ o2 ~9 F# D7 j& ]$ {" w5 W
4 f" e$ N$ ?$ c3 K; s1 ?, G/* configure SysBios to use the lower half of Timer 1 */
0 r6 @4 W5 `, x0 O& l/ j. pvar Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');8 P4 R' C: p5 S, c
var Clock = xdc.useModule('ti.sysbios.knl.Clock');9 `/ x5 y( Y$ e  l6 D
Timer.timerSettings[1].master = true;. U/ u: B0 b4 Y1 Q. _! X, L$ |
Timer.defaultHalf = Timer.Half_LOWER;
  R' V$ X! k) ]/ P6 r6 K  KClock.timerId = 1;
- C9 j9 k3 k( L/ ]8 X! m4 _' ~, p
' E3 f& M/ e; l, a
/*/ C; E6 v7 Z5 e6 a# W8 z: U9 I
*  ======== Miscellaneous Configuration ========
, L( N+ J6 M6 s1 D/ A; E- j/ p3 `- d* U */
) t7 [- G( L5 B* Y
6 C8 t! d( S! E/* set default diags mask */
3 f  S7 @3 R2 {5 E/ r* Bvar Diags = xdc.useModule('xdc.runtime.Diags');) g9 Z7 d2 m( d
var Defaults = xdc.useModule('xdc.runtime.Defaults');: C; l/ n& l, F! ~! ~
( T+ O' A  F- T% V
Defaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;
$ }8 o2 u, Z( n, vDefaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;0 C7 S+ ~8 r# O. B; ?% N
Defaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;
/ M3 ]: M' Q" G9 m( n  t$ M: i2 QDefaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */
& x1 d0 J; w  C5 l4 `# tDefaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */2 o/ U/ ?7 a' ~3 v( P+ D3 F
Defaults.common$.diags_STATUS    = Diags.RUNTIME_ON;8 K  K/ I& E; [2 u( r. i
Defaults.common$.diags_USER1     = Diags.ALWAYS_OFF;" K) `) \( Q% A, ~# C3 r
Defaults.common$.diags_USER2     = Diags.ALWAYS_OFF;+ x0 O; m" @- O  }
Defaults.common$.diags_USER3     = Diags.ALWAYS_OFF;
' @7 |+ n! e8 R  S) r9 wDefaults.common$.diags_USER4     = Diags.ALWAYS_OFF;3 [- ]) L- X! J  _6 p
Defaults.common$.diags_USER5     = Diags.ALWAYS_OFF;1 I# G1 [& {: L+ y7 B. z3 |
Defaults.common$.diags_USER6     = Diags.ALWAYS_OFF;
7 K0 W+ s6 E; I# K$ ~; p" X4 aDefaults.common$.diags_INFO      = Diags.ALWAYS_OFF;
# n' h# p5 k5 yDefaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;
! U$ S; m1 W. H. X% O5 F1 G* o* G  P( E( m" D, n. k
/* override diags mask for selected modules */& A9 d7 L# Z9 r1 \
xdc.useModule('xdc.runtime.Main');
. z. Y: M% s: x/ ?, r1 }Diags.setMaskMeta(
( v/ j& d& j# `& u8 r    "xdc.runtime.Main",1 K3 u- c: n6 R* S# b7 S
    Diags.ENTRY | Diags.EXIT | Diags.INFO,
2 m" E# f- p% n5 R; `    Diags.RUNTIME_ON
% A/ F4 I' p8 z) h);: c! D. I/ _  c. C8 Z/ G: [

& l% w" w- @6 ?  avar Registry = xdc.useModule('xdc.runtime.Registry');! p4 m' V# U6 y* g6 Q2 I: k
Registry.common$.diags_ENTRY = Diags.RUNTIME_OFF;$ u3 u' C8 P/ K+ ~  Y
Registry.common$.diags_EXIT  = Diags.RUNTIME_OFF;3 b/ v1 L& ], e8 p! ^5 e# Y
Registry.common$.diags_INFO  = Diags.RUNTIME_OFF;' b0 Q0 U, s: M9 K6 R: x- A# M" |
Registry.common$.diags_USER1 = Diags.RUNTIME_OFF;9 r' L4 \& E: w4 u$ O0 m4 S$ c2 o6 p0 s4 W/ B
; q, d% L2 O, r' ~& J1 {8 m$ o! |
/* create a logger instance */
; m7 m3 ]3 ~* r7 ?& P% _& f" f5 @var LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');* l* t' e, j1 }! L' a# V! X- w* S
var loggerBufP = new LoggerBuf.Params();2 r% ]/ {5 i3 A9 h# K6 z4 ^
loggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */
. m. \1 d- y0 A$ F7 k- |loggerBufP.bufType = LoggerBuf.BufType_FIXED;
- `0 W1 I. N  S) c: F. j9 ^2 D; S! C( x0 Z5 b
var appLogger = LoggerBuf.create(loggerBufP);1 a( S% _' p4 C5 A/ [
appLogger.instance.name = "AppLog_Core1";
! K8 Q7 d. ^1 ?Defaults.common$.logger = appLogger;
5 z& ]$ [1 A9 ]Memory.defaultHeapSize = 0x8192;    0 R  I" J- [8 R# x/ V
Idle.idleFxns[0] = "&LEDStatus";
+ }) a) |9 u3 Q# R3 J7 LCache.initSize.l2Size = Cache.L2Size_32K;
( `, H: @# \* Y+ P- m( t+ Z! r6 X9 W  }! ], H- [9 C- _4 a6 b$ Z
回复 支持 反对

使用道具 举报

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 */$ d2 E( V, G  U: t
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');" M1 M4 }6 b4 C! y* K8 j, }$ H
var heapMemParams = new HeapMem.Params();
/ [& o* u  n" g- q; _7 |6 MheapMemParams.size = 0x4000;
& C( @5 n7 J' o) N" d
, @! R) B1 I) S+ l- t/ D- y# F, ]var Memory = xdc.useModule('xdc.runtime.Memory');
. v; Q; C5 I$ o: f% e8 gMemory.defaultHeapInstance = HeapMem.create(heapMemParams);
# ]$ x6 Q. M& ^' @& `8 Y- d/ H! C( ?. D5 p- z
我大约calloc  每次共计大小为5K*16bits,
/ q, Z" X* d& k& ]$ R6 L( z而默认配置才0x4000、需要改大。0 R6 O) Y/ K" M& h
1 E# D9 R; g( a1 T
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
5#
 楼主| 发表于 2015-10-28 16:14:47 | 只看该作者
/* no rts heap */
! K! ~3 i9 @& s7 HProgram.heap = 0;
0 N, {' n8 H% i+ o" k8 L! KProgram.argSize = 100;  /* minimum size */
, O/ i9 o- H0 Z% ^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-8 16:56 , Processed in 0.042019 second(s), 23 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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