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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

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

$ D- R4 H' ~5 N1 ?+ x5 T/ J/ c    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //256
" j$ J' o/ M# |! x0 u6 P" i
: P/ \9 O3 ]; @其他程序段。。。。。: @  o% }$ v4 R+ h" ]; v

( x1 \2 y: j1 S' J6 B   free(x_d);& S$ N2 L3 ]! @7 J

2 P* v2 F$ z$ g4 I' G$ H使用DSP侧单独调试功能,验证动态申请没有问题,+ V4 @7 [% r$ w1 Z& x8 k( T( z6 |$ C
+ K! \% @8 S2 L& n: a9 }/ w6 s
但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。
( S8 v" u# }4 o' k" L
/ ~- Q+ L& t$ Z, c2 ~2 G( N

' \  `4 Z' i2 n4 S' v0 x; N9 E9 {7 |. P: E/ z' v7 Z* B

6 M1 N5 x" u$ m% b
' B  ^: _. z4 O2 d9 y8 K
* D8 H% G9 f' @7 u4 N; l! u+ N
* Y# d0 o2 L9 }( Z6 r0 n0 y, K; b6 ^& L
5 Y7 s! e1 D- B7 [5 b  {4 i' |3 `

# l2 ~" \& [- e* w
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2015-9-4 10:29:21 | 只看该作者
补充说明3 u5 n. C# U9 x
我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下+ X) C# x: V* p0 w. S5 X
(不过疑惑的是,为何单独DSP仿真就没有问题呢?)
7 e# L7 k- r6 R% E, Y/ H

6 H* N4 r% W6 W0 T* g5 e/ J; G是不是需要在DSP.CFG中进行配置2 _. k/ {% m$ U$ v' \
我现在的配置为
( j, i9 r( x4 C3 f" t
$ y8 u$ C2 X; K3 {6 s/ j/*
7 i4 l0 D* L  I! F! f% d( B *  ======== Operating System Configuration ========
3 m& p9 Q8 W9 t( [# L. ?* a8 q */
9 D; E) j" ?  X- S3 e+ U; F9 v: O- G& v& v$ W. {
/* no rts heap */$ m& o# g0 L" l/ c0 u- d* v' ~# b$ \
Program.heap = 0;+ C" u, ?% [6 a; k
Program.argSize = 100;  /* minimum size */
( s, z; f/ C( [( O( T" I" O4 \Program.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大
, d, j' B, H/ O/ m0 c$ ^9 J
: Z! A$ n+ G" G& ~$ U6 B/* create a default heap */
4 l7 V1 L' h* ?5 p% dvar HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');3 k' W$ Z* l, L* H+ y' ^
var heapMemParams = new HeapMem.Params();
( J( n# N0 p# N; `heapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大
" A2 W# b% P+ q- j/ ^2 J
3 C+ I" F# e: Q2 V* k" ~6 K
var Memory = xdc.useModule('xdc.runtime.Memory');
: N/ A0 @7 c5 R# b8 rMemory.defaultHeapInstance = HeapMem.create(heapMemParams);+ W  ~+ w, D) o, n' E$ d! [
  ]5 x/ J7 Y. F" I! a
/* configure System module */: Z0 m! E  m# d, I2 h2 _
var SysMin = xdc.useModule('xdc.runtime.SysMin');" M* a# h3 o$ r2 ?; s
SysMin.bufSize = 0x1000;
" O! ~; d9 t5 X4 iSysMin.flushAtExit = false;4 K. }2 e% G0 ^$ A. B

: E( b; U7 X; B2 wvar System = xdc.useModule('xdc.runtime.System');! J6 M# _* E7 ], W$ r8 Z4 f. O0 i
System.SupportProxy = SysMin;2 D5 |/ p: }/ X8 x0 N
5 C8 R. u* i) k" C7 r. l3 l
/* configure SysBios to use the lower half of Timer 1 *// [3 ?: S+ k/ ]" x. \* Q- D
var Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');: Q# s! M8 @+ E9 M, Z
var Clock = xdc.useModule('ti.sysbios.knl.Clock');
$ Z4 R/ p0 \6 a. FTimer.timerSettings[1].master = true;
9 q( S0 R: Y) p6 i" l* J+ H. q4 h/ YTimer.defaultHalf = Timer.Half_LOWER;
% N( e$ V8 M' N0 p7 N6 {Clock.timerId = 1;
) z; ]8 ?6 R3 R6 Q7 e; T  D  ?( y* X$ R' m0 P8 D4 e& r. |
# g' K8 w" [9 z( V$ P
/*/ H0 p5 D6 A; {  `& @
*  ======== Miscellaneous Configuration ========+ R: W+ f9 k6 `& n0 G2 I
*/
% Q& Z* t6 s2 h
0 h0 b  d4 W+ N- ^: i& x: l/* set default diags mask */
& ?2 y2 w" ?! Z' Tvar Diags = xdc.useModule('xdc.runtime.Diags');4 F6 ~$ h3 H' n* T/ [) H* w
var Defaults = xdc.useModule('xdc.runtime.Defaults');
; J4 S6 Z3 c# M+ |. K
: @7 k, K' v0 X5 j2 g3 G# u( HDefaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;, O! n  `; Q! ?9 h5 _
Defaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;
1 n$ r* }5 h* e/ `/ p5 P0 ADefaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;% R* P9 r, Y7 W. J/ M
Defaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */% U; w* ~- a4 F* v/ I
Defaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */
( @: u$ O9 M4 k  |# J# v+ x  cDefaults.common$.diags_STATUS    = Diags.RUNTIME_ON;
2 i8 a- m+ a& X8 D6 Q) ]2 I3 \Defaults.common$.diags_USER1     = Diags.ALWAYS_OFF;
& H( H7 e6 R- ]: X4 SDefaults.common$.diags_USER2     = Diags.ALWAYS_OFF;
/ O' U+ K7 O6 \: I' f3 F  TDefaults.common$.diags_USER3     = Diags.ALWAYS_OFF;
) U( Z! g9 @2 F, w8 YDefaults.common$.diags_USER4     = Diags.ALWAYS_OFF;
4 ^( L' `3 l" X2 i4 j& D  {9 YDefaults.common$.diags_USER5     = Diags.ALWAYS_OFF;+ d9 ?( t' l1 f
Defaults.common$.diags_USER6     = Diags.ALWAYS_OFF;$ f' ]/ }- l3 r9 x! ?% @, f
Defaults.common$.diags_INFO      = Diags.ALWAYS_OFF;
6 c0 G6 z: R2 A+ u0 Z: \& J, ?Defaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;0 S2 Z6 m( A) x* B5 l. H# M

9 N8 x! h( Z4 R% L5 w/* override diags mask for selected modules */- a& O  ^0 v6 c% y4 a
xdc.useModule('xdc.runtime.Main');
' n8 i. _4 {! U3 O# ?. [: KDiags.setMaskMeta(
; m: a! x- l/ c5 E0 a$ ~    "xdc.runtime.Main",4 w; k4 G4 o, [# y! ^2 b
    Diags.ENTRY | Diags.EXIT | Diags.INFO,
5 t" [7 P: z# z* M) F+ \+ o1 B/ E    Diags.RUNTIME_ON
6 h. A/ `/ r  J. _);9 x: W$ p% S3 v% O! M7 B

% C3 a% Z5 |' @) ~4 ]var Registry = xdc.useModule('xdc.runtime.Registry');
" x/ e- [8 c2 p% M$ t0 XRegistry.common$.diags_ENTRY = Diags.RUNTIME_OFF;- h( h8 z4 k( h! K+ k4 F4 N
Registry.common$.diags_EXIT  = Diags.RUNTIME_OFF;
( O* Z1 i+ H& |+ M, a1 T  ?5 j* C2 X$ z) HRegistry.common$.diags_INFO  = Diags.RUNTIME_OFF;: W% D  _( X# b/ v$ _, _, G7 K
Registry.common$.diags_USER1 = Diags.RUNTIME_OFF;
7 W8 S+ z. B" w/ P. y4 n" i
+ |  y; P+ v* {2 w& O$ x/* create a logger instance */
2 H$ a$ s7 K5 l, c9 d' e, dvar LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');
3 o6 n. y! G9 ]! f6 f" Evar loggerBufP = new LoggerBuf.Params();
$ c- y$ b$ s1 }) }* KloggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */! R( }* ^/ T* x" h/ p
loggerBufP.bufType = LoggerBuf.BufType_FIXED;
) G; k0 M9 ^" b
) O5 F* H  g" t8 }( @8 J- Wvar appLogger = LoggerBuf.create(loggerBufP);
! B  {/ z) |# v3 W) uappLogger.instance.name = "AppLog_Core1";9 c2 @: d* c+ `, O0 Z
Defaults.common$.logger = appLogger;
7 ]( L5 {+ w5 K1 [Memory.defaultHeapSize = 0x8192;   
$ g( H7 @2 p, {& M$ QIdle.idleFxns[0] = "&LEDStatus";& s+ b' `) e+ q* C5 p! g9 {) _# M
Cache.initSize.l2Size = Cache.L2Size_32K;
; e9 w% S  W3 K( B2 V; \" F# {& O5 D& f
回复 支持 反对

使用道具 举报

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 */1 D$ R2 L3 R3 b* x
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
4 p. N( O/ W/ h) F9 Mvar heapMemParams = new HeapMem.Params();2 l4 |8 ?# s3 o) o1 R2 X
heapMemParams.size = 0x4000;
" s# N; V5 U( t: q  |. M
( ~+ N4 w, J6 u( m4 ^6 b, Nvar Memory = xdc.useModule('xdc.runtime.Memory');
' e1 w$ k  w9 Y* q# ^Memory.defaultHeapInstance = HeapMem.create(heapMemParams);* {+ u* l! ?# Q; U! N6 D

5 _5 c- ^; Z8 z7 Y3 {我大约calloc  每次共计大小为5K*16bits,
- c; I6 i, p# e7 C& Z7 U- z; g而默认配置才0x4000、需要改大。+ Y' G8 l4 S- m* a5 o* ~. B& D

5 s2 S( O* B; B. O$ r% n7 |+ S6 B
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
5#
 楼主| 发表于 2015-10-28 16:14:47 | 只看该作者
/* no rts heap */0 O9 o/ @+ i# a& a3 L2 m" e- t- v5 O
Program.heap = 0;
1 V' Z% x9 N5 \; G. PProgram.argSize = 100;  /* minimum size */9 o) A- B) I  m
Program.stack = 0xF000;                   //我改到F000  也不行
回复 支持 反对

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

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

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2026-4-6 16:06 , Processed in 0.041789 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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