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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2015-9-4 08:33:31 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
创龙工程师你好,我在OMAPL138单独调试DSP程序(使用SYSBIOS)时,在任务中使用calloc函数动态申请内存,用完后free,类似如下结构; r* ?1 [2 C/ q0 u" P: A

5 i" ~3 @: K( _6 ^/ F9 Y    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //256
! O( U0 t! c/ g6 P/ z, a
8 D+ m# V5 G) |1 i% N. |0 a其他程序段。。。。。
7 G+ X6 t+ E- f+ s1 ?: c' R/ ^ & a& Q) U$ m' D" |8 w% e
   free(x_d);
: Z. K) L  [- ~
5 y9 M/ G, ?/ A7 ^7 {/ g2 u2 p- ~- m使用DSP侧单独调试功能,验证动态申请没有问题,% r7 e9 s  V3 k( v" y" l

) t( M; Y  y! t5 o但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。+ ?& W) d1 Z2 V1 {' l7 Q; H

* y' k9 F* ~! k  \% o" {& p. U9 Z, y: W1 L& w
7 Q4 v& A0 k) y* w2 x
0 a( ^) G1 l9 F  n; G

2 {$ l$ M" r, A2 N- s
; ^) y1 i5 Z) U. `) \7 O$ y0 E$ w) P. d/ g

8 p, t8 ^) `2 F8 E
! J9 t' Q# _. [* z" d4 s5 n7 c$ J5 n' U5 M2 ~$ p
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2015-9-4 10:29:21 | 只看该作者
补充说明
3 `  s: J4 Y# z/ H我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下
2 a3 O8 m9 S: p  ^(不过疑惑的是,为何单独DSP仿真就没有问题呢?)
$ v. v- E( H3 v
6 p8 j* z+ A) D: P: R$ I
是不是需要在DSP.CFG中进行配置
9 i- ^0 Q& X; J我现在的配置为0 G4 C2 T, z+ J1 C

: F$ s( q6 b) n- k) H/*- E; c' B" [. p9 n& T4 m
*  ======== Operating System Configuration ========
+ ~% J& R' ?% q6 @+ A* s1 }6 ] */+ m, }: B# p% m2 p8 q9 \
& G" u* X+ X4 K4 T# j$ Z
/* no rts heap */
$ q) n1 r% f3 NProgram.heap = 0;
: V4 {3 D; B! E) xProgram.argSize = 100;  /* minimum size */! b; r, P: ^. ?3 v7 G9 n
Program.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大+ ]* P. G* {( {) ~

% `5 L# X: k7 `% }6 ]) N/* create a default heap */
3 @0 N2 j- M! f* e8 Bvar HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
' y) ]& P7 ^" Fvar heapMemParams = new HeapMem.Params();
1 m. \- I+ M4 p! F0 t. ^heapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大
# _4 O; Q/ V& S: L
7 ~0 Z  D6 m9 F! w
var Memory = xdc.useModule('xdc.runtime.Memory');3 H& S4 E" e; @3 D
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);' ~3 s' f' F" m9 C

, M) q: X: }) Y6 J9 M4 y4 r/* configure System module */
7 }0 w) l$ }) h1 F- R! Y6 \3 |var SysMin = xdc.useModule('xdc.runtime.SysMin');3 @  o2 i- ]* ^; \
SysMin.bufSize = 0x1000;# L/ r: @2 n# S2 L
SysMin.flushAtExit = false;
- `1 r% M. d' n" }2 r+ Q  t7 S; C4 i8 o* o
var System = xdc.useModule('xdc.runtime.System');
1 y+ @5 R7 V& w  qSystem.SupportProxy = SysMin;9 ~. U* u: r3 b7 F

  d% N; K8 v; z7 j4 C5 N4 |' D! f/* configure SysBios to use the lower half of Timer 1 */
6 S8 x3 ~  n1 W5 nvar Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');
# k) r/ A/ P7 r$ j: c* e9 u5 _+ |var Clock = xdc.useModule('ti.sysbios.knl.Clock');
- V( O5 F4 d, m% h$ B9 b$ QTimer.timerSettings[1].master = true;
) n; n: s  g0 h/ G3 oTimer.defaultHalf = Timer.Half_LOWER;
) ?9 U5 m. N" p  b$ \5 ?Clock.timerId = 1;
& V0 Z2 S% Q) ?! x! x1 X) |$ U3 k1 g+ I2 |; G
& T0 G0 e) P# T* s6 G- k1 a
/*2 L6 z& o9 u: _2 i, Q% _8 F
*  ======== Miscellaneous Configuration ========
+ f+ q1 F1 c7 O2 l) T; s */, {% X6 f; B- [8 C
" Q1 r5 l+ @5 q" ^
/* set default diags mask */
3 r$ C7 h# w8 h  ~/ f1 D) nvar Diags = xdc.useModule('xdc.runtime.Diags');5 a2 Y8 B/ T5 G, l1 |
var Defaults = xdc.useModule('xdc.runtime.Defaults');& w+ O3 {" b' d5 l7 n

! h$ U: R7 s  |( bDefaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;
  V* c- Z4 G" IDefaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;
! T" w$ d3 k  _7 L# s; z$ RDefaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;6 r7 @$ c; c4 C
Defaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */1 k5 ?: L8 @/ [. J
Defaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */$ Y% [( n) C3 E. u4 B# h
Defaults.common$.diags_STATUS    = Diags.RUNTIME_ON;) F2 g# `; R) q$ M' r' ]; d
Defaults.common$.diags_USER1     = Diags.ALWAYS_OFF;" q$ N" r% h; ]- F+ ?; T4 Q
Defaults.common$.diags_USER2     = Diags.ALWAYS_OFF;
# t* F+ O$ o7 N0 |Defaults.common$.diags_USER3     = Diags.ALWAYS_OFF;
/ |% t9 }: z7 lDefaults.common$.diags_USER4     = Diags.ALWAYS_OFF;; [. {  d9 G2 F
Defaults.common$.diags_USER5     = Diags.ALWAYS_OFF;
8 B7 B1 x# o2 |9 x+ H- f0 }9 wDefaults.common$.diags_USER6     = Diags.ALWAYS_OFF;- E3 d; h: {6 e- z& j+ e* V
Defaults.common$.diags_INFO      = Diags.ALWAYS_OFF;
9 i3 P6 V: P: g& o: V) |6 ZDefaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;
7 E2 x+ C- d, T! m: T+ S1 X7 D. v/ P5 A
/* override diags mask for selected modules */9 b' N& [: X9 n/ e( b9 V0 W" l  @9 X2 Z
xdc.useModule('xdc.runtime.Main');
  ^$ f  n# v5 ]& L3 u& v2 cDiags.setMaskMeta(* {3 b% s6 K& e8 c) c! J1 t
    "xdc.runtime.Main",
9 i( Z6 l+ C0 n/ B8 W    Diags.ENTRY | Diags.EXIT | Diags.INFO," B/ v' r$ n( _: Z5 `7 z( x% n& U4 o
    Diags.RUNTIME_ON, M+ {, l( x5 P; V1 K0 z, p
);  w. H) ]5 @6 `

' ~0 l+ Y6 @  j. ]var Registry = xdc.useModule('xdc.runtime.Registry');8 }7 O5 x( p& e* U, v8 q6 B
Registry.common$.diags_ENTRY = Diags.RUNTIME_OFF;% Z7 t! ?( z3 _
Registry.common$.diags_EXIT  = Diags.RUNTIME_OFF;; t+ W- d' E. G  x, i7 E
Registry.common$.diags_INFO  = Diags.RUNTIME_OFF;
6 d: U# k: G( T9 m$ J; vRegistry.common$.diags_USER1 = Diags.RUNTIME_OFF;9 B. V) J$ q2 c% k$ e" A

* [/ m  W& ?+ A% @2 q9 |8 `/* create a logger instance */, a/ i2 y! s1 C) l! }
var LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');
$ G; y+ t8 z  f$ w$ V4 Tvar loggerBufP = new LoggerBuf.Params();! Y' D9 m& M! u. ~4 d4 h3 M
loggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */
+ Y: v, Q" \1 z1 QloggerBufP.bufType = LoggerBuf.BufType_FIXED;* A0 b* m$ T* d) F" s% G8 p
% U3 t' Z, F$ |, E. ~
var appLogger = LoggerBuf.create(loggerBufP);
) d0 a7 S7 w  d, ~5 d$ sappLogger.instance.name = "AppLog_Core1";
2 O( m( l) q8 [9 r- A8 b/ K% n! PDefaults.common$.logger = appLogger;$ A: n1 \; y$ |$ D0 Y! [/ T
Memory.defaultHeapSize = 0x8192;   
! ]5 W1 ]; n% z' `1 t. D; sIdle.idleFxns[0] = "&LEDStatus";) b  q2 I/ N) E: l$ I5 {. `
Cache.initSize.l2Size = Cache.L2Size_32K;
; s( z8 Q) e- p9 f6 i" n  h
7 h4 K$ Z/ g! x$ o  k7 k8 o
回复 支持 反对

使用道具 举报

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 */6 `8 W( R% n* C3 }
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
( W7 x+ G1 W: t3 z0 s9 pvar heapMemParams = new HeapMem.Params();
+ Z, l5 Z" e( v+ u* Y7 PheapMemParams.size = 0x4000;. ^; M$ h* H* i$ x* J
+ k$ c4 [' r& |% p2 ?  m
var Memory = xdc.useModule('xdc.runtime.Memory');
: U" m, l" T0 v8 f. hMemory.defaultHeapInstance = HeapMem.create(heapMemParams);
+ J8 r1 X' J, D4 B: O- n  Y
5 y1 D7 U5 B# f/ j+ j) u3 y我大约calloc  每次共计大小为5K*16bits,
- V9 S0 q7 u0 n& O# Y而默认配置才0x4000、需要改大。* J4 ^1 A- \8 k) `9 m  v7 f  i
% ^9 v# D5 c* i0 W
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
5#
 楼主| 发表于 2015-10-28 16:14:47 | 只看该作者
/* no rts heap */7 ]! y- ?1 Y- M3 s: g
Program.heap = 0;
& W  b" u8 ?: X2 k$ D' iProgram.argSize = 100;  /* minimum size */+ B! W. `" V$ R1 O* @
Program.stack = 0xF000;                   //我改到F000  也不行
回复 支持 反对

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

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

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2026-3-25 15:32 , Processed in 0.040935 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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