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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2015-9-4 08:33:31 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
创龙工程师你好,我在OMAPL138单独调试DSP程序(使用SYSBIOS)时,在任务中使用calloc函数动态申请内存,用完后free,类似如下结构$ E) H+ V! L  E2 f  [

- h8 {3 k) t# x! h0 w    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //256! f8 y# N# L* A/ W- B/ v
9 L3 ^, n: r' B1 g
其他程序段。。。。。
# |8 X1 a0 K) @% a( E0 w8 I$ Z
' O! [: p8 Q+ P( P+ h   free(x_d);
* F- y# i" w, Z2 P3 ?' I1 M  a
4 l) Q% L7 R5 [" D# c  j6 N% t) s使用DSP侧单独调试功能,验证动态申请没有问题,
7 u: s& [1 t$ w" ]9 ~7 d+ i+ B: i+ V  A# Q
但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。  q' F2 b5 E! F* F+ X

# i1 F! e/ O7 n% J0 x8 n# f7 G7 F2 Y
' b0 k" m: Q$ _  ]1 d4 x
) s; Q$ F! l4 p: W' X; W5 {. F4 \5 j+ E: u# r
% P) u1 [5 n' P: A4 {8 S% z) H: q

- j  g4 y; H& |$ c" x& K! W  V' ^# K( E5 b

2 y! \4 O; v  x# Y/ U& i% R& z) O* s# {( t! v% B& C8 i' _

! p$ [# ^+ c0 f1 r3 g4 Y6 m
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2015-9-4 10:29:21 | 只看该作者
补充说明
# k0 f3 W. {+ k我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下. r& b; Z. i) P2 v, a  Q4 t
(不过疑惑的是,为何单独DSP仿真就没有问题呢?)
" E- U& u" h2 n6 N$ R; _

* g( r. ~+ O1 }2 o" |2 {9 q是不是需要在DSP.CFG中进行配置
$ |% q  L% m; ^# I6 r' T& H我现在的配置为
# e) a* Z. M3 i0 t2 J2 W0 R8 ?' u, c! X0 _8 s- Y
/*2 g; C( N$ K. J7 ?/ q
*  ======== Operating System Configuration ========
5 s4 g, d3 m# n8 {( N# X; B$ n- g */: ~: n, ~% e# K+ b, K
: p* {; Q, j2 o) |6 X
/* no rts heap */
- E9 C! g1 f- [5 Q0 b& ]* QProgram.heap = 0;
, ]  |- Y' s9 d, KProgram.argSize = 100;  /* minimum size */, |$ w& m( u; W  l/ H! A2 W* [/ e
Program.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大
4 g5 N3 J5 z2 T1 ~+ W0 A* j
& D4 M/ |. H/ U) x5 e/* create a default heap */
) X; W3 r# u# L5 j0 [+ b7 O& Cvar HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
3 Z% X" m, S0 H- Z6 V' {var heapMemParams = new HeapMem.Params();* [: ?. W% t6 {) I0 r5 ]$ k
heapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大
  b: J$ I2 ^. y( x$ T5 u# F5 I5 Z; U$ c* P. H! B
var Memory = xdc.useModule('xdc.runtime.Memory');
5 r* g2 F/ n2 @4 J6 C0 YMemory.defaultHeapInstance = HeapMem.create(heapMemParams);
+ v$ U0 A* Y- M% C+ i/ ^4 A) h
. ~, L" }0 w. _# B8 c7 x: |+ e/* configure System module */
0 f  r! K) r* h" yvar SysMin = xdc.useModule('xdc.runtime.SysMin');4 ?& H$ q: ^' u
SysMin.bufSize = 0x1000;: G: @5 c7 ^2 H, ?. i) _
SysMin.flushAtExit = false;
& G9 V4 E$ E8 h+ @6 ?  R
4 j5 h# c4 L/ G  @7 R. S% ovar System = xdc.useModule('xdc.runtime.System');
$ Q! @/ L6 P- R' @1 HSystem.SupportProxy = SysMin;
9 F  h3 k* C+ C% {) l4 R. i/ _$ y5 i  h5 {/ n
/* configure SysBios to use the lower half of Timer 1 */0 M6 p; i4 ]: Q8 J5 t4 J
var Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');
$ H/ j) }* j4 hvar Clock = xdc.useModule('ti.sysbios.knl.Clock');
$ `0 ?# ^/ j0 ~. G/ R2 B8 C& HTimer.timerSettings[1].master = true;
2 s1 U/ B9 D- h- A5 p+ j' l# CTimer.defaultHalf = Timer.Half_LOWER;' t; l. r/ P- ^6 E# K
Clock.timerId = 1;
5 p  [+ C7 C6 j- G  ^- ]+ S
- ?: g9 p+ W- L' E, q; A" L4 Y3 m  \! M; O8 e
/** d4 Z, W9 l1 F9 e5 M3 @5 Z
*  ======== Miscellaneous Configuration ========1 P6 P/ }6 I: Q" ?5 e
*/
: M+ B) K4 D( e  {7 C+ ~  c
7 N  H! O0 U8 p$ A2 j% y% w1 R/* set default diags mask */
0 U. p/ `! y: b0 D% yvar Diags = xdc.useModule('xdc.runtime.Diags');( b/ d7 S0 @  J  y4 P$ Y4 T4 W( z
var Defaults = xdc.useModule('xdc.runtime.Defaults');
+ S' n) L* Z) d7 E) h5 _, }4 ~$ x6 e% e. p1 J/ {
Defaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;
" V3 |7 L2 [6 x8 W7 }Defaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;
: H$ J# k5 |  Y4 d2 Y7 f9 R' fDefaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;
% b+ y3 [/ s% `. Y4 r% P3 q# A5 rDefaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */
! o* T* N% c( y% r- qDefaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */# O: H$ u. r; |6 i8 X0 s8 }+ `5 s
Defaults.common$.diags_STATUS    = Diags.RUNTIME_ON;5 C8 B) K- }# f7 X) Y
Defaults.common$.diags_USER1     = Diags.ALWAYS_OFF;; e/ l& H$ b, ^1 ]( k, X& q& {7 R; I
Defaults.common$.diags_USER2     = Diags.ALWAYS_OFF;& ?9 Q, L2 D. w; Y5 V
Defaults.common$.diags_USER3     = Diags.ALWAYS_OFF;
" t2 k1 i( H4 tDefaults.common$.diags_USER4     = Diags.ALWAYS_OFF;4 s3 V7 z/ I; i& z
Defaults.common$.diags_USER5     = Diags.ALWAYS_OFF;5 D5 C9 H. K) ^6 }
Defaults.common$.diags_USER6     = Diags.ALWAYS_OFF;
* [2 N( [$ ~2 _- DDefaults.common$.diags_INFO      = Diags.ALWAYS_OFF;
, g, }8 L2 C- g( `Defaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;
% ^6 ]" l  `- |8 l$ m4 g4 ~  D' E, ~0 O
7 R2 t4 }# A$ i/* override diags mask for selected modules */2 M' P5 f, S' \% `
xdc.useModule('xdc.runtime.Main');' S8 n, k9 W  [. e6 |
Diags.setMaskMeta(* [6 [3 h  L6 i
    "xdc.runtime.Main",) P2 S( A# [; f3 u1 x2 O3 j
    Diags.ENTRY | Diags.EXIT | Diags.INFO,
' g1 c/ l1 V. ^0 q1 i/ M7 B0 K    Diags.RUNTIME_ON
: `# x5 _4 w4 O);
# s+ L- E" {9 w+ W0 P! ^# k
9 v+ s. h: ^$ c2 U9 T6 a7 ?var Registry = xdc.useModule('xdc.runtime.Registry');
+ |" o  z- i0 h! g9 ~- X, @$ s/ yRegistry.common$.diags_ENTRY = Diags.RUNTIME_OFF;
8 a+ [  I! ]. a3 {Registry.common$.diags_EXIT  = Diags.RUNTIME_OFF;
8 N  c3 \4 W7 O; u5 m6 y4 H% GRegistry.common$.diags_INFO  = Diags.RUNTIME_OFF;
. @2 z6 p6 o5 ^" sRegistry.common$.diags_USER1 = Diags.RUNTIME_OFF;
  s7 R# P+ k  l; L$ l3 V3 d! ?1 D7 S5 R" e- ^
/* create a logger instance */
: b' V# J9 I) `$ U$ Yvar LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');) {- Z* O' x. m+ r& D/ t1 ~+ n0 T
var loggerBufP = new LoggerBuf.Params();7 w7 r- x9 t- `+ i
loggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */
* A9 u8 B( q8 F, y/ {( ]loggerBufP.bufType = LoggerBuf.BufType_FIXED;
2 P7 l& Q9 p8 H9 [' ]" y+ D& V3 T/ b. ]. E2 H: K8 n3 V
var appLogger = LoggerBuf.create(loggerBufP);6 N# t) u& {9 p4 r  r
appLogger.instance.name = "AppLog_Core1";
! y4 G6 u, o3 p; R3 {. G: iDefaults.common$.logger = appLogger;
& A/ X* w/ e6 vMemory.defaultHeapSize = 0x8192;    : H$ v; m. K* O3 b. E9 g
Idle.idleFxns[0] = "&LEDStatus";
6 v3 e. Q: q' \* i9 `5 ACache.initSize.l2Size = Cache.L2Size_32K;
3 ^5 _2 U  ]2 L* s+ e9 M2 q4 G: _% R2 u
回复 支持 反对

使用道具 举报

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 */! ]2 c- h/ q/ v) Z' ^+ u7 B6 a
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
$ O/ i0 k. S$ r; T. {/ evar heapMemParams = new HeapMem.Params();
% [4 `: V/ m2 L  eheapMemParams.size = 0x4000;7 e* p# O7 W$ e5 Z5 @' k" ]* X

( F* l, ~% j1 n& `- V) tvar Memory = xdc.useModule('xdc.runtime.Memory');8 \6 J' \- H# B5 R1 ?8 B2 A3 F
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);5 V2 S2 e) z+ p$ o( _; R

! i5 |' U' U0 M) l我大约calloc  每次共计大小为5K*16bits,% A9 h; Q- o0 j  T" ~. B
而默认配置才0x4000、需要改大。
- I; w5 ^4 h) O- I7 Y- r! m4 @
& b+ G6 Q9 l5 F) h
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
5#
 楼主| 发表于 2015-10-28 16:14:47 | 只看该作者
/* no rts heap */# a" A$ O, h) O7 @, j+ }8 J
Program.heap = 0;
4 Y; Y; f% D: j& N: [Program.argSize = 100;  /* minimum size */- x% u1 g$ h7 J: @) a) v0 K! 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-3-7 08:33 , Processed in 0.047486 second(s), 26 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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