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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2015-9-4 08:33:31 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
创龙工程师你好,我在OMAPL138单独调试DSP程序(使用SYSBIOS)时,在任务中使用calloc函数动态申请内存,用完后free,类似如下结构
/ u: b3 p7 u7 q; e; O( d
& U+ f0 |- r$ V# T    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //2568 n0 f" N% Z$ e1 x3 @
+ [; ~5 V  _/ v" `  L+ ?% P
其他程序段。。。。。& a( B* Q  t4 @5 a
0 D; H- T- x( p
   free(x_d);  N# n3 Q. G4 p0 L
- k, Y# R4 f) a
使用DSP侧单独调试功能,验证动态申请没有问题,# {  w6 X4 P" l
- J' T, H( |9 o7 k" m3 c8 }! Q4 ^
但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。
+ ~: D6 S( a4 u3 N% i

' O  a0 A0 N7 @& i, O" ]7 O. Q: C
5 r! u4 `8 `% w+ j$ H0 `
' V$ w; a( ~" {6 ]8 V

+ w: x( b, \2 [5 m; Z
! ~+ W* N8 k7 n( h2 d( c% A6 z5 s; C' u, S4 ?, R
6 x7 E9 \0 p' W$ \+ y7 m

- i' Q: ~5 i4 T, f: R5 b2 |! u0 l/ Q9 k8 H  w8 g$ T& y
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2015-9-4 10:29:21 | 只看该作者
补充说明- i6 e" n1 T' O: o& f
我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下
* R6 m: Y& \5 e. x(不过疑惑的是,为何单独DSP仿真就没有问题呢?)
) Y: q5 G9 m8 I' R& j
- M. G! F( R" ~" ^4 J' a
是不是需要在DSP.CFG中进行配置
+ }; U* g+ O: c我现在的配置为
  r1 b1 J) D6 w$ B& N7 v
- M+ h5 b1 L' m* L3 C8 c+ q" s/*
- |# `& ^! t7 f( W *  ======== Operating System Configuration ========. ^; j- @# W. I; p" }" W5 C
*/  [  C6 H' i  G6 M  \
; ^; W7 p2 H+ g+ N% a. ^
/* no rts heap */9 K) h5 H5 F& G0 }
Program.heap = 0;
- b- _0 [9 P9 ?7 PProgram.argSize = 100;  /* minimum size */1 d( k, J7 Y# l0 t  c! u
Program.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大9 Q2 @( I* @! [: ]1 ?# g

% |+ z; x% J7 P' \# ]! @; m/* create a default heap */" V' a0 U# S( ]5 P/ e- S
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
* s' R! ~4 O6 y7 |9 B$ M" Dvar heapMemParams = new HeapMem.Params();
8 o4 X. B0 L8 FheapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大
7 p1 ^5 w5 Z1 }1 o" W0 z5 W/ N8 A$ e# M7 W
var Memory = xdc.useModule('xdc.runtime.Memory');
: n) f9 j5 A! d9 h/ zMemory.defaultHeapInstance = HeapMem.create(heapMemParams);) Z) r( S% A) X$ K. E

% H% n9 _% G$ d( P- T6 S* P. T0 k+ S: m/* configure System module */! P- o0 c; P+ I+ b6 [/ r8 Y
var SysMin = xdc.useModule('xdc.runtime.SysMin');3 A* `9 w7 G4 o# r* V( K& o
SysMin.bufSize = 0x1000;
3 q+ B8 F- T# SSysMin.flushAtExit = false;6 Y$ b7 t) F9 p# T) e8 n* T' e. o
; k9 a# v$ M' m, |( U
var System = xdc.useModule('xdc.runtime.System');
# c! o1 D& I/ H' cSystem.SupportProxy = SysMin;, G  e/ V; c* W. q

/ r: r+ \$ _& ~. D- j/* configure SysBios to use the lower half of Timer 1 */
; \8 r. O6 c$ T6 B! Z1 W, i* Ivar Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');
2 X9 f1 n* [" _8 `& F1 A& r3 y  N9 nvar Clock = xdc.useModule('ti.sysbios.knl.Clock');0 V( P% z& Z# |2 v4 q3 V; J
Timer.timerSettings[1].master = true;
  H3 ]2 [  O( p3 X9 T' i7 i3 j$ dTimer.defaultHalf = Timer.Half_LOWER;4 D/ b  u! i% m0 M2 B: y
Clock.timerId = 1;7 W% l1 }* M0 E  r
( [7 l' R8 o1 _' F, c/ p

0 Q( e$ |2 I$ s/*
' d9 ]2 S5 [- y. I *  ======== Miscellaneous Configuration ========, ], r4 T' U2 C
*/
" E! W/ M' t4 p* i4 e
) I2 a- |5 l1 P3 @1 A3 ?: ^: G/* set default diags mask */% b: W  u0 y4 }- C+ V
var Diags = xdc.useModule('xdc.runtime.Diags');/ @- a: b- ]! O) E4 C0 q& |3 E
var Defaults = xdc.useModule('xdc.runtime.Defaults');9 Z( C* q$ _; }6 g" B

+ @4 L' d( e9 q* }2 S5 r- u( uDefaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;
; _+ @& r6 V& K5 U& M+ JDefaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;
" |' J9 [' f4 S6 IDefaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;+ i$ M) }  h; V, \0 s" ]6 e
Defaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */
/ u4 |9 I9 z' {. {! c3 W7 _Defaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */! s0 I, c, A. G' p/ s% G
Defaults.common$.diags_STATUS    = Diags.RUNTIME_ON;
, l! _7 m8 P  {7 _+ |( dDefaults.common$.diags_USER1     = Diags.ALWAYS_OFF;
" b, s+ p: R& R5 f  T; V4 u( dDefaults.common$.diags_USER2     = Diags.ALWAYS_OFF;
  _/ Y) H9 \! a, vDefaults.common$.diags_USER3     = Diags.ALWAYS_OFF;
7 E* S# k2 I' F$ U) HDefaults.common$.diags_USER4     = Diags.ALWAYS_OFF;
& I# h9 x- k, [1 S$ {8 K: qDefaults.common$.diags_USER5     = Diags.ALWAYS_OFF;% [- e( u* W9 ?8 |4 ?2 l( a# }
Defaults.common$.diags_USER6     = Diags.ALWAYS_OFF;
4 e4 R6 r  k$ I8 B  L- FDefaults.common$.diags_INFO      = Diags.ALWAYS_OFF;
. w# p4 Q# S8 U. i7 C6 P& {+ IDefaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;1 l; P1 q  V# x  ~. c9 k. h

1 Z3 T0 n0 E3 D/ q, k/* override diags mask for selected modules */4 B7 `1 _5 y2 a* b
xdc.useModule('xdc.runtime.Main');- Y- u. D5 b+ I4 P
Diags.setMaskMeta(
5 E+ W* d7 {" z# N    "xdc.runtime.Main",
; o, |$ i  g5 a* d9 K) T0 [  ~    Diags.ENTRY | Diags.EXIT | Diags.INFO,* N  U. `, o& u: n0 Q! Q: v
    Diags.RUNTIME_ON" i5 z3 N! z8 }
);
3 M" @2 Y- ]' x% k( {6 N& C: R1 q2 b+ r
var Registry = xdc.useModule('xdc.runtime.Registry');
5 ?" e; g$ `+ p, i9 g1 T4 HRegistry.common$.diags_ENTRY = Diags.RUNTIME_OFF;
9 O$ r* w! ]& @9 y* c9 @+ MRegistry.common$.diags_EXIT  = Diags.RUNTIME_OFF;
9 u  R. ~, Q" ]1 S, U$ k) k# |; Y2 l3 bRegistry.common$.diags_INFO  = Diags.RUNTIME_OFF;
# F! T9 v! C2 jRegistry.common$.diags_USER1 = Diags.RUNTIME_OFF;) e; ]3 o2 A1 \- p: l" p
$ Z  ?" `6 ?1 V7 v6 K; r
/* create a logger instance */3 s! U/ Y  z* i! L
var LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');: S' B8 U( y0 E1 U. h: g9 J
var loggerBufP = new LoggerBuf.Params();( b$ `, h: z$ j: v
loggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */
4 t7 Q0 f: N" ~  B3 M1 EloggerBufP.bufType = LoggerBuf.BufType_FIXED;3 r. @' u; y* n& B, N1 |
/ O" P' W& }( O  a* w7 ]* f- O2 s
var appLogger = LoggerBuf.create(loggerBufP);
- s: O8 d( Y: g' t  F; M) {" o# f1 zappLogger.instance.name = "AppLog_Core1";
  M+ [1 {* M3 x& n5 eDefaults.common$.logger = appLogger;  e% ?! R7 n/ Q; x: @. V
Memory.defaultHeapSize = 0x8192;   
1 y: b5 u0 g! O: g2 x9 p% vIdle.idleFxns[0] = "&LEDStatus";
# y. k& P( y7 CCache.initSize.l2Size = Cache.L2Size_32K;
4 v* K6 y4 c: B) W6 z' c8 q: s" k/ r) c3 }
回复 支持 反对

使用道具 举报

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 */# k! ^2 C8 t' n$ l
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
* n$ `. h5 C4 p" u) q: N6 N, cvar heapMemParams = new HeapMem.Params();. [2 I1 ~3 O( O5 w; w3 n
heapMemParams.size = 0x4000;' ]6 ]0 j# n( ?1 V: z- P3 G

2 a3 l. e( |4 [% S1 B9 fvar Memory = xdc.useModule('xdc.runtime.Memory');4 L9 U) D: o5 z) _# p& y
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);
9 @* t( \& }/ H* ], e/ e0 k9 F* K/ T+ A& }; S
我大约calloc  每次共计大小为5K*16bits,% @! q# g; ?2 B) j4 v& Z
而默认配置才0x4000、需要改大。8 Y+ M3 j- u% x8 I
: z1 Z( y/ H' h( ?
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
5#
 楼主| 发表于 2015-10-28 16:14:47 | 只看该作者
/* no rts heap */* t7 o; E0 V6 \, ?& K
Program.heap = 0;
7 O7 n& [/ o+ lProgram.argSize = 100;  /* minimum size */
1 K) F7 B+ z. x, ]Program.stack = 0xF000;                   //我改到F000  也不行
回复 支持 反对

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

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

使用道具 举报

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

本版积分规则


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

GMT+8, 2026-1-12 03:30 , Processed in 0.055598 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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