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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2015-9-4 08:33:31 | 只看该作者 回帖奖励 |正序浏览 |阅读模式
创龙工程师你好,我在OMAPL138单独调试DSP程序(使用SYSBIOS)时,在任务中使用calloc函数动态申请内存,用完后free,类似如下结构' n' G3 e/ B% V$ O1 ?+ \6 M# m
) o  c( D$ M+ |8 b* L* A6 F1 K5 K
    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //256
$ H: a, F0 `1 m  ?! p- l( K
/ B8 [5 C0 D+ H2 @0 I其他程序段。。。。。
/ [4 |: d/ i" s0 ^+ r! J
7 ^% L* t2 M+ j5 D4 U0 X   free(x_d);. ]8 \6 L) C2 B, `

3 Q) g! f; g6 u& o使用DSP侧单独调试功能,验证动态申请没有问题,. H5 A5 I* ]1 h* j

  G+ F7 Y6 f& t8 d但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。3 E' I0 U$ h+ X) z0 X+ U" L

- S6 F9 `( s3 d0 r
4 C2 `: g2 z5 y& b4 k8 Q" D6 g" l5 P) B; o
9 o5 R, k9 `7 A: K

4 B7 U8 b; `. S1 a0 T. B* O5 d4 A. R* d8 k, M) f1 t% Y
/ j7 c  B! e+ U0 m1 ~

, W. n' b/ n2 P* y" M- |+ d' Z0 }4 M, t! E- _5 S# L0 U. \
$ V% u/ B/ z/ F, 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 */* z" y6 W/ v* |+ t2 u
Program.heap = 0;
9 |, ?: ~9 L- p: B5 p8 g) H! Z; }Program.argSize = 100;  /* minimum size */  a0 T4 O( R2 h3 V
Program.stack = 0xF000;                   //我改到F000  也不行
回复 支持 反对

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

积分
1093
地板
发表于 2015-10-28 09:51:31 | 只看该作者
/* create a default heap */0 r, c& O& S. {; y  X) f- \3 P: `( V
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');- j! Z6 h1 A8 p8 M6 i* t& O
var heapMemParams = new HeapMem.Params();
. a1 H0 w( }3 H: `+ {- C/ J9 xheapMemParams.size = 0x4000;
* N/ R8 ]* @/ T  L& W6 X
( `8 s0 t5 {! D. Z- t% Qvar Memory = xdc.useModule('xdc.runtime.Memory');
  ?; |: l+ U$ ~; z2 v8 C- D4 mMemory.defaultHeapInstance = HeapMem.create(heapMemParams);
- s2 |, m3 z/ z; i7 J( F9 h7 f, r; K/ p/ C, O( h# k
我大约calloc  每次共计大小为5K*16bits,& _6 ^6 w/ y6 o4 M1 w- N
而默认配置才0x4000、需要改大。) U5 {3 B) U$ u, }( H4 F
! f0 X; x8 s6 D/ U- [5 {. C6 Q% |
回复 支持 反对

使用道具 举报

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 | 只看该作者
补充说明- u5 s9 ^' I; @# o7 e
我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下, r9 k6 `5 ^; w0 }
(不过疑惑的是,为何单独DSP仿真就没有问题呢?)  }! O: K# b- P. a9 v5 C% e

  ^' H# S5 z( Z. ]: r* V是不是需要在DSP.CFG中进行配置
( z1 X( C8 e" ?% D5 j& V4 p# `我现在的配置为2 q0 E" E" H$ E  N! Q

" s; s/ Z% u; b1 ~2 e, M6 I/*
  K+ g' i% I/ h- y *  ======== Operating System Configuration ========) \3 j8 F! V' |/ |# _  r( X
*/
% N& [3 F. @7 [) }! `0 J$ l. H, J$ M  u' f0 C/ t
/* no rts heap */
, @4 k  Y: Y4 t) ]7 _. y1 \) W5 OProgram.heap = 0;( u1 q& s' H5 P& W" a: l' ^
Program.argSize = 100;  /* minimum size */+ w% _1 R# B5 W" b+ a* V0 I1 c: U
Program.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大
2 R$ d+ Z0 V. @$ i, j, I( |0 K* ^: c, X- k9 W* u% K! r- g
/* create a default heap */
% Q5 h$ d+ l" {6 V  wvar HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
, ^" ^# \& C! p% I  e7 |* _$ ivar heapMemParams = new HeapMem.Params();
+ i# G3 W7 b4 B3 JheapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大/ q0 m: n( v" [( X1 `
6 d' ~2 Y7 ?2 h" g& v! @: m
var Memory = xdc.useModule('xdc.runtime.Memory');/ `: K9 ?5 X  X/ V
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);4 z) e6 {* G, v5 Y# p0 n

4 b0 A, @+ n8 p# w" w) i/* configure System module */1 M( z5 p9 v( N4 W- W- b" i
var SysMin = xdc.useModule('xdc.runtime.SysMin');" l" a: ?3 ?% o5 V( h# Y
SysMin.bufSize = 0x1000;7 ^$ |  @( L" K( J- a* T; S3 y
SysMin.flushAtExit = false;
5 K4 {/ F$ w! F  S- y& T* G; T' B3 e+ u
var System = xdc.useModule('xdc.runtime.System');9 O# O! \' l4 t
System.SupportProxy = SysMin;& m, H% G7 _: a6 G
% ]2 V8 P, E4 S. @
/* configure SysBios to use the lower half of Timer 1 */* y7 f: V9 ^3 e1 Z2 y5 g
var Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');, ]( x5 s( y8 i* z7 @6 q" o- h
var Clock = xdc.useModule('ti.sysbios.knl.Clock');
" x) n5 d* c/ ]: ^- `/ B# FTimer.timerSettings[1].master = true;
( F( w6 |7 ~. r- R6 \Timer.defaultHalf = Timer.Half_LOWER;
) U# @! g" Y8 w+ o% iClock.timerId = 1;
( h, P' U& {7 n- V
+ v, l' _, i6 V1 v5 a: d5 u* d3 b" N' z7 Z8 b
/*
$ D5 ?: u5 g0 O *  ======== Miscellaneous Configuration ========
8 ?4 ]$ J0 s6 ?$ d */, }) i% c3 s$ r0 A

# i2 Q9 s. x/ `2 C/* set default diags mask */
+ C! T, k' c6 Y, q: o: fvar Diags = xdc.useModule('xdc.runtime.Diags');
7 ~+ j" p" F, {) i5 w4 t4 `var Defaults = xdc.useModule('xdc.runtime.Defaults');( |8 D+ M! j$ \7 A# y, B3 `0 R! d' c
) Q8 y: g" I6 i
Defaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;
) S% @7 \1 q2 H, ~. Q% ~Defaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;) r# Z# m3 V1 I2 y6 x" I" T  w4 f
Defaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;5 @5 r5 v! U9 }# u% H
Defaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */
4 k  U. q: g% p' t- d5 I6 UDefaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */8 I, s9 @7 l# o% V
Defaults.common$.diags_STATUS    = Diags.RUNTIME_ON;
1 @0 k$ K( k. K5 C8 ^1 XDefaults.common$.diags_USER1     = Diags.ALWAYS_OFF;" {$ I( V1 `& z5 w/ @3 i2 I  h! s
Defaults.common$.diags_USER2     = Diags.ALWAYS_OFF;1 s( w2 q4 F' R5 `; r2 a% c+ i
Defaults.common$.diags_USER3     = Diags.ALWAYS_OFF;8 c2 I& H; ^" k; b+ L! p! ?
Defaults.common$.diags_USER4     = Diags.ALWAYS_OFF;
" K4 n2 z- H. N# V$ h; eDefaults.common$.diags_USER5     = Diags.ALWAYS_OFF;
2 m! A  C: ?+ ^2 c- {! gDefaults.common$.diags_USER6     = Diags.ALWAYS_OFF;3 d# Y$ n+ Q" }7 o# c1 `$ u  R
Defaults.common$.diags_INFO      = Diags.ALWAYS_OFF;& d+ z% _0 R- P! Z0 a( [4 d% q* U
Defaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;
2 q( D" b1 Y" a; I
& H. i3 n6 N- n/* override diags mask for selected modules */
* S( R* U; H( I; q' r1 rxdc.useModule('xdc.runtime.Main');
# B" V; V9 t  q# k' f6 LDiags.setMaskMeta(
0 t/ l$ J- D) c, @    "xdc.runtime.Main",
# K. U% c" g$ I    Diags.ENTRY | Diags.EXIT | Diags.INFO,
! l" }7 e$ ^' z    Diags.RUNTIME_ON
1 K5 l' X9 J4 h' {);
5 D& i  T2 J. S8 L) X$ l
4 {4 J/ k2 y) J  tvar Registry = xdc.useModule('xdc.runtime.Registry');
/ v7 x) E6 K# G9 y# L4 g* f* ^9 ZRegistry.common$.diags_ENTRY = Diags.RUNTIME_OFF;5 N: ^2 Y  i7 m* m& |( z
Registry.common$.diags_EXIT  = Diags.RUNTIME_OFF;1 P  ?8 D; C# _" P+ [
Registry.common$.diags_INFO  = Diags.RUNTIME_OFF;' u5 h' }! i3 Q+ l9 {" v) A+ J
Registry.common$.diags_USER1 = Diags.RUNTIME_OFF;
  J1 I; f6 g2 d2 B2 x, L
, x5 |7 i! V; P' v) i% U5 a/* create a logger instance */
9 I) s6 D0 P3 |% q6 k6 Avar LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');
  s$ l; D3 ^/ A; @  k# W+ wvar loggerBufP = new LoggerBuf.Params();/ ?& a; H! [% u3 \" _9 E. g
loggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */
. Y8 g( e! a! c2 F! c  hloggerBufP.bufType = LoggerBuf.BufType_FIXED;" w  J  ~: x( U: f1 o/ G. L

3 f" K; Q! `3 i$ P& M, ~var appLogger = LoggerBuf.create(loggerBufP);
- o: G7 z- ^$ Z6 u2 MappLogger.instance.name = "AppLog_Core1";
+ {" a- w3 f2 p# xDefaults.common$.logger = appLogger;3 c$ c6 O  E8 \) Q7 ?
Memory.defaultHeapSize = 0x8192;   
7 L1 f  A5 B- W$ hIdle.idleFxns[0] = "&LEDStatus";9 W6 ?9 w# j0 I( a$ U: m, Y
Cache.initSize.l2Size = Cache.L2Size_32K;
0 h) x. j4 C5 R* [* z& n2 q* k+ x$ e* R, e) [! Z
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-12-20 21:44 , Processed in 0.043547 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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