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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2015-9-4 08:33:31 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
创龙工程师你好,我在OMAPL138单独调试DSP程序(使用SYSBIOS)时,在任务中使用calloc函数动态申请内存,用完后free,类似如下结构
+ V6 R2 Z8 j" R& q* D. ]  F" }# T( g3 a& S! C# U7 e. D
    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //256
) C, C/ g' X% C) {" D! D- J# ^
$ b  O$ j7 j, `1 `其他程序段。。。。。% t) p# ]+ Q! V( P4 C
9 r$ p2 s; u1 \2 h# S. L5 j8 o6 z
   free(x_d);
. G! O! b& J: k1 _+ W8 B. W
" Q9 l# u- _: |, g6 i: [使用DSP侧单独调试功能,验证动态申请没有问题,6 {  p$ [/ o6 g( E

  Q7 v* C1 k6 h+ O! r但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。
, O$ W. }. [0 K2 i% q/ S! W
) I: j9 S" \, M" ~' j- L

8 ~# W) i. d/ R) t. Z8 G8 h% W* |2 j1 K& z. c

2 W4 M; o- j! y$ x0 r) ~3 |
7 T) O8 y! Q( d: _2 z- N( L" y/ [7 l% S3 N

# y3 Q3 d% X8 j0 j- W  L) y* y, x& e: D& e' G7 m9 q

  l( W& m; [% C: M+ j$ f2 z4 q$ j. m; I/ ?
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2015-9-4 10:29:21 | 只看该作者
补充说明  y9 Z/ P1 ?7 q- ~- q
我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下* h$ I0 F* @8 R# J
(不过疑惑的是,为何单独DSP仿真就没有问题呢?)
* c: }- }8 [  R* U' \

. n8 l, r4 w- w. j是不是需要在DSP.CFG中进行配置
5 I1 j4 O, i& s6 g. c" ~8 [我现在的配置为
4 M7 [7 H; z' {" i- A3 N& k& k( @
/*' i2 {! g; E1 J: R: |4 x
*  ======== Operating System Configuration ========
1 H9 ^2 {+ a; \4 n, Y3 u */6 \0 x  [8 u5 f$ @( g' \: Q

& g. L$ ]4 U5 A. f9 i4 g, w/* no rts heap */4 q' N2 k0 R( D9 `4 ]. V
Program.heap = 0;
2 A1 e5 G& m; F* H7 [% o0 rProgram.argSize = 100;  /* minimum size */
2 L5 I' l8 H' O: B- K8 y1 AProgram.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大$ r1 `: n$ [% y" k0 c  c, E; @; \
$ A& |+ l: V7 g
/* create a default heap */# [& E; n* x5 R. T+ r
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
1 A7 }" g! J0 H2 E% f9 o/ B, [var heapMemParams = new HeapMem.Params();, C4 r  L. ?6 R3 H& u5 m
heapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大
5 [6 X5 ?" K$ A6 f0 S+ W8 G# Y+ X% Y* @3 l
var Memory = xdc.useModule('xdc.runtime.Memory');
/ M! d1 ^/ t$ ^% P) \; J  \. A8 ^Memory.defaultHeapInstance = HeapMem.create(heapMemParams);
/ ]4 o0 d0 J' H# D
3 l& d- t( c# J+ |9 ~/* configure System module */
+ k) `! y/ @: Rvar SysMin = xdc.useModule('xdc.runtime.SysMin');, \; D, [; K& u. Y9 h. V  E) a1 {
SysMin.bufSize = 0x1000;0 l* f. g6 L+ N4 a- [
SysMin.flushAtExit = false;- Y; K( X) C5 d0 P
( f: Y) A, T" I1 j( d
var System = xdc.useModule('xdc.runtime.System');  j( d0 s7 i- M* v5 G
System.SupportProxy = SysMin;- r8 I- L7 K2 H( a

1 \" j1 h; }8 A/ W7 j) l' [4 Q/* configure SysBios to use the lower half of Timer 1 */
% K# J% Z; r6 e, J( M# V5 w6 G3 Nvar Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');
+ R( |0 J( s+ ~' |; tvar Clock = xdc.useModule('ti.sysbios.knl.Clock');" @# ^0 r9 M$ ?: Y+ C3 |
Timer.timerSettings[1].master = true;& ^: Z1 J# J* |' u; R
Timer.defaultHalf = Timer.Half_LOWER;! _8 [9 D" n( W
Clock.timerId = 1;: b5 x4 r# s  a# ]( z8 x: b
& E2 n% @' j+ r8 N

) a2 T# [4 r' y8 ]$ b7 `" g8 P/*5 N7 S$ J4 m' x) z* e; R2 u+ L
*  ======== Miscellaneous Configuration ========( ]  d* d. m; @$ D  ]
*/
! A! N$ ^. f6 m; I% ~
$ m, e" O" X; t  H- V: j0 x/* set default diags mask */3 R- Q4 M+ v: D, x) }
var Diags = xdc.useModule('xdc.runtime.Diags');
- |) z4 u/ l# }) Kvar Defaults = xdc.useModule('xdc.runtime.Defaults');
2 T8 t0 r8 h7 B1 j  I/ V
2 i9 D0 ~$ r1 BDefaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;4 w$ W, D( h6 Q" }! c% ?/ y
Defaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;  F0 h+ u9 W! E, ?+ C. X  ~
Defaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;# T# ~( z5 o/ @4 O8 {. @$ y
Defaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */
7 q, w- _1 _; h* ZDefaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */6 o7 ]* v5 X. R) u& E- j* U, @
Defaults.common$.diags_STATUS    = Diags.RUNTIME_ON;
+ ]3 O) ]7 [, i3 g1 ?# CDefaults.common$.diags_USER1     = Diags.ALWAYS_OFF;
# p& |5 c! c2 o# a5 xDefaults.common$.diags_USER2     = Diags.ALWAYS_OFF;
6 a0 w* V7 f% O' F6 k0 ]. j& e) v, E  fDefaults.common$.diags_USER3     = Diags.ALWAYS_OFF;+ h6 Y: r4 J# g4 E9 s
Defaults.common$.diags_USER4     = Diags.ALWAYS_OFF;
, b  a& h& l0 PDefaults.common$.diags_USER5     = Diags.ALWAYS_OFF;
( ?, Q9 y7 t$ T- i) j# W# \/ lDefaults.common$.diags_USER6     = Diags.ALWAYS_OFF;" ~) l8 n" e0 K( }
Defaults.common$.diags_INFO      = Diags.ALWAYS_OFF;  R3 s3 h! R" z% X: w& `( _
Defaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;
6 c$ g# A% K0 d. \; X; d, b
8 o& O! j! B7 Y, `( ?0 i/* override diags mask for selected modules *// r3 t3 M  w% w7 p( u$ s
xdc.useModule('xdc.runtime.Main');% r" }! X+ D1 u& ?
Diags.setMaskMeta(0 K6 [' c* H! F: u
    "xdc.runtime.Main",. k/ g: x. Z: c5 J
    Diags.ENTRY | Diags.EXIT | Diags.INFO,* X5 B8 k0 V" {3 |5 R9 ~# w6 P3 G# l
    Diags.RUNTIME_ON  S7 h% V+ n9 r9 }  A0 `- d
);& l/ T* i+ Q# E/ j# g4 s

2 c& G# F' u% w* z* gvar Registry = xdc.useModule('xdc.runtime.Registry');% p3 M0 x4 E4 H! Z2 x+ D
Registry.common$.diags_ENTRY = Diags.RUNTIME_OFF;
* L1 g! H: n4 e2 d  t- U8 ]5 tRegistry.common$.diags_EXIT  = Diags.RUNTIME_OFF;
$ M5 `3 f2 F6 l! S) i3 xRegistry.common$.diags_INFO  = Diags.RUNTIME_OFF;& X) N3 F- e# b
Registry.common$.diags_USER1 = Diags.RUNTIME_OFF;7 y% V* h  Q: p
# k- `( g6 m8 s0 c& r& k) ]
/* create a logger instance */( Y6 h1 X$ y# m) d# q
var LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');5 P  x% S( |5 Y! ]2 s1 B4 ^
var loggerBufP = new LoggerBuf.Params();
) P7 ~% u) I1 K! y/ o  DloggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */
7 [, x! Q1 f% B/ W2 c+ o5 {5 [loggerBufP.bufType = LoggerBuf.BufType_FIXED;! z0 Y5 l" |7 _2 C5 I0 p7 T: O
0 c- ~5 x! S9 }; q. V
var appLogger = LoggerBuf.create(loggerBufP);+ D  w) u% z+ U1 f* m2 j( d
appLogger.instance.name = "AppLog_Core1";5 n) c+ j6 e) K
Defaults.common$.logger = appLogger;3 G! a% x0 g# |  V
Memory.defaultHeapSize = 0x8192;   
0 Q9 D% ~/ D! N- r+ XIdle.idleFxns[0] = "&LEDStatus";( \2 V8 ?9 }8 f6 m! q* s, H
Cache.initSize.l2Size = Cache.L2Size_32K;+ L9 V' _  T/ s0 A0 ?
' f, g  `0 A1 q. S+ B
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

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

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

积分
1093
地板
发表于 2015-10-28 09:51:31 | 只看该作者
/* create a default heap */  n7 N4 ~0 K6 S
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
% U/ k, c. M+ C0 Kvar heapMemParams = new HeapMem.Params();
+ G7 `- t% A2 p) V7 F/ k' c6 u0 a7 E9 |heapMemParams.size = 0x4000;3 W4 o$ V  {% s
. C: t9 n9 X- }
var Memory = xdc.useModule('xdc.runtime.Memory');9 V6 N- @/ X9 e/ v) e
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);
5 u# B: E" g( ]5 W( [. i6 J
9 ]; Y1 r9 t" z, s  A7 s我大约calloc  每次共计大小为5K*16bits,
2 C( N% d1 b) a# o而默认配置才0x4000、需要改大。
* h# I6 i1 g1 Q! {: ^' X) l2 p- q" m, T: o0 Z' {
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
5#
 楼主| 发表于 2015-10-28 16:14:47 | 只看该作者
/* no rts heap */$ f/ d  K  D1 j% x$ {
Program.heap = 0;! q. i$ g3 {6 u+ g, v5 M
Program.argSize = 100;  /* minimum size */
* Z0 o" D- \3 I6 a' _$ Z  b, L/ TProgram.stack = 0xF000;                   //我改到F000  也不行
回复 支持 反对

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-5-20 21:10 , Processed in 0.045324 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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