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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2015-9-4 08:33:31 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
创龙工程师你好,我在OMAPL138单独调试DSP程序(使用SYSBIOS)时,在任务中使用calloc函数动态申请内存,用完后free,类似如下结构
( ^( j  R+ w9 t3 m; o+ M7 g! D: ^2 Z0 Z9 r0 W# y# T1 k
    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //256
# B3 k8 F  \# I( Y9 z% j3 c/ E4 G' k, l' F6 \5 Q
其他程序段。。。。。
& C' ~# e9 G" `$ X( R
  B7 a* a8 @" y8 }   free(x_d);
* F+ _  G/ K/ ]( W5 o$ p) q- q; g5 E. D# w( c5 @: e3 p+ ?
使用DSP侧单独调试功能,验证动态申请没有问题," @) g; I+ Y  G. W1 T. d$ S
. T5 M" g5 C0 r2 Q) O9 ^$ x) ]
但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。( Q4 W) F$ r+ \" ?

* w: M9 [6 j* }6 j/ d$ X& F7 E; W* Y" `% I% a

9 d8 l2 g6 v8 a$ \
' M8 P6 ~2 z& y9 a- y  O+ D% H/ p+ G, T6 B- p1 G1 k; _. @

1 P$ B2 D+ J; O0 r
6 S# n! J$ _, k7 |. w* ^
+ M& W( x% E" d" [3 |5 m- \& \1 V4 O! }

# ?; h0 Q, R/ A' p, d) j3 e+ e2 p
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2015-9-4 10:29:21 | 只看该作者
补充说明$ R! ]$ A5 L1 \" p/ u1 p
我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下
4 p$ X7 E+ T" U$ S(不过疑惑的是,为何单独DSP仿真就没有问题呢?)
5 k3 S6 X" ]. z3 c

: ]/ U0 ~6 B% Q& ~是不是需要在DSP.CFG中进行配置
: y2 X1 N( D( O我现在的配置为
8 w7 A' c7 G7 M/ ?0 W$ _9 a) k
$ w  t; u0 m/ x1 ^4 @3 T/*
3 b; T% K$ s# V *  ======== Operating System Configuration ========
& O, r2 m' j2 i& J4 E! R */8 P6 _6 J, }4 {+ @- x' S. u( f
: \1 F. D# ?/ x& I/ @
/* no rts heap */* r  F% L" s* \+ h$ q4 ]$ P, t7 c
Program.heap = 0;* W+ O$ v( N+ ?, _/ G" X: E( \% L
Program.argSize = 100;  /* minimum size */) E" b4 h% z( m) I4 v  w( p
Program.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大
+ o: R+ H$ k% V9 b, F# w
! {" [* x; t0 A* H/* create a default heap */( ]& q9 b+ Y7 E
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');. C  f" c+ E8 b  {% L, ]; x  f: x
var heapMemParams = new HeapMem.Params();. f" q$ d. U; G) L2 W: Z; O8 ?+ }
heapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大" ^/ D  f# ?$ `4 j* {: L* J3 o
) n/ G8 k1 I4 i
var Memory = xdc.useModule('xdc.runtime.Memory');
1 @; X8 f" l& \' l0 g* o( M. E4 @Memory.defaultHeapInstance = HeapMem.create(heapMemParams);% X3 {. x6 M9 ~9 _* y, z* r+ X
5 D; F/ s. C; K) V5 X" a1 F
/* configure System module */  C8 m& Q' y# T! Y0 L, B: W
var SysMin = xdc.useModule('xdc.runtime.SysMin');
4 i5 q; H( C' N; b) z/ v# lSysMin.bufSize = 0x1000;; N5 t. T/ b5 r3 x6 {9 z
SysMin.flushAtExit = false;
! K5 g3 ~5 r8 `3 i! a7 Z8 m
! b9 A5 ?3 `- A& Gvar System = xdc.useModule('xdc.runtime.System');
$ H5 S) l7 z( @; ?$ C' Q4 w4 iSystem.SupportProxy = SysMin;$ }# X  H% t5 m. @7 `
" i8 J6 R1 {' ~, k+ a
/* configure SysBios to use the lower half of Timer 1 */
% L* a$ ^+ T8 B& U+ ivar Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');
5 c9 _8 |; l5 v( _8 q: `8 c" K6 Fvar Clock = xdc.useModule('ti.sysbios.knl.Clock');7 N' [8 z" v( ~4 V% @: B
Timer.timerSettings[1].master = true;
3 {* }1 K4 L: wTimer.defaultHalf = Timer.Half_LOWER;
7 |. O6 G7 a, F- u, j; qClock.timerId = 1;
0 r2 d5 Z3 D3 S# K/ H$ U) y* T( i1 D4 y9 a

5 s) V4 ]# q- `6 {  Q0 b  z9 Y/*9 L4 S/ \) _* ^# x$ O3 V
*  ======== Miscellaneous Configuration ========/ Z# w9 p0 M7 [7 {, i8 W
*// [$ ^: [) h+ G6 {

# c' @' D' f( F  u) P/* set default diags mask */
- O; E' {# x% F9 Jvar Diags = xdc.useModule('xdc.runtime.Diags');
! T$ b) M' E/ v( T; V0 ^var Defaults = xdc.useModule('xdc.runtime.Defaults');! K- r% @: T3 y3 [# x& M, ^# z5 J

# a% \+ x7 k2 K7 _Defaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;* a, e& g5 }; s. k
Defaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;
3 q1 y6 B5 B" f. ?$ x# b& JDefaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;
; C, g4 j% \; l" ?. f: CDefaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */
! u5 T" \% V3 q2 n# |/ _Defaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */9 e7 z7 v( l7 S+ n  e
Defaults.common$.diags_STATUS    = Diags.RUNTIME_ON;7 R4 ~, n' p& K3 {0 f
Defaults.common$.diags_USER1     = Diags.ALWAYS_OFF;
& {# w- s0 k/ h+ mDefaults.common$.diags_USER2     = Diags.ALWAYS_OFF;% o2 a# ^; Z4 B
Defaults.common$.diags_USER3     = Diags.ALWAYS_OFF;' P  b. [: d3 o' ^  G
Defaults.common$.diags_USER4     = Diags.ALWAYS_OFF;
3 c. y/ J+ h8 BDefaults.common$.diags_USER5     = Diags.ALWAYS_OFF;
1 q6 J' ~/ O( Q+ v! FDefaults.common$.diags_USER6     = Diags.ALWAYS_OFF;
: K- G7 W7 ]$ W: D3 m$ y; b7 gDefaults.common$.diags_INFO      = Diags.ALWAYS_OFF;4 M5 F( u* o9 ]* ?) V# n; G0 {
Defaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;
. O7 H0 P% c: _3 _( B  A0 E( J# X. V9 Q
/* override diags mask for selected modules */' q$ R7 A2 k% ^0 N
xdc.useModule('xdc.runtime.Main');$ }0 ?) S% j: I. T
Diags.setMaskMeta(- t. x2 T0 M9 N+ p0 J5 h0 D# ^1 E
    "xdc.runtime.Main",; k2 n& ~' ?$ J+ C8 Q' v4 w
    Diags.ENTRY | Diags.EXIT | Diags.INFO,. D/ p* D9 n( r# }* B9 f
    Diags.RUNTIME_ON
) O* ~1 K2 s! v) C& X( \9 o+ P7 h- A);
* q8 t9 v+ Y; m: |( h" @1 R. t; H+ p) w# t9 Y
var Registry = xdc.useModule('xdc.runtime.Registry');
) n4 J! F- \! g/ IRegistry.common$.diags_ENTRY = Diags.RUNTIME_OFF;
8 S! `; ~& g1 kRegistry.common$.diags_EXIT  = Diags.RUNTIME_OFF;
  W4 l8 H6 W8 W' TRegistry.common$.diags_INFO  = Diags.RUNTIME_OFF;
6 |, e. V% h% }Registry.common$.diags_USER1 = Diags.RUNTIME_OFF;
% Z0 `% d" ^/ |2 @0 s) Z1 o- R5 A2 }2 T, m9 O, I
/* create a logger instance */
4 @4 g' b! e! H( \1 x1 |  O% Kvar LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');
# W& M: z0 \6 F2 f# F6 Pvar loggerBufP = new LoggerBuf.Params();' q$ m& a" ~/ r$ O- @* N; n
loggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */
7 L" @( [1 _4 t+ p2 t( CloggerBufP.bufType = LoggerBuf.BufType_FIXED;7 b& k; z1 y& r1 G+ z0 b3 F$ ]. P; z

. |! W7 {% }; H5 }6 Tvar appLogger = LoggerBuf.create(loggerBufP);0 j, H# R( m6 t( G1 f, K
appLogger.instance.name = "AppLog_Core1";+ y% H) U5 N& F! M# N1 w* v6 {) x; o, u: r
Defaults.common$.logger = appLogger;0 m0 t. y2 `2 L2 G2 H+ J6 M- I
Memory.defaultHeapSize = 0x8192;   
' {4 G# q2 \; T# YIdle.idleFxns[0] = "&LEDStatus";
" \0 @: R( X2 r( m  XCache.initSize.l2Size = Cache.L2Size_32K;
/ p( s. w( Z! U3 t
) a" _5 x- _  J' \* B6 X
回复 支持 反对

使用道具 举报

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 */! b6 }: _* I7 ~. d* W
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');; z/ ]- y' x8 O- e+ a
var heapMemParams = new HeapMem.Params();
1 n, S: q# N4 o) ?5 GheapMemParams.size = 0x4000;* n. M+ q( n- `+ I( e! c
! Z- p$ z* l4 T) Z
var Memory = xdc.useModule('xdc.runtime.Memory');
6 Q* N, T4 \0 q8 {$ T7 I- [Memory.defaultHeapInstance = HeapMem.create(heapMemParams);6 }$ m% ?8 @+ m

0 `5 R1 M  W- S5 h/ J! U我大约calloc  每次共计大小为5K*16bits,, Z% A0 {7 j, J* ?2 d0 c. U
而默认配置才0x4000、需要改大。1 ^+ p! _6 Q' u, e8 @

, w6 O" I. L& ^7 b
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
5#
 楼主| 发表于 2015-10-28 16:14:47 | 只看该作者
/* no rts heap *// B8 G. w, H* `0 k
Program.heap = 0;
1 D/ ^7 z) [3 \% g" E7 j7 RProgram.argSize = 100;  /* minimum size */1 E3 \) a2 N( m% s
Program.stack = 0xF000;                   //我改到F000  也不行
回复 支持 反对

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

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

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2026-2-27 05:41 , Processed in 0.042203 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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