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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2015-9-4 08:33:31 | 只看该作者 回帖奖励 |正序浏览 |阅读模式
创龙工程师你好,我在OMAPL138单独调试DSP程序(使用SYSBIOS)时,在任务中使用calloc函数动态申请内存,用完后free,类似如下结构
# X* G; W" u, w2 c. i  u& s0 i. f8 Y0 _5 [. \
    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //256
% o% Y- O; s, O1 _' O0 J
0 s) ~( D/ K% }* A+ e4 F其他程序段。。。。。
2 d/ z8 {7 c; k9 u/ B) {8 `  n % w& Y) s) x. X' G7 E
   free(x_d);
$ H7 F7 |& b& T' ]+ |6 b
* ^. G8 p+ _. l+ K* {/ W使用DSP侧单独调试功能,验证动态申请没有问题,6 s1 T" i5 h) @: A/ c) b( B* ~- P

( }3 I% b$ \4 S# q! u但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。
/ t* w9 }: N# v: O2 [- \
+ W8 t" P$ H: J0 A

: j" {3 _! X2 l! \; U/ ]( e: V1 @" P8 P5 \  ^" K/ k) p0 m

% ]9 m$ r0 u5 p# J! r
) c" h5 |, ?& @. P
7 F: U/ m  n5 W1 }, N
7 u1 E1 z# C' a# l' R% }! I4 F& \1 o/ w# t6 r/ u

( d; G4 w) t: N! L
& n  p% G% g& I9 J; v
分享到:  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 */$ ^/ ^& k' R% l3 O& B4 |
Program.heap = 0;
$ a+ i8 c2 S) X7 x8 d6 VProgram.argSize = 100;  /* minimum size */
* i* G2 i  i! NProgram.stack = 0xF000;                   //我改到F000  也不行
回复 支持 反对

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

积分
1093
地板
发表于 2015-10-28 09:51:31 | 只看该作者
/* create a default heap */" m- G& O$ p# {5 O
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
3 q  e  n0 \  D6 A: R2 H3 lvar heapMemParams = new HeapMem.Params();  q; M: m+ |8 x- l2 K
heapMemParams.size = 0x4000;
! x7 N5 {) b+ [6 W& B, q4 n$ T4 X3 p# j' L2 H
var Memory = xdc.useModule('xdc.runtime.Memory');2 L5 O$ n: g$ q# t
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);
* _0 g: J  U  M. \8 f0 o* L" P
! _8 Z/ [( X0 c& {  ^! `. b9 o4 P6 y我大约calloc  每次共计大小为5K*16bits,
- O( G2 V0 W1 i; D9 @而默认配置才0x4000、需要改大。' L2 G6 c% n4 u  }. Z
! h6 o( l! y" w3 q4 u) t
回复 支持 反对

使用道具 举报

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 | 只看该作者
补充说明
; S5 H; N- q5 p! N6 p我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下
! A2 t* v2 }* X& r  w$ i(不过疑惑的是,为何单独DSP仿真就没有问题呢?)0 l7 z6 x* R" z6 W/ Y
. V9 p3 u8 J! x$ u
是不是需要在DSP.CFG中进行配置
4 m3 }9 v& u" ~6 P( \6 i我现在的配置为
$ }) N% R9 Y9 E4 H6 ]
$ y5 a0 f" a2 c- z1 q% {5 V/*
* f5 D$ F+ L1 M  r) g *  ======== Operating System Configuration ========: e% m" t. F* {, }: [. f) B( F
*/4 i( r8 C1 d( T$ Y0 m- i1 p" `- V
2 u# b$ q" s% M' A' ~( W
/* no rts heap */5 }+ c) _& y9 c6 J
Program.heap = 0;
0 {- w  A) v; t( V* H  a7 qProgram.argSize = 100;  /* minimum size */6 p( r9 Q9 d' o% ]4 u$ F' \5 H
Program.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大
7 @8 Q4 A5 M! Z$ m2 @. }% [  c
; n3 C2 n7 B9 G& U+ ?6 c/* create a default heap */
, A8 b" ~8 x' l- \5 z0 c! [- avar HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');  I/ G( }( v: A( N( K6 X; p/ p
var heapMemParams = new HeapMem.Params();" [9 D1 j- X" W
heapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大+ U3 F! q2 Z) t6 b' ?

+ k' J9 S% u' |  f# S7 M* h# b
var Memory = xdc.useModule('xdc.runtime.Memory');
8 ^) w! A" S. D# G+ x' c" SMemory.defaultHeapInstance = HeapMem.create(heapMemParams);! w( D1 {. z9 {/ q. U" r+ V" D

9 E" h4 Z9 z; {, @, D7 r2 i( K( l/* configure System module */
# }" F5 b. E5 J$ }var SysMin = xdc.useModule('xdc.runtime.SysMin');# d. n9 V) y5 M8 o8 J8 `) B( m
SysMin.bufSize = 0x1000;6 Q5 y! g6 P4 O5 o2 E* l
SysMin.flushAtExit = false;* ]9 R' ~  p# Q  e; S0 E7 E
6 t' F6 X' m; v9 w! B3 Z
var System = xdc.useModule('xdc.runtime.System');
: k- y( a- w1 F# l8 NSystem.SupportProxy = SysMin;
) k8 F) T/ |2 c) |( f% ~6 N5 m1 ~) h- @/ \! D- M
/* configure SysBios to use the lower half of Timer 1 */
7 \( A/ k+ C1 c1 u- {$ Ivar Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');& f) F; X2 R0 D/ ]) ?) K
var Clock = xdc.useModule('ti.sysbios.knl.Clock');
2 P  T' X7 v* F6 q# U! p5 k8 gTimer.timerSettings[1].master = true;
/ F# R/ P* a8 s: O/ [Timer.defaultHalf = Timer.Half_LOWER;/ t6 s) @8 B7 O" _% F" o
Clock.timerId = 1;
( H1 }  T1 c# D- @. u5 ^/ B) c* }% u
8 ], Z  ~" u( ]
/*3 i3 }3 X8 C: J; b3 ^) {+ z
*  ======== Miscellaneous Configuration ========
! n% Q6 u. ]( g3 B0 D */
0 z$ V- t7 k8 y8 h( r/ M9 t9 T# ?5 @) m+ X, ?1 x0 {( j" `, Y9 o% K
/* set default diags mask */) E  q+ t8 q5 K, Z1 P! w8 Q" J
var Diags = xdc.useModule('xdc.runtime.Diags');& P  p) D2 }7 I: d7 F# m- F8 z
var Defaults = xdc.useModule('xdc.runtime.Defaults');+ k5 i2 F- F/ {) U5 _7 @

/ n5 A" }6 a( m3 H* ~  `% GDefaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;( x. F+ r% I, \. e1 D2 s  m
Defaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;
, s% H$ o. v/ M4 sDefaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;& L$ H& n: o+ h  I, R  E; a4 [
Defaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */
+ U* l% H3 A- }  aDefaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */
  z' m2 x; E/ Z1 r# `$ uDefaults.common$.diags_STATUS    = Diags.RUNTIME_ON;
. b9 b! U% S. U, {Defaults.common$.diags_USER1     = Diags.ALWAYS_OFF;: s' j# K3 ?; v, c+ j0 l
Defaults.common$.diags_USER2     = Diags.ALWAYS_OFF;
  r1 Z" L* S6 |& _9 ZDefaults.common$.diags_USER3     = Diags.ALWAYS_OFF;  n% d: C1 E! P, |1 D- U+ |
Defaults.common$.diags_USER4     = Diags.ALWAYS_OFF;* i( ]; M; P1 ^! ~5 \, I) b4 K
Defaults.common$.diags_USER5     = Diags.ALWAYS_OFF;8 ?6 J+ `7 Q) A
Defaults.common$.diags_USER6     = Diags.ALWAYS_OFF;6 ^( j  e2 v! V, D
Defaults.common$.diags_INFO      = Diags.ALWAYS_OFF;2 I  _' ^' n7 {- f
Defaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;
& _& j5 w1 e* b2 i$ L  N- D& H. H7 i
/* override diags mask for selected modules */
! p2 }2 s" W) x3 x0 Xxdc.useModule('xdc.runtime.Main');
7 b2 F1 l& G+ }Diags.setMaskMeta(
( O( m) _0 [0 J7 v    "xdc.runtime.Main",
( D. R: \+ m( j6 z+ ]* {; s  E    Diags.ENTRY | Diags.EXIT | Diags.INFO,
2 w) T6 V: z. w$ c" I7 y4 ~    Diags.RUNTIME_ON2 y5 i0 y) @8 \* Q6 j. Z# ~" |
);
) I. D/ u: k( s% T+ T
( v; {6 I- I1 s& f9 o$ dvar Registry = xdc.useModule('xdc.runtime.Registry');, f% X- \1 l2 r* g* x
Registry.common$.diags_ENTRY = Diags.RUNTIME_OFF;
% m4 l0 e* }7 g' GRegistry.common$.diags_EXIT  = Diags.RUNTIME_OFF;
" j  G" l6 N3 f5 ]9 \" e3 YRegistry.common$.diags_INFO  = Diags.RUNTIME_OFF;
$ J' j; v+ ]3 v, ZRegistry.common$.diags_USER1 = Diags.RUNTIME_OFF;
9 }9 l/ Z6 e# ^* C
* A+ A8 f. t! a0 B& v/ g* P/* create a logger instance */, h  I" t* y0 A: {: j
var LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');
& r' y; O$ i0 W7 n" d. ]% ~/ Hvar loggerBufP = new LoggerBuf.Params();, m8 ^2 s- L- a" f
loggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */9 M8 l2 W8 t- R1 i8 ]; G
loggerBufP.bufType = LoggerBuf.BufType_FIXED;& _( t3 u8 ?. }/ p& x

  _1 Z' S+ v% t) lvar appLogger = LoggerBuf.create(loggerBufP);
& Q" B2 \# w, S& w! T8 b- A# UappLogger.instance.name = "AppLog_Core1";
8 T. A$ C) w& l! K, o7 U  V7 @8 kDefaults.common$.logger = appLogger;/ K$ e8 C% n! Z) |7 Y9 C1 v# d
Memory.defaultHeapSize = 0x8192;    5 {) i0 T0 y% U% M
Idle.idleFxns[0] = "&LEDStatus";, N) m3 x! I& a, N* n
Cache.initSize.l2Size = Cache.L2Size_32K;, ^3 B' X+ {" F! ~2 ]9 ]
( ]* n+ y- [. u/ G, R# [
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-11-28 10:35 , Processed in 0.041006 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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