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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2015-9-4 08:33:31 | 只看该作者 回帖奖励 |正序浏览 |阅读模式
创龙工程师你好,我在OMAPL138单独调试DSP程序(使用SYSBIOS)时,在任务中使用calloc函数动态申请内存,用完后free,类似如下结构
: G, N' ~9 {# c$ a6 Q, ?$ K' k& J0 A" u1 m. h' w3 y
    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //256
$ x% g1 o. M* A3 o! a: y" v- v* ^; N/ Y
其他程序段。。。。。
1 a  D6 S& X; i2 a: b2 l 8 b* H3 B, a0 T7 Y1 N. P
   free(x_d);/ W% M% e! l4 g

% D8 ^  l$ c: b8 ^6 K. t使用DSP侧单独调试功能,验证动态申请没有问题,! |% O6 `$ R1 D  O6 L9 @( A

3 A1 N' j- E# _7 T4 t但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。8 [1 |, |' f/ X4 Z% T5 ]3 E  i8 p/ @
" L5 u2 Y. e: E: d% \

7 ?- _- r5 P9 H& X/ R
, s: Y: I* l7 k4 S* f9 }+ w+ e
. n/ p' V* `: \8 |9 A' a" d
+ O2 _) C# h4 C8 h/ K* X
- \5 d# \1 w2 B/ @4 _2 y
% S( M( i* h2 p: O+ u$ ~# |  q, N' J. m3 ~6 J
$ A6 T. Z! G- P& E. P# I* [
! ?5 o& ?2 }& {  h
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

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

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
5#
 楼主| 发表于 2015-10-28 16:14:47 | 只看该作者
/* no rts heap */# o* R) a. f9 g/ v
Program.heap = 0;& z; `; U3 N" _9 T2 j2 t" [6 ]
Program.argSize = 100;  /* minimum size */$ D( B) n- t) @% V" C0 Z# s1 S
Program.stack = 0xF000;                   //我改到F000  也不行
回复 支持 反对

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

积分
1093
地板
发表于 2015-10-28 09:51:31 | 只看该作者
/* create a default heap */
6 A% K7 G- h9 a. Kvar HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
, K& }% W1 h$ t& k3 g5 }var heapMemParams = new HeapMem.Params();& @( r+ K3 L' {; l
heapMemParams.size = 0x4000;
4 n0 l/ m1 |2 x! \/ W( g) O  x2 s/ A3 |' |9 {
var Memory = xdc.useModule('xdc.runtime.Memory');& z* S# o' {# V, C0 c! D
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);& k) W$ c- A2 ?' z/ O
1 @9 s( ?- Q8 v/ m5 x# T
我大约calloc  每次共计大小为5K*16bits,
; G# [6 F2 V/ b  A7 V而默认配置才0x4000、需要改大。! V  H! C5 h8 d! ^6 a

( H" w# \: L5 ^
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
板凳
 楼主| 发表于 2015-9-7 15:38:00 | 只看该作者
为什么没人回答呢?   大家都不用动态申请内存方式吗?
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2015-9-4 10:29:21 | 只看该作者
补充说明4 z8 D  A# U/ n4 e- d- Q
我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下
& j" z! n. a, l8 Q7 j# f(不过疑惑的是,为何单独DSP仿真就没有问题呢?)
/ t& U& J; d7 V

& }: [& E3 |& {% `是不是需要在DSP.CFG中进行配置
. m$ w  H# F. o& e6 L: Y/ A我现在的配置为
9 E/ t% \8 g! B0 S/ Q. k: j0 N
$ M; ?! E( O- J& `  t- C/*
" q% M+ y& L5 m+ i; u- C$ S9 M *  ======== Operating System Configuration ========5 m' i8 T$ G+ }) z* B; t" `% H
*/# Y1 W  `# T8 q2 D! ?2 Z" g& H
! U6 C$ t8 y% x$ t, b8 u% c
/* no rts heap *// l8 s4 ], R9 N' z
Program.heap = 0;5 _/ K5 H2 m$ e8 c  ?" g
Program.argSize = 100;  /* minimum size */
5 t1 ~3 \) N& X9 o! d0 p: i( BProgram.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大
+ n5 ^5 w  s9 N3 l: W: y
# x1 ]3 B; \$ A% }4 V8 D  @/* create a default heap */
. t; q7 f5 j9 l  M8 Y2 [var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
5 M1 @, u7 G  D, f( c6 u7 cvar heapMemParams = new HeapMem.Params();9 B. Q' B7 B$ g; z  X0 ?: r4 ?4 Z
heapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大* ~- P8 q) H$ Q  p. {3 e
$ H& U& m0 t. Y8 a2 Q
var Memory = xdc.useModule('xdc.runtime.Memory');! I/ d; s! F, @: r4 y
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);5 {$ U6 p8 M. w7 {8 p# _
" e: S5 h- ^, M' E1 g( B2 A) ?
/* configure System module */
8 Y0 ^  @1 r1 w0 D  u, t, Dvar SysMin = xdc.useModule('xdc.runtime.SysMin');3 c# y, K* J" i6 q
SysMin.bufSize = 0x1000;
- x7 }1 {1 ~& q7 I8 e9 l& v5 o( hSysMin.flushAtExit = false;
# h+ f4 d$ E- D; }$ H% J
' k0 Q4 w: |7 {: f. evar System = xdc.useModule('xdc.runtime.System');( z$ H0 T" f, e, s# Z3 h( Z
System.SupportProxy = SysMin;( {0 @9 f- _9 K2 Y2 y5 B

* I3 f8 M7 s- K' c1 |' X/ V/ S/* configure SysBios to use the lower half of Timer 1 */, x; N, n* P) ?1 g( Q
var Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');
8 l& _6 \  p6 O: c- x$ `var Clock = xdc.useModule('ti.sysbios.knl.Clock');
" V" P" @+ X1 N) uTimer.timerSettings[1].master = true;: I. t* k, \7 R
Timer.defaultHalf = Timer.Half_LOWER;1 v2 Q) g* x6 C
Clock.timerId = 1;
9 P) D( V# j. d5 Y1 U( A& h% ^' M( {

  y6 M6 o" r) J* m/*6 s$ i6 k" c2 L
*  ======== Miscellaneous Configuration ========* ?2 Z  o( q/ f" {* E
*/
& y- ^9 ^8 |& L( K; a" q+ M, T! D  d/ u% Z) L2 n
/* set default diags mask */
8 I8 F% _: L. U& J* @! jvar Diags = xdc.useModule('xdc.runtime.Diags');" V" I$ X! H5 X5 c8 L
var Defaults = xdc.useModule('xdc.runtime.Defaults');
2 R& _3 w0 k3 u( u1 X
) e% l4 R9 ^0 }: L, aDefaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;
% H, Z+ C1 o! O  C. E- Q: _Defaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;
, ]& A6 S: ]4 s1 F- ^: ZDefaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;$ b) ?/ W! f7 O0 |
Defaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */
' {* k1 u+ L! @% F& v6 `; CDefaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */
! s9 Z/ E5 v1 {' _4 l) S( P  rDefaults.common$.diags_STATUS    = Diags.RUNTIME_ON;( g# t, P! R5 X9 g4 n2 t
Defaults.common$.diags_USER1     = Diags.ALWAYS_OFF;
3 S' V( p- {# N2 B* U' PDefaults.common$.diags_USER2     = Diags.ALWAYS_OFF;
* [- M+ F+ y" X+ wDefaults.common$.diags_USER3     = Diags.ALWAYS_OFF;
* K3 E; E5 z; Z4 ?' ]Defaults.common$.diags_USER4     = Diags.ALWAYS_OFF;( i+ q2 P- W% U  x, q2 m5 R, S+ j' ]
Defaults.common$.diags_USER5     = Diags.ALWAYS_OFF;
% V, C7 f. b+ T- e+ PDefaults.common$.diags_USER6     = Diags.ALWAYS_OFF;. I! M& z: _( S3 _" J
Defaults.common$.diags_INFO      = Diags.ALWAYS_OFF;. g. R3 \' J7 p1 \- f# k  x
Defaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;. J! U' t7 F1 X% F1 ]" f( n' }  M

5 T) P" a! s. m+ q  f7 f/* override diags mask for selected modules */
- g2 b( G( |% o# \- L5 Yxdc.useModule('xdc.runtime.Main');
) ^; h* G3 J+ M) n/ O$ ODiags.setMaskMeta(1 K% q; A0 `6 p4 U. C: S. }
    "xdc.runtime.Main",2 _/ S/ Q) v0 H1 r; }
    Diags.ENTRY | Diags.EXIT | Diags.INFO,
" O4 h! H( }- c    Diags.RUNTIME_ON7 o/ h% \/ E5 X" ^( |) C5 ~
);
! Z+ j1 v7 k' g5 V0 o/ E2 I5 Z! ]
5 K; {+ \7 l5 y3 r) Lvar Registry = xdc.useModule('xdc.runtime.Registry');
& `$ z3 d) g; E9 Q1 a5 Z0 a4 \Registry.common$.diags_ENTRY = Diags.RUNTIME_OFF;
8 w- r% \! ^  F5 B5 v) N$ xRegistry.common$.diags_EXIT  = Diags.RUNTIME_OFF;
) F9 \3 m* J( d" K' ARegistry.common$.diags_INFO  = Diags.RUNTIME_OFF;2 J+ G8 e; x7 ~# S  F
Registry.common$.diags_USER1 = Diags.RUNTIME_OFF;3 A  j% Z" A8 ^9 t

1 M; o- z1 M% }: b( W8 [4 e+ |/* create a logger instance */
0 w  o) I" j# Z! ]var LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');
  m, @$ n& y- x8 Q3 V, zvar loggerBufP = new LoggerBuf.Params();; V5 y5 k; s/ B( r5 u; i! T
loggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */
' M. ]' W/ R- k1 JloggerBufP.bufType = LoggerBuf.BufType_FIXED;) D" X5 ?. a4 V9 i) N" ?
. n/ d7 z4 J* ?9 Y9 q
var appLogger = LoggerBuf.create(loggerBufP);; {/ h1 S( S9 Z# L1 X* x
appLogger.instance.name = "AppLog_Core1";* M- i4 p) ?( Z$ ~9 L- y
Defaults.common$.logger = appLogger;0 {( P5 Y4 u! C& K
Memory.defaultHeapSize = 0x8192;   
( n* ]$ m- U) Y% m* @Idle.idleFxns[0] = "&LEDStatus";& G4 y1 s/ V# k3 U- y
Cache.initSize.l2Size = Cache.L2Size_32K;% [4 ]; I( T- t) R- c* M

9 b2 j( R8 I! |  U. C4 T* i$ A  u
回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2026-4-8 11:38 , Processed in 0.047685 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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