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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2015-9-4 08:33:31 | 只看该作者 回帖奖励 |正序浏览 |阅读模式
创龙工程师你好,我在OMAPL138单独调试DSP程序(使用SYSBIOS)时,在任务中使用calloc函数动态申请内存,用完后free,类似如下结构( L0 [. T1 W- t% \6 I2 {2 O  t& E
" C% |3 f8 F4 D/ y* q
    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //256( P0 ?% Q! D! t1 p& `

% q& R3 E8 t  h其他程序段。。。。。
* t0 b2 y6 ?! ]+ r! k6 X# h2 P & c2 Y+ T; J$ b  U& y( [- D
   free(x_d);
6 X* ~* k" g: b) x$ |, B4 l( R" x2 u& T7 B% k& F, s5 F
使用DSP侧单独调试功能,验证动态申请没有问题,( V0 k# W' _6 ]1 q7 i$ \7 F

0 A1 T0 {2 o* e* B0 S但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。
# p+ ~: c8 m0 L$ b* A' |6 I$ L, X
- k' P+ H2 ~9 |+ t# F" U% a* E: H
& L- Y" W- z" g+ D. h" e

& M+ a% C8 g# R0 c  z& e( f- S1 {
& a7 Z8 Q) w; j( i
/ l3 i4 F2 d/ z! K/ c. Y' v2 \! L2 k4 z( V  P9 I

( l$ Z) b/ U& j  x
/ q- Y$ I: [' C3 z
5 M# @* J8 o2 H/ g* ]7 y# \$ Z
) u) J  N, `: w
分享到:  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 */
2 t9 f5 K6 I9 W. Z. WProgram.heap = 0;  n$ b1 {# y4 G: m4 R
Program.argSize = 100;  /* minimum size */2 }  Q+ B7 J" _6 u- a
Program.stack = 0xF000;                   //我改到F000  也不行
回复 支持 反对

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

积分
1093
地板
发表于 2015-10-28 09:51:31 | 只看该作者
/* create a default heap */# K" h7 \& a: r: g& Y1 Q
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');1 r$ F; C; ]; D3 f
var heapMemParams = new HeapMem.Params();
/ y6 o9 v: \) V. jheapMemParams.size = 0x4000;
- ^: K  q( [" |+ d6 A$ P1 ~2 @: W; q( A4 u% m& e7 y6 F
var Memory = xdc.useModule('xdc.runtime.Memory');0 ~- R9 ^2 z7 G  L
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);9 D9 G' b5 c( A$ j& j$ x3 U
$ k6 v0 F. L$ q
我大约calloc  每次共计大小为5K*16bits,- a! D; U) A. ]" u; _1 q
而默认配置才0x4000、需要改大。  z/ n! G3 S: M1 r& y1 d: s
* L- R6 l2 v) m- o$ x
回复 支持 反对

使用道具 举报

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 | 只看该作者
补充说明
6 a* P7 d8 U3 _. }; n; {. G- k我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下& q1 p2 L" K6 H+ b! B; |
(不过疑惑的是,为何单独DSP仿真就没有问题呢?)8 s3 k/ _: ^( X6 ~$ g  {
  ]1 C& I$ O! q
是不是需要在DSP.CFG中进行配置
. {* v6 l' L7 K2 j6 m我现在的配置为) R5 M" U' ?6 a4 y
, s, R$ S, x/ l" S
/*
' Q3 h/ ~- ^  S- n/ k: Y: d+ Z& ~ *  ======== Operating System Configuration ========
# `$ a# j( {; t  { */. E! Z4 F: g. J4 @2 W7 h. q6 g( n4 F

$ u/ b4 |7 B6 S$ f/* no rts heap */
6 H9 z' {' h& @* H  E, aProgram.heap = 0;1 Z1 n7 W, m% n: V; D- T
Program.argSize = 100;  /* minimum size */
" D7 n! W3 [' O/ @( ?. N& I: I  W: yProgram.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大
( L- J& a7 |* S8 B2 p" ]2 l2 o2 I6 @( e; g, M* G" D
/* create a default heap */
: L: u9 j1 N& i6 J  Pvar HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');/ U7 H, p; {% w  g2 E) n& R" v
var heapMemParams = new HeapMem.Params();
! C1 b" c* `" q0 ^, V/ ]5 uheapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大% d0 W$ q  t! X; w9 ~, R

: a! |) f; U6 Y$ v
var Memory = xdc.useModule('xdc.runtime.Memory');
! g$ M; Q- p. }: i( wMemory.defaultHeapInstance = HeapMem.create(heapMemParams);  K( ?5 V8 n% p! Q! w

- a7 ?) q+ x+ D# x4 _4 m/* configure System module */. Z/ k" C, b! D5 N
var SysMin = xdc.useModule('xdc.runtime.SysMin');
# U0 c; M  D8 i; s  CSysMin.bufSize = 0x1000;
4 i! G; v0 F+ |SysMin.flushAtExit = false;& b* K0 v6 G6 m7 O
% I$ A( @  p4 k
var System = xdc.useModule('xdc.runtime.System');" T* b) x: ]2 w/ A& m+ b# z
System.SupportProxy = SysMin;( O/ s9 `& @' C$ o' M" N5 b5 E

3 e+ y! p- N/ g8 |7 V# F/* configure SysBios to use the lower half of Timer 1 */
$ h" i- h. q7 [1 O7 J& A  r/ X4 b4 gvar Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');# s. K3 T% J0 n; ?5 X/ V
var Clock = xdc.useModule('ti.sysbios.knl.Clock');
1 @+ j( j" I* ^0 g. BTimer.timerSettings[1].master = true;
/ B" d- N8 N/ p; Q5 a2 s1 D$ {+ RTimer.defaultHalf = Timer.Half_LOWER;
( l' e' S# l5 bClock.timerId = 1;8 E/ Z, z! v& N  U% G

2 l3 q( T1 x: G
9 s2 J8 G. c) j  e2 f$ p( a) L/*# N  n! K* N  b* P) w9 G
*  ======== Miscellaneous Configuration ========1 e4 [9 W/ D! w. I
*/
$ b) v6 ~  M6 J' i) R+ \) D
% [( H& M) H# ]3 Q) K$ H0 Q8 @/* set default diags mask */# b# Y! ^4 G" O* M
var Diags = xdc.useModule('xdc.runtime.Diags');* |. h. _( G0 a, w9 a0 c
var Defaults = xdc.useModule('xdc.runtime.Defaults');- O& g) {8 r, x( T, O

6 A7 `7 [/ b, E  yDefaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;4 Q- `6 d$ X( m
Defaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;3 M  Z2 _3 P5 C! ^
Defaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;- B" o" H# J$ @! g
Defaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */3 v2 e* D, ?0 e3 u3 e
Defaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */
: v: S& Y, I  w7 @; F; O& tDefaults.common$.diags_STATUS    = Diags.RUNTIME_ON;
1 K3 [3 Y( P  G/ Q) tDefaults.common$.diags_USER1     = Diags.ALWAYS_OFF;
# n5 v  d' V6 m: ?1 eDefaults.common$.diags_USER2     = Diags.ALWAYS_OFF;
! p$ S5 a( U7 ?) M1 x' rDefaults.common$.diags_USER3     = Diags.ALWAYS_OFF;4 b% H; S# G. G; y- m& c0 L9 W
Defaults.common$.diags_USER4     = Diags.ALWAYS_OFF;
( _' P* m6 ~; i1 vDefaults.common$.diags_USER5     = Diags.ALWAYS_OFF;
# M% E( H* a5 _9 c! C$ L' ?Defaults.common$.diags_USER6     = Diags.ALWAYS_OFF;- H' O7 O5 O9 M
Defaults.common$.diags_INFO      = Diags.ALWAYS_OFF;, A# {- p: S! n* j$ w# l! ]% }) u
Defaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;0 U; Z, c% h) u; F

& d9 {, d2 }0 [, ?, b2 `# `5 x* ?, c* a/* override diags mask for selected modules */
  P2 t9 |% B; D7 B9 f, U9 k+ x5 ~xdc.useModule('xdc.runtime.Main');, j1 k2 r+ x, r6 `* Q0 \: Y
Diags.setMaskMeta(
2 A+ y. k; x! {, i) f* K    "xdc.runtime.Main"," d5 _2 i6 U; ^* D* g
    Diags.ENTRY | Diags.EXIT | Diags.INFO,& x* R, ?9 P) _6 }/ g
    Diags.RUNTIME_ON
8 c, M7 g# F8 N+ A5 Z/ L; e);
* J- Z$ a$ O1 N9 E0 s, M4 t
! X. ]" u! \1 n0 x4 g# Lvar Registry = xdc.useModule('xdc.runtime.Registry');
' Y  l  u6 \5 E# Q: \Registry.common$.diags_ENTRY = Diags.RUNTIME_OFF;0 k  ?9 v$ i3 I# x
Registry.common$.diags_EXIT  = Diags.RUNTIME_OFF;9 X+ M. Q- Q: e& s
Registry.common$.diags_INFO  = Diags.RUNTIME_OFF;% x1 A* ]3 q4 b, [. K: \
Registry.common$.diags_USER1 = Diags.RUNTIME_OFF;, k! I; w6 i9 q; `+ X/ J3 X

2 e; k' `0 H: {' n  i6 R1 t, n* d* S/* create a logger instance */
, e# A2 A! d( h/ M1 V2 A! \/ vvar LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');
" c2 k4 V. z/ D* z  i2 `var loggerBufP = new LoggerBuf.Params();; W. `) K( ?! r$ t0 h7 j! k8 E
loggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */
  {0 [# U. i: c' f$ tloggerBufP.bufType = LoggerBuf.BufType_FIXED;, x) o* L% n" _3 A/ K8 y

5 N/ |# N9 g9 o5 F6 X; z* ]var appLogger = LoggerBuf.create(loggerBufP);
9 j# R- ^  Z- X  [9 jappLogger.instance.name = "AppLog_Core1";( W9 ^+ t+ E4 M7 b" d* s; d/ o
Defaults.common$.logger = appLogger;
6 S5 T0 q2 f( \& a  HMemory.defaultHeapSize = 0x8192;    - c0 l% V/ j4 N& |1 P# F" m
Idle.idleFxns[0] = "&LEDStatus";
( y8 R6 J. |) S! z( LCache.initSize.l2Size = Cache.L2Size_32K;
% p" O1 j# ^7 Q! j. s; P6 j
, a1 x$ @7 X* T7 D6 r2 i+ i
回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2026-2-20 07:33 , Processed in 0.042194 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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