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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

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

: t0 G! W9 T5 H/ S) t: C    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //256
" S* p" G7 V/ h% K5 q$ w: n. G% x' u0 o: S; v& m; F
其他程序段。。。。。2 @: T. H4 U* o# B+ M+ g+ }

- B# M) E( j- p( ~' w4 n6 J   free(x_d);
; o0 @3 n+ Z  ~5 U  Y1 a
- F+ \9 j* M: E, [# K! i使用DSP侧单独调试功能,验证动态申请没有问题,4 `: l8 X+ v3 _

1 }; f4 o6 L% ~% }9 f但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。* a/ Y$ t1 v+ R5 u2 w' n
5 u: R/ F6 |4 i( C3 P& |

: ~* d4 Q; ~( G4 s, q* n' k1 l  W% o" U/ ^3 f
; ?+ u# f4 i/ G) P0 x1 b

8 N- d- |7 z. W: _% H4 f: T
' p* }8 Y7 V8 U) |
" K3 b6 {9 ?& V4 h
% ~5 A, b; M) _1 {, K3 p0 f7 `- y2 l" h( J
- l" U+ c+ h8 g( j3 C* r, _% d
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2015-9-4 10:29:21 | 只看该作者
补充说明# w0 U! c' u: A1 `
我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下
+ l* R7 N: r& |  T(不过疑惑的是,为何单独DSP仿真就没有问题呢?)
$ ^# ~  p! ?3 f8 x8 o0 F
+ F: z! n9 G1 q% s3 c; s
是不是需要在DSP.CFG中进行配置/ _: m! H: ]. `1 C  T) `
我现在的配置为
2 p; T/ Y# e2 n7 L4 U3 [6 r; I: `1 S7 c/ F6 i5 {: U/ ?6 f
/*
& d0 {7 H, h8 X  e9 S6 j! R% [ *  ======== Operating System Configuration ========' T) F" |" ~  Q
*/9 |) x7 A' S& z  Y, ~
% o7 l5 j# D7 K
/* no rts heap */
7 C5 |$ N# l& @$ KProgram.heap = 0;% g" U0 T5 s# n2 p
Program.argSize = 100;  /* minimum size */; ]' w8 ^9 O/ U9 l* m) a+ H  ?
Program.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大1 l; J9 U, W, b$ ]

% r! |5 m' }9 ?1 Q0 C2 i! s" M/* create a default heap */
& m+ P& y2 A) _( o9 D8 l- N  T+ cvar HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');1 {# ]* E& [8 x9 Y4 _; V
var heapMemParams = new HeapMem.Params();! h) Q9 \; ]+ I: I' g
heapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大( h* H- P  t3 _" q( \

+ @+ R4 w6 K& Q# C
var Memory = xdc.useModule('xdc.runtime.Memory');4 B, T# Z- X$ M/ g* m
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);: S1 K$ Z9 b% X/ [
; v$ X) L, x/ t
/* configure System module */
6 t$ ~- Z; h' o' D  \6 [* avar SysMin = xdc.useModule('xdc.runtime.SysMin');
1 \, {4 V6 T/ VSysMin.bufSize = 0x1000;- q3 C2 C9 k3 M$ ~
SysMin.flushAtExit = false;4 I  u0 T4 \" B/ r1 `: m- i

7 p/ E9 |) }2 `! i. X" _var System = xdc.useModule('xdc.runtime.System');/ g) {  h: m4 Q  W
System.SupportProxy = SysMin;
' Q, i. Y0 C# a
  D0 ^$ e: P+ j: v4 C  ]) X/ \/* configure SysBios to use the lower half of Timer 1 */. h. a- C$ p+ o3 ^* a0 a" g4 @% l
var Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');" q& g3 e. g, T: \* f; N4 c
var Clock = xdc.useModule('ti.sysbios.knl.Clock');
4 f( R* L4 s. [Timer.timerSettings[1].master = true;
' m! P( V  K% t) A7 y" l6 U! STimer.defaultHalf = Timer.Half_LOWER;
0 t4 _2 w" B/ k2 R. y+ DClock.timerId = 1;; F6 M( ~- |! f, Y

( ~; r- y" Z% S" w0 I( {+ ]- j
; w9 u9 V. r) f/ G. B- u/ l/*7 N+ w, l9 H  M' ^+ _) d% G
*  ======== Miscellaneous Configuration ========
5 K! ?2 C( [, p: } */4 C: ]8 O: S. B! C8 J! m9 _
2 e  x0 X1 ^& }- y- Q2 p( K
/* set default diags mask */1 m# {1 a- m( ]- e' ~5 c' Q* P3 ], c
var Diags = xdc.useModule('xdc.runtime.Diags');
& w9 `5 k' y% a7 F+ Q* cvar Defaults = xdc.useModule('xdc.runtime.Defaults');
$ X7 r0 S1 |, `; X! y. z* m: X+ p: U2 ?/ ~3 u9 B4 M
Defaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;
! i6 `8 c  p, o5 QDefaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;
2 d2 `( C3 g3 r' @/ _  w0 A7 }Defaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;
  a9 }; @5 E0 Z) _Defaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */
0 H* k& I5 t# N5 R" r4 hDefaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */  n' }9 t. Q2 j
Defaults.common$.diags_STATUS    = Diags.RUNTIME_ON;
9 S) Y- I/ W$ y6 vDefaults.common$.diags_USER1     = Diags.ALWAYS_OFF;
! a. B- h( x- N$ _: [: r6 m# qDefaults.common$.diags_USER2     = Diags.ALWAYS_OFF;
) Q* _7 p$ m3 }, lDefaults.common$.diags_USER3     = Diags.ALWAYS_OFF;
, y* Y8 n2 W8 B& a' p& u% rDefaults.common$.diags_USER4     = Diags.ALWAYS_OFF;2 z: M( N" A0 e' p- }) b
Defaults.common$.diags_USER5     = Diags.ALWAYS_OFF;
3 n7 p# y& p+ HDefaults.common$.diags_USER6     = Diags.ALWAYS_OFF;
$ z* s* ^' {; A9 f4 bDefaults.common$.diags_INFO      = Diags.ALWAYS_OFF;# s( R5 k3 B$ p8 O' m( Y6 {. V
Defaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;$ r; p' q5 ?; O' o' N1 ?
% V, z' S, V. Q& t( O/ I( R
/* override diags mask for selected modules */0 v! q' h: w6 V  m4 p6 h# B- }
xdc.useModule('xdc.runtime.Main');
6 P" c% H" E0 L3 y3 Q% N1 yDiags.setMaskMeta(0 n9 V) m) F# t
    "xdc.runtime.Main",
! e5 S* j1 R3 g/ z    Diags.ENTRY | Diags.EXIT | Diags.INFO,4 U" r* o/ Y. ]
    Diags.RUNTIME_ON
; _+ }4 r, i+ X" P; z+ z  l8 W: @);
3 g% p7 W" s$ F1 ?; F( E  V) ?
9 t/ v7 L2 Y: `var Registry = xdc.useModule('xdc.runtime.Registry');
* l( }' U: t  a' pRegistry.common$.diags_ENTRY = Diags.RUNTIME_OFF;
. R; b" Y$ b0 e6 b; G/ fRegistry.common$.diags_EXIT  = Diags.RUNTIME_OFF;
6 j1 N( r- S4 E1 A( {' y# R2 |Registry.common$.diags_INFO  = Diags.RUNTIME_OFF;' h" @3 X, u! S7 R
Registry.common$.diags_USER1 = Diags.RUNTIME_OFF;
, e' B7 O& ]: V/ h, Y
- z7 I' o. U# I0 |( y7 Z; U/* create a logger instance */
. f. |+ H3 I0 Kvar LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');# g( ]6 a0 c6 s. d* J. J1 Z
var loggerBufP = new LoggerBuf.Params();
; p6 }" I2 T' {' lloggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */
, V) Q- @6 \3 D1 P# c# WloggerBufP.bufType = LoggerBuf.BufType_FIXED;, h+ g  T, s. c" T$ w- j2 b

  H7 a2 m* u& Ivar appLogger = LoggerBuf.create(loggerBufP);
& Q6 s/ w+ ^2 xappLogger.instance.name = "AppLog_Core1";2 e0 f: x) C& s2 T
Defaults.common$.logger = appLogger;
5 v% O. v9 Z2 _; r$ w1 \Memory.defaultHeapSize = 0x8192;    3 E# c* h7 T! f. X% i' V; s
Idle.idleFxns[0] = "&LEDStatus";
; i$ D) |. b5 pCache.initSize.l2Size = Cache.L2Size_32K;: b8 a$ L( ?, t8 I! F4 P
! r! Z/ d; F! R) k2 V* x- W5 F# k# |/ i& j
回复 支持 反对

使用道具 举报

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 */
2 l# o5 q  ^& k4 J# i% f- W( m' pvar HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
( P2 l8 w* b5 Y6 w8 N2 pvar heapMemParams = new HeapMem.Params();0 R# Q: {1 m, l9 S4 \1 B- B
heapMemParams.size = 0x4000;
! u  j& @) e9 i7 Z  E. `6 F2 N/ b* V6 W1 H; S) O
var Memory = xdc.useModule('xdc.runtime.Memory');
& R0 M& K+ F9 D8 Y9 L; @9 dMemory.defaultHeapInstance = HeapMem.create(heapMemParams);
4 |* j/ W7 ?( Z; o& b& u; F7 o4 a$ u
. J% B5 w6 {$ a9 W: M* T我大约calloc  每次共计大小为5K*16bits,
/ Q3 P4 p# j2 R9 M而默认配置才0x4000、需要改大。; c" \/ K# {! n
9 _" V$ T* @+ h- ]( G# A, x, v
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
5#
 楼主| 发表于 2015-10-28 16:14:47 | 只看该作者
/* no rts heap */8 f6 T4 K6 j% U$ r! a# {& ?
Program.heap = 0;
. \  n, O) l8 r3 W1 ~4 L" _! {: AProgram.argSize = 100;  /* minimum size */
1 q, K' V4 k3 r# MProgram.stack = 0xF000;                   //我改到F000  也不行
回复 支持 反对

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

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

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2026-3-8 12:09 , Processed in 0.042091 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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