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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2015-9-4 08:33:31 | 只看该作者 回帖奖励 |正序浏览 |阅读模式
创龙工程师你好,我在OMAPL138单独调试DSP程序(使用SYSBIOS)时,在任务中使用calloc函数动态申请内存,用完后free,类似如下结构
; r+ k2 I( P$ z3 o: X. Z! ?: u& }* s% R" R  G
    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //256. t$ u  }/ Y: t4 m
. I9 _* U; q6 r5 A6 K
其他程序段。。。。。
1 c- G2 ]6 t0 g2 e" W ( H! X; x3 L+ D) m
   free(x_d);+ [& Q2 ?) j+ U. n

  N$ S; n2 ^9 b$ I8 b6 Q4 M# d8 M使用DSP侧单独调试功能,验证动态申请没有问题,
; U6 |6 V( ~7 ?1 L
2 E' Y5 s# e) `但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。
0 |7 Z2 P  ^' i7 [' M$ D  Q; Z

& t# ?6 B# M, m% ]2 Y8 j, C% B1 E+ L: w
2 `5 c2 I8 y; S
+ K6 ]3 |- \. Q# E- s1 g
( M+ S% ~( w% e. u/ m2 c% {7 q6 l+ a

' ?, u" s8 ]. D* s# S  t) v( |. \8 J; z
  N' c: P2 f$ D  ]1 H1 Q) ^

4 O1 o4 R: Z4 l+ P* E4 a& x
7 G/ T1 I" |6 x# ]( u$ O
分享到:  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 */4 a6 F. m3 a% y# l4 a6 w7 ?
Program.heap = 0;
, ?. Y5 y6 e/ }Program.argSize = 100;  /* minimum size */+ i8 V& X$ R) Z' m' L/ r% u
Program.stack = 0xF000;                   //我改到F000  也不行
回复 支持 反对

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

积分
1093
地板
发表于 2015-10-28 09:51:31 | 只看该作者
/* create a default heap */
- d3 d6 j; R. [7 R- p& evar HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');4 Q9 O0 H0 z/ o' W1 h
var heapMemParams = new HeapMem.Params();
- M# X$ m) r% uheapMemParams.size = 0x4000;
$ {# X0 @+ J0 `" k( n5 y
" q9 }' z& p% y1 t2 h1 dvar Memory = xdc.useModule('xdc.runtime.Memory');
! K; C' W4 ]% L1 b( j, q* [Memory.defaultHeapInstance = HeapMem.create(heapMemParams);
  h8 u) u  x- l. S) h
- P% D4 w9 L4 T6 h2 x6 r  v我大约calloc  每次共计大小为5K*16bits,3 ~" V) N7 {+ a& ]# i  r9 o
而默认配置才0x4000、需要改大。: A$ r- s: c' L

& y# f$ r+ a) g& z
回复 支持 反对

使用道具 举报

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 | 只看该作者
补充说明
% i$ H: ]2 @- M6 }我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下
+ D* y0 j4 B0 _" ?(不过疑惑的是,为何单独DSP仿真就没有问题呢?), s9 n' g5 Y" Y% ^# D- Q) U: K

4 O- ]# q( I1 Z) D( D6 w9 `( I是不是需要在DSP.CFG中进行配置) l  z4 U$ b/ Y0 I* x+ n
我现在的配置为, v7 R! W4 a+ z# u3 ?. _" s
" [. t: T+ k1 V$ v8 N
/*
& i  X) A" |4 R0 k/ _4 [  y- b' i *  ======== Operating System Configuration ========
. u: g/ J2 j1 R) C0 _9 d, @0 D1 v2 D; d* a */$ Z, R+ E* T# w5 M- J/ \

* A3 F: T# w" V) H; L/* no rts heap */
8 l# W" t- g% Z# @: i5 |) u$ HProgram.heap = 0;  q: l& `2 ?* f( D
Program.argSize = 100;  /* minimum size */
- ^* S6 [7 i6 sProgram.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大, P9 B7 A$ B) Y# @  w/ F
! E0 Y4 y; S% j; N
/* create a default heap */
0 F3 _, q! A5 P; d  r  W3 {5 Lvar HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
/ Y: [/ M, m" I7 Q2 ^4 |var heapMemParams = new HeapMem.Params();
* M# w' t! x: L5 C7 s3 |7 T6 FheapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大
7 s0 ?8 E7 K% b$ M3 v3 F0 X
7 K3 i$ R2 I' m) ^4 D
var Memory = xdc.useModule('xdc.runtime.Memory');7 n) p# a4 |( e2 a
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);$ N5 @. F  H; r3 x0 e4 V

8 S5 P: H: w* l( R' R  j$ b; e' {/* configure System module */
1 ]* D! _; g/ a1 |8 I& {var SysMin = xdc.useModule('xdc.runtime.SysMin');: L) ]- \6 u; Z0 \' x
SysMin.bufSize = 0x1000;3 R5 D: f' ~, P+ E
SysMin.flushAtExit = false;
/ f! |- T' d( e% R8 V& E& p; k0 U$ m  W  e& V9 A, [* r+ s3 M
var System = xdc.useModule('xdc.runtime.System');$ A. p; S2 z  X# W$ X2 g/ Y
System.SupportProxy = SysMin;0 I2 G6 W  Y/ O" J$ V
$ K) d& w. ?& j  @) d0 q0 @8 y
/* configure SysBios to use the lower half of Timer 1 */* ?* l: w9 n* R3 Y: X
var Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');
3 Z- W0 L! R6 c, k6 T( P  dvar Clock = xdc.useModule('ti.sysbios.knl.Clock');
3 h- A! [" v0 T1 ~$ uTimer.timerSettings[1].master = true;
/ U& z5 D3 h% F8 i0 p. N; nTimer.defaultHalf = Timer.Half_LOWER;
- ^( q) p7 X/ n8 w$ {5 t# h4 PClock.timerId = 1;
; M+ R3 u  o( G* ^( }9 m1 V. ~% G) R( J
: U% A% b- o) y) v  N, _* `; f
/*  B- `2 w8 I% Y6 c5 v
*  ======== Miscellaneous Configuration ========3 R+ c, [; n8 u5 L" A  ]1 }
*/1 C. x& l0 [8 t4 p1 H
9 M4 A2 Z: l  z9 t& P+ B9 d
/* set default diags mask */
  k. [% j' R4 z8 f5 p9 lvar Diags = xdc.useModule('xdc.runtime.Diags');& m* j3 q4 b" S+ Q! j) @
var Defaults = xdc.useModule('xdc.runtime.Defaults');
+ G! v) C0 O' R. v" L3 T, d5 e* e8 N8 m2 H5 d
Defaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;
0 G" T/ ]* l, w% p, `8 Q3 mDefaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;
$ D& x2 o( F% |6 O$ G* `/ B: MDefaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;
2 O- a* g, f% T. H+ I% O% S% nDefaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */1 i2 D! F4 {7 T7 ]- i+ w
Defaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */3 Q4 w/ E( B. F  [& E
Defaults.common$.diags_STATUS    = Diags.RUNTIME_ON;
, Q8 i9 L7 ^2 Z2 wDefaults.common$.diags_USER1     = Diags.ALWAYS_OFF;
/ f7 m+ U. X) o8 B- L, `Defaults.common$.diags_USER2     = Diags.ALWAYS_OFF;7 y8 [5 t) R6 T$ F. E* H
Defaults.common$.diags_USER3     = Diags.ALWAYS_OFF;
& v% a8 \. v/ i; r  B6 {6 LDefaults.common$.diags_USER4     = Diags.ALWAYS_OFF;
3 y/ F+ n. t/ ~/ j, K4 kDefaults.common$.diags_USER5     = Diags.ALWAYS_OFF;
7 s" k5 }9 b0 g4 x/ v0 K6 S% [Defaults.common$.diags_USER6     = Diags.ALWAYS_OFF;
# ^; w! v# {7 {8 }6 rDefaults.common$.diags_INFO      = Diags.ALWAYS_OFF;
6 `! ~1 k( i$ hDefaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;( g; m) E" y0 @3 v

& X" I3 M9 H; f6 G% z, x7 J/* override diags mask for selected modules */
% ~# F1 K" h9 P# q; pxdc.useModule('xdc.runtime.Main');
6 _) U& f! y( g( m( m. j1 BDiags.setMaskMeta(8 J! c4 ?! `7 L, x7 z2 Z/ T
    "xdc.runtime.Main",
- `( K7 F1 A6 U    Diags.ENTRY | Diags.EXIT | Diags.INFO,
1 K9 r2 q; d: S- S! n* k    Diags.RUNTIME_ON
- t. s  R. W! k% y/ `);
/ }" ]8 k- M- O1 s) j0 P9 ~" N. I7 n2 F1 [. P6 I% Y
var Registry = xdc.useModule('xdc.runtime.Registry');' u+ K% C# {, p
Registry.common$.diags_ENTRY = Diags.RUNTIME_OFF;
- [6 V6 g# P. k, o7 O# ~Registry.common$.diags_EXIT  = Diags.RUNTIME_OFF;9 g! z" U8 e: Y( r5 e0 W
Registry.common$.diags_INFO  = Diags.RUNTIME_OFF;# d) q( G) W. D" t; D
Registry.common$.diags_USER1 = Diags.RUNTIME_OFF;
4 N, h+ X6 T% ?7 E  q, @- C1 ^+ U9 r. C3 Z( e* m* i
/* create a logger instance */
7 h9 F+ t; V' F& e! Z& zvar LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');
* p: }4 }" d8 r( w3 C. y# O/ }var loggerBufP = new LoggerBuf.Params();
9 e' ?! I- _+ ^/ v# Y, TloggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */) }4 r. F& _* @! s2 @& @
loggerBufP.bufType = LoggerBuf.BufType_FIXED;
# O* k% A2 z" x. Y$ N, k# U3 y5 j, }) \/ e$ m( N
var appLogger = LoggerBuf.create(loggerBufP);) w. Q9 i! @( h0 C
appLogger.instance.name = "AppLog_Core1";# ~* C: S$ W# A3 C6 e
Defaults.common$.logger = appLogger;
2 c& [; V4 i# S, c& X: c  M& W  vMemory.defaultHeapSize = 0x8192;   
; f: [6 j9 p0 Q- e) @. _: G- B/ u" Q0 XIdle.idleFxns[0] = "&LEDStatus";. |) b3 {0 {5 ?  z2 k: r4 l. S% L
Cache.initSize.l2Size = Cache.L2Size_32K;& {* o; L$ B3 R% E# j
6 B! a- G5 c" B
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-12-14 12:13 , Processed in 0.042011 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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