关于OMAPL138在SYSBIOS下DSP侧动态申请内存问题 - OMAP-L138 - 嵌入式开发者社区 - 51ele.net
设为首页收藏本站
点击跳转“创龙科技服务通”

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2015-9-4 08:33:31 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
创龙工程师你好,我在OMAPL138单独调试DSP程序(使用SYSBIOS)时,在任务中使用calloc函数动态申请内存,用完后free,类似如下结构/ H1 O# x9 Q0 p. Q
) A8 I; C$ M2 U# k; i$ W! x) d
    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //256! U& M; L5 D( l
, s7 M% H8 Q- a6 l# H* K
其他程序段。。。。。7 @9 R3 [+ X5 M( G. E

4 A- i7 I" ^6 p: O  a   free(x_d);
" L' Q* k. `) A! ^5 J9 U1 v  a" l" K  Y
使用DSP侧单独调试功能,验证动态申请没有问题,& B8 j* I( Z$ G6 ~2 x
  k7 ^& V- H6 A6 U- }: c/ M  C
但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。
2 F1 r6 v& w! @: Q
; G1 y0 @( U' t4 S- @% B5 O
: K/ }2 q6 Z5 o& x8 M# R7 u

- i8 W9 \) k3 L" E4 b" v
% i/ E3 F/ Y7 ?+ R  b
) y/ G: @. _5 `+ t6 l2 P# k( p( m7 o! z! B8 I  \1 `

& E+ ~& Q, z; c8 Y
8 r8 e3 S1 z% }( y' I% s; F  p8 ^/ O% y1 N$ X, {! B* j

' j, j1 K6 g( X% ^5 T$ U
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2015-9-4 10:29:21 | 只看该作者
补充说明
$ Z+ r7 d. p2 P: `8 g3 z我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下" N7 X% o% J* l& c) [. E
(不过疑惑的是,为何单独DSP仿真就没有问题呢?)2 q8 l$ d* U5 o9 L

5 Z# ?* X' Y  f5 T是不是需要在DSP.CFG中进行配置
) m8 J' ^0 B& ~$ a7 z& W1 I* j我现在的配置为
% q, j" Q5 O" j) q$ W1 C" f0 J
! f- o. X  v: q% t- V+ l7 O( K/*
5 w, [6 H. x6 c  Z( |5 o; N# K( J( @ *  ======== Operating System Configuration ========
+ |$ x. P1 D0 [" g) a */8 C- L( n4 O/ q6 m1 u$ U

+ U' |$ ~  r% G8 m- h( r4 R. t/* no rts heap */
. b& E) A6 o# }9 K" nProgram.heap = 0;
* c: |4 m  x7 f9 Y! f# Q( E$ X: ?' jProgram.argSize = 100;  /* minimum size */
3 b# T0 `) ^* k, }0 T! X8 s9 z1 j% sProgram.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大7 t3 n$ B5 i% x; k( j6 b
1 ^3 K* H0 H% l  A1 j( ?6 t
/* create a default heap */
( K  L5 k& z0 uvar HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');/ i5 z1 G  h! H& z* K! h8 G
var heapMemParams = new HeapMem.Params();# n5 h# ~$ j% C
heapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大
' o1 h: a  V: d0 F3 X! f0 R1 \
" Q/ r+ s4 l( r+ D" o! R6 }$ n
var Memory = xdc.useModule('xdc.runtime.Memory');
% w; c8 h4 S& N- vMemory.defaultHeapInstance = HeapMem.create(heapMemParams);. F7 W4 i4 D+ z/ k: i9 k/ P. S
: x$ W+ b! {+ z9 d+ K" d, ]
/* configure System module */0 S* r" ^. A; }6 g6 K2 c
var SysMin = xdc.useModule('xdc.runtime.SysMin');
# l1 w2 [. N+ w; ~SysMin.bufSize = 0x1000;
1 x# r/ q: k+ C* U" ISysMin.flushAtExit = false;! W0 h7 ^7 M" F5 P1 z# m( B
4 q/ z. u6 @7 a) N% `
var System = xdc.useModule('xdc.runtime.System');  k+ J+ q2 e  b
System.SupportProxy = SysMin;
) e% s% p( r/ k7 ]; y
# O- r! c5 B) u/ P/* configure SysBios to use the lower half of Timer 1 */. t% @6 A! ^& g
var Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');
- Z6 j! `( p& \. |7 Svar Clock = xdc.useModule('ti.sysbios.knl.Clock');
7 z. L) `4 \/ j' kTimer.timerSettings[1].master = true;
- L! g. u. K5 \/ N. T" i+ y# ITimer.defaultHalf = Timer.Half_LOWER;
, y/ m6 m8 Z& Z4 K9 I5 kClock.timerId = 1;
7 W, _/ l; P* I; r1 g& B. h6 v4 X. A+ y4 L& H' S1 E7 j
/ ]3 H" ?5 e, w3 `5 x9 z. a
/*- v* V% t' R: l; l* P4 L6 D" a, M
*  ======== Miscellaneous Configuration ========. G5 u0 U/ U) |# C# I
*/  X! D5 I$ S3 f
% |2 ~, P. i' M. d; s
/* set default diags mask */
# I8 Y* {9 \: Vvar Diags = xdc.useModule('xdc.runtime.Diags');
" N4 p* ]/ {( O+ avar Defaults = xdc.useModule('xdc.runtime.Defaults');
0 `/ I5 H% ?7 m- l4 e2 d/ N
8 w$ f( j$ \0 Y0 VDefaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;$ U! p0 \& `0 r$ O) i4 `! L. o
Defaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;# @8 j. T3 k, h$ {: \2 x+ M% N2 _4 c- S
Defaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;
" `$ k5 p2 E/ Q' b! V! NDefaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */
- {% ]/ P9 H" Q. L9 CDefaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */
- z% t, \6 w8 g2 ^; @. YDefaults.common$.diags_STATUS    = Diags.RUNTIME_ON;
7 E( L3 O& T" Y" D, T( T7 xDefaults.common$.diags_USER1     = Diags.ALWAYS_OFF;
: i+ l3 l2 H3 u: n" t  Z3 NDefaults.common$.diags_USER2     = Diags.ALWAYS_OFF;9 y6 S0 @$ A* O' |1 e, z) F
Defaults.common$.diags_USER3     = Diags.ALWAYS_OFF;
6 R3 |- T! o' R. ~& u2 bDefaults.common$.diags_USER4     = Diags.ALWAYS_OFF;# l4 y2 W$ O+ j3 d& f
Defaults.common$.diags_USER5     = Diags.ALWAYS_OFF;# _0 V7 }* r6 }2 f
Defaults.common$.diags_USER6     = Diags.ALWAYS_OFF;3 [* }- J' J% }3 C2 S
Defaults.common$.diags_INFO      = Diags.ALWAYS_OFF;
6 l# d) l- O" p8 V9 J  @: N3 dDefaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;
* [" Z4 ?6 I6 U0 q# {% j& h5 K( }  g' `4 K+ \4 G( j
/* override diags mask for selected modules */' W+ p" U/ Y, O& X. E2 t; ~
xdc.useModule('xdc.runtime.Main');
& u5 i& O$ L" |0 JDiags.setMaskMeta(
- \% B, t" ~+ g: R% p( N7 w    "xdc.runtime.Main",- n4 `! k+ G0 X# s2 ^3 x
    Diags.ENTRY | Diags.EXIT | Diags.INFO,( f  \- O  R4 n3 x
    Diags.RUNTIME_ON
, X# S+ O, V2 ~' l# Z, x! J);
1 Y9 @. A; a! P
4 Y  O/ U# @' o+ A+ D2 z: s) t  Q9 Fvar Registry = xdc.useModule('xdc.runtime.Registry');
) R9 H0 G' D: v3 ~Registry.common$.diags_ENTRY = Diags.RUNTIME_OFF;
4 p: i; `! e! f: c; VRegistry.common$.diags_EXIT  = Diags.RUNTIME_OFF;
' a+ K4 d% |3 i8 _1 {Registry.common$.diags_INFO  = Diags.RUNTIME_OFF;1 m+ c, E- t2 j9 v* \
Registry.common$.diags_USER1 = Diags.RUNTIME_OFF;
* B0 }9 y. x; q) {9 X; r5 T7 f6 ^
: ?4 X2 M5 k# j; @& k/* create a logger instance */
. b5 H4 N: Q, ~" l! b( y2 c! vvar LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');
6 w3 p& q( e, fvar loggerBufP = new LoggerBuf.Params();. @7 A+ D: G: d1 l
loggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */
2 Z" t9 K( T  s4 a6 mloggerBufP.bufType = LoggerBuf.BufType_FIXED;
1 h+ \/ G* `/ R; g9 a$ |! z4 I9 E
+ A8 H7 n" h. b/ Hvar appLogger = LoggerBuf.create(loggerBufP);& B. [5 P7 S& g. S9 ~1 a: Q
appLogger.instance.name = "AppLog_Core1";
; W6 Y; Y3 O) ?( u  bDefaults.common$.logger = appLogger;
! x  |+ ^, B1 |$ q# vMemory.defaultHeapSize = 0x8192;   
3 i+ ~6 X+ w: `6 K: l. VIdle.idleFxns[0] = "&LEDStatus";7 j4 V- [9 |- R8 S
Cache.initSize.l2Size = Cache.L2Size_32K;
: k' v9 e# `8 |; u1 l
% s5 D5 m3 \' {- e: A
回复 支持 反对

使用道具 举报

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 */( P1 B# j+ a* l. d& @
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');& {' h& F+ K( v$ r9 F
var heapMemParams = new HeapMem.Params();+ ]; B/ z+ D* R, I& p" Z
heapMemParams.size = 0x4000;
- |, K8 U; h: S1 n" P
3 s1 b( F  Q- E% Z# {var Memory = xdc.useModule('xdc.runtime.Memory');
$ W. a' `' {5 q7 G$ o8 yMemory.defaultHeapInstance = HeapMem.create(heapMemParams);$ M, O% U5 P! y  t, w
. C% R4 R2 M; q
我大约calloc  每次共计大小为5K*16bits,
& a+ A* ~/ l- H0 X  J0 j而默认配置才0x4000、需要改大。& v# H3 G9 R# `9 h/ Q

$ m! {! O: N( ?# D9 r1 S* l: D9 `
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
5#
 楼主| 发表于 2015-10-28 16:14:47 | 只看该作者
/* no rts heap */
. W7 g. ~8 d7 i3 }- q6 SProgram.heap = 0;
1 B$ z* U8 m% R. JProgram.argSize = 100;  /* minimum size */" S6 M0 A* |8 V$ f) ~5 |% B
Program.stack = 0xF000;                   //我改到F000  也不行
回复 支持 反对

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

积分
1093
6#
发表于 2015-10-31 20:55:50 来自手机 | 只看该作者
这个问题,我再测试一下,过两天实测后给你答复!
回复 支持 反对

使用道具 举报

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

本版积分规则

点击跳转“创龙科技服务通”

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

GMT+8, 2026-2-26 13:27 , Processed in 0.044434 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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