reducing size

This commit is contained in:
rusefi 2017-03-29 20:13:34 -04:00 committed by Fabien Poussin
parent 3df4ecfa1d
commit 422d4123dc
119 changed files with 0 additions and 34678 deletions

File diff suppressed because it is too large Load Diff

View File

@ -1,4 +0,0 @@
<hr class="footer"/><address class="footer"><small>
Generated on $datetime for $projectname by&#160;<a href="http://www.doxygen.org/index.html"><img class="footer" src="$relpath$doxygen.png" alt="doxygen"/></a> $doxygenversion</small></address>
</body>
</html>

View File

@ -1,21 +0,0 @@
<!-- HTML footer for doxygen 1.8.8-->
<!-- start footer part -->
<!--BEGIN GENERATE_TREEVIEW-->
<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
<ul>
$navpath
<li class="footer">$generatedby
<a href="http://www.doxygen.org/index.html">
<img class="footer" src="$relpath^doxygen.png" alt="doxygen"/></a> $doxygenversion </li>
</ul>
</div>
<!--END GENERATE_TREEVIEW-->
<!--BEGIN !GENERATE_TREEVIEW-->
<hr class="footer"/><address class="footer"><small>
$generatedby &#160;<a href="http://www.doxygen.org/index.html">
<img class="footer" src="$relpath^doxygen.png" alt="doxygen"/>
</a> $doxygenversion
</small></address>
<!--END !GENERATE_TREEVIEW-->
</body>
</html>

View File

@ -1,55 +0,0 @@
<!-- HTML header for doxygen 1.8.8-->
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<meta http-equiv="X-UA-Compatible" content="IE=9"/>
<meta name="generator" content="Doxygen $doxygenversion"/>
<!--BEGIN PROJECT_NAME--><title>$projectname: $title</title><!--END PROJECT_NAME-->
<!--BEGIN !PROJECT_NAME--><title>$title</title><!--END !PROJECT_NAME-->
<link href="$relpath^tabs.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="$relpath^jquery.js"></script>
<script type="text/javascript" src="$relpath^dynsections.js"></script>
$treeview
$search
$mathjax
<link href="$relpath^$stylesheet" rel="stylesheet" type="text/css" />
$extrastylesheet
</head>
<body>
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
<!--BEGIN TITLEAREA-->
<div id="titlearea">
<table cellspacing="0" cellpadding="0">
<tbody>
<tr style="height: 56px;">
<!--BEGIN PROJECT_LOGO-->
<td id="projectlogo"><img alt="Logo" src="$relpath^$projectlogo"/></td>
<!--END PROJECT_LOGO-->
<!--BEGIN PROJECT_NAME-->
<td style="padding-left: 0.5em;">
<div id="projectname">$projectname
<!--BEGIN PROJECT_NUMBER-->&#160;<span id="projectnumber">$projectnumber</span><!--END PROJECT_NUMBER-->
</div>
<!--BEGIN PROJECT_BRIEF--><div id="projectbrief">$projectbrief</div><!--END PROJECT_BRIEF-->
</td>
<!--END PROJECT_NAME-->
<!--BEGIN !PROJECT_NAME-->
<!--BEGIN PROJECT_BRIEF-->
<td style="padding-left: 0.5em;">
<div id="projectbrief">$projectbrief</div>
</td>
<!--END PROJECT_BRIEF-->
<!--END !PROJECT_NAME-->
<!--BEGIN DISABLE_INDEX-->
<!--BEGIN SEARCHENGINE-->
<td>$searchbox</td>
<!--END SEARCHENGINE-->
<!--END DISABLE_INDEX-->
</tr>
</tbody>
</table>
</div>
<!--END TITLEAREA-->
<!-- end header part -->

View File

@ -1,66 +0,0 @@
<!-- HTML header for doxygen 1.8.8-->
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<meta http-equiv="X-UA-Compatible" content="IE=9"/>
<meta name="generator" content="Doxygen $doxygenversion"/>
<!--BEGIN PROJECT_NAME--><title>$projectname: $title</title><!--END PROJECT_NAME-->
<!--BEGIN !PROJECT_NAME--><title>$title</title><!--END !PROJECT_NAME-->
<link href="$relpath^tabs.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="$relpath^jquery.js"></script>
<script type="text/javascript" src="$relpath^dynsections.js"></script>
$treeview
$search
$mathjax
<link href="$relpath^$stylesheet" rel="stylesheet" type="text/css" />
$extrastylesheet
</head>
<body>
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
<!--BEGIN TITLEAREA-->
<div id="titlearea">
<table cellspacing="0" cellpadding="0">
<tbody>
<tr style="height: 56px;">
<!--BEGIN PROJECT_LOGO-->
<td id="projectlogo"><img alt="Logo" src="$relpath^$projectlogo"/></td>
<!--END PROJECT_LOGO-->
<!--BEGIN PROJECT_NAME-->
<td style="padding-left: 0.5em;">
<div id="projectname">$projectname
<!--BEGIN PROJECT_NUMBER-->&#160;<span id="projectnumber">$projectnumber</span><!--END PROJECT_NUMBER-->
<script type="text/javascript"><!--
google_ad_client = "pub-3840594581853944";
/* Documentation, bottom, 728x90, created 9/19/10 */
google_ad_slot = "1902290615";
google_ad_width = 728;
google_ad_height = 90;
//-->
</script>
<script type="text/javascript"
src="http://pagead2.googlesyndication.com/pagead/show_ads.js">
</script>
</div>
<!--BEGIN PROJECT_BRIEF--><div id="projectbrief">$projectbrief</div><!--END PROJECT_BRIEF-->
</td>
<!--END PROJECT_NAME-->
<!--BEGIN !PROJECT_NAME-->
<!--BEGIN PROJECT_BRIEF-->
<td style="padding-left: 0.5em;">
<div id="projectbrief">$projectbrief</div>
</td>
<!--END PROJECT_BRIEF-->
<!--END !PROJECT_NAME-->
<!--BEGIN DISABLE_INDEX-->
<!--BEGIN SEARCHENGINE-->
<td>$searchbox</td>
<!--END SEARCHENGINE-->
<!--END DISABLE_INDEX-->
</tr>
</tbody>
</table>
</div>
<!--END TITLEAREA-->
<!-- end header part -->

View File

@ -1,194 +0,0 @@
<doxygenlayout version="1.0">
<!-- Generated by doxygen 1.8.8 -->
<!-- Navigation index tabs for HTML output -->
<navindex>
<tab type="mainpage" visible="yes" title=""/>
<tab type="pages" visible="yes" title="" intro=""/>
<tab type="modules" visible="yes" title="" intro=""/>
<tab type="namespaces" visible="yes" title="">
<tab type="namespacelist" visible="yes" title="" intro=""/>
<tab type="namespacemembers" visible="yes" title="" intro=""/>
</tab>
<tab type="classes" visible="yes" title="">
<tab type="classlist" visible="yes" title="" intro=""/>
<tab type="classindex" visible="$ALPHABETICAL_INDEX" title=""/>
<tab type="hierarchy" visible="yes" title="" intro=""/>
<tab type="classmembers" visible="yes" title="" intro=""/>
</tab>
<tab type="files" visible="yes" title="">
<tab type="filelist" visible="yes" title="" intro=""/>
<tab type="globals" visible="yes" title="" intro=""/>
</tab>
<tab type="examples" visible="yes" title="" intro=""/>
</navindex>
<!-- Layout definition for a class page -->
<class>
<briefdescription visible="yes"/>
<includes visible="$SHOW_INCLUDE_FILES"/>
<inheritancegraph visible="$CLASS_GRAPH"/>
<collaborationgraph visible="$COLLABORATION_GRAPH"/>
<memberdecl>
<nestedclasses visible="yes" title=""/>
<publictypes title=""/>
<services title=""/>
<interfaces title=""/>
<publicslots title=""/>
<signals title=""/>
<publicmethods title=""/>
<publicstaticmethods title=""/>
<publicattributes title=""/>
<publicstaticattributes title=""/>
<protectedtypes title=""/>
<protectedslots title=""/>
<protectedmethods title=""/>
<protectedstaticmethods title=""/>
<protectedattributes title=""/>
<protectedstaticattributes title=""/>
<packagetypes title=""/>
<packagemethods title=""/>
<packagestaticmethods title=""/>
<packageattributes title=""/>
<packagestaticattributes title=""/>
<properties title=""/>
<events title=""/>
<privatetypes title=""/>
<privateslots title=""/>
<privatemethods title=""/>
<privatestaticmethods title=""/>
<privateattributes title=""/>
<privatestaticattributes title=""/>
<friends title=""/>
<related title="" subtitle=""/>
<membergroups visible="yes"/>
</memberdecl>
<detaileddescription title=""/>
<memberdef>
<inlineclasses title=""/>
<typedefs title=""/>
<enums title=""/>
<services title=""/>
<interfaces title=""/>
<constructors title=""/>
<functions title=""/>
<related title=""/>
<variables title=""/>
<properties title=""/>
<events title=""/>
</memberdef>
<allmemberslink visible="yes"/>
<usedfiles visible="$SHOW_USED_FILES"/>
<authorsection visible="yes"/>
</class>
<!-- Layout definition for a namespace page -->
<namespace>
<briefdescription visible="yes"/>
<memberdecl>
<nestednamespaces visible="yes" title=""/>
<constantgroups visible="yes" title=""/>
<classes visible="yes" title=""/>
<typedefs title=""/>
<enums title=""/>
<functions title=""/>
<variables title=""/>
<membergroups visible="yes"/>
</memberdecl>
<detaileddescription title=""/>
<memberdef>
<inlineclasses title=""/>
<typedefs title=""/>
<enums title=""/>
<functions title=""/>
<variables title=""/>
</memberdef>
<authorsection visible="yes"/>
</namespace>
<!-- Layout definition for a file page -->
<file>
<briefdescription visible="yes"/>
<includes visible="$SHOW_INCLUDE_FILES"/>
<includegraph visible="$INCLUDE_GRAPH"/>
<includedbygraph visible="$INCLUDED_BY_GRAPH"/>
<sourcelink visible="yes"/>
<memberdecl>
<classes visible="yes" title=""/>
<namespaces visible="yes" title=""/>
<constantgroups visible="yes" title=""/>
<defines title=""/>
<typedefs title=""/>
<enums title=""/>
<functions title=""/>
<variables title=""/>
<membergroups visible="yes"/>
</memberdecl>
<detaileddescription title=""/>
<memberdef>
<inlineclasses title=""/>
<defines title=""/>
<typedefs title=""/>
<enums title=""/>
<functions title=""/>
<variables title=""/>
</memberdef>
<authorsection/>
</file>
<!-- Layout definition for a group page -->
<group>
<briefdescription visible="yes"/>
<groupgraph visible="$GROUP_GRAPHS"/>
<detaileddescription title=""/>
<memberdecl>
<nestedgroups visible="yes" title=""/>
<dirs visible="yes" title=""/>
<files visible="yes" title=""/>
<namespaces visible="yes" title=""/>
<defines title=""/>
<membergroups visible="yes"/>
<typedefs title=""/>
<classes visible="yes" title=""/>
<functions title=""/>
<enums title=""/>
<enumvalues title=""/>
<variables title=""/>
<signals title=""/>
<publicslots title=""/>
<protectedslots title=""/>
<privateslots title=""/>
<events title=""/>
<properties title=""/>
<friends title=""/>
</memberdecl>
<memberdef>
<pagedocs/>
<inlineclasses title=""/>
<defines title=""/>
<typedefs title=""/>
<enums title=""/>
<enumvalues title=""/>
<functions title=""/>
<variables title=""/>
<signals title=""/>
<publicslots title=""/>
<protectedslots title=""/>
<privateslots title=""/>
<events title=""/>
<properties title=""/>
<friends title=""/>
</memberdef>
<authorsection visible="yes"/>
</group>
<!-- Layout definition for a directory page -->
<directory>
<briefdescription visible="yes"/>
<directorygraph visible="yes"/>
<memberdecl>
<dirs visible="yes"/>
<files visible="yes"/>
</memberdecl>
<detaileddescription title=""/>
</directory>
</doxygenlayout>

Binary file not shown.

Before

Width:  |  Height:  |  Size: 16 KiB

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@ -1,8 +0,0 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<meta http-equiv="Refresh" content="0; URL=html/index.html">
</head>
<body>
</body>
</html>

View File

@ -1,5 +0,0 @@
del html\*.* /Q
doxygen Doxyfile_chm
del html\*.md5
del html\*.map
pause

View File

@ -1,5 +0,0 @@
del html\*.* /Q
doxygen Doxyfile_html
del html\*.md5
del html\*.map
pause

View File

@ -1,6 +0,0 @@
#!/bin/bash
rm html/*
doxygen Doxyfile_html
rm html/*.md5
rm html/*.map

View File

@ -1,11 +0,0 @@
*** Documentation build procedure ***
The following software must be installed:
- Doxygen 1.7.4 or later.
- Graphviz 2.26.3 or later. The ./bin directory must be specified in the path
in order to make Graphviz accessible by Doxygen.
Build procedure:
- Run Doxywizard.
- Load ./docs/Doxyfile_html or ./docs/Doxyfile_chm from Doxywizard.
- Start.

View File

@ -1,84 +0,0 @@
--- Module: ..\..\..\os\hal\src\hal.c (C)
--- Module: ..\..\..\os\hal\src\hal_buffers.c (C)
--- Module: ..\..\..\os\hal\src\hal_queues.c (C)
--- Module: ..\..\..\os\hal\src\hal_mmcsd.c (C)
--- Module: ..\..\..\os\hal\src\adc.c (C)
--- Module: ..\..\..\os\hal\src\can.c (C)
--- Module: ..\..\..\os\hal\src\dac.c (C)
--- Module: ..\..\..\os\hal\src\ext.c (C)
--- Module: ..\..\..\os\hal\src\gpt.c (C)
--- Module: ..\..\..\os\hal\src\i2c.c (C)
--- Module: ..\..\..\os\hal\src\i2s.c (C)
--- Module: ..\..\..\os\hal\src\icu.c (C)
--- Module: ..\..\..\os\hal\src\mac.c (C)
--- Module: ..\..\..\os\hal\src\mmc_spi.c (C)
--- Module: ..\..\..\os\hal\src\pal.c (C)
--- Module: ..\..\..\os\hal\src\pwm.c (C)
--- Module: ..\..\..\os\hal\src\rtc.c (C)
--- Module: ..\..\..\os\hal\src\sdc.c (C)
--- Module: ..\..\..\os\hal\src\serial.c (C)
--- Module: ..\..\..\os\hal\src\serial_usb.c (C)
--- Module: ..\..\..\os\hal\src\spi.c (C)
--- Module: ..\..\..\os\hal\src\st.c (C)
--- Module: ..\..\..\os\hal\src\uart.c (C)
--- Module: ..\..\..\os\hal\src\usb.c (C)
--- Module: ..\..\..\os\hal\src\wdg.c (C)
--- Module: ..\..\..\os\hal\templates\osal\osal.c (C)
--- Module: ..\..\..\os\hal\templates\hal_lld.c (C)
--- Module: ..\..\..\os\hal\templates\adc_lld.c (C)
--- Module: ..\..\..\os\hal\templates\can_lld.c (C)
--- Module: ..\..\..\os\hal\templates\dac_lld.c (C)
--- Module: ..\..\..\os\hal\templates\ext_lld.c (C)
--- Module: ..\..\..\os\hal\templates\gpt_lld.c (C)
--- Module: ..\..\..\os\hal\templates\i2c_lld.c (C)
--- Module: ..\..\..\os\hal\templates\icu_lld.c (C)
--- Module: ..\..\..\os\hal\templates\mac_lld.c (C)
--- Module: ..\..\..\os\hal\templates\pal_lld.c (C)
--- Module: ..\..\..\os\hal\templates\pwm_lld.c (C)
--- Module: ..\..\..\os\hal\templates\sdc_lld.c (C)
--- Module: ..\..\..\os\hal\templates\serial_lld.c (C)
--- Module: ..\..\..\os\hal\templates\spi_lld.c (C)
--- Module: ..\..\..\os\hal\templates\uart_lld.c (C)
--- Module: ..\..\..\os\hal\templates\usb_lld.c (C)

View File

@ -1,2 +0,0 @@
#!/bin/bash
rsync -avP -e ssh --delete --exclude=.* ./html/ gdisirio,chibios@web.sourceforge.net:/home/groups/c/ch/chibios/htdocs/docs3/hal

View File

@ -1,38 +0,0 @@
/*
ChibiOS - Copyright (C) 2006..2015 Giovanni Di Sirio.
This file is part of ChibiOS.
ChibiOS is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 3 of the License, or
(at your option) any later version.
ChibiOS is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
/**
* @mainpage Introduction
* @author Giovanni Di Sirio (gdisirio@users.sourceforge.net).
*
* <h2>Features</h2>
* - Hardware Abstraction Layer (HAL) supporting numerous high level device
* drivers abstracting common features in modern MCUs.
* - Driver models for: ADC, CAN, DAC, EXT, GPT, I2C, I2S, ICU, MAC, MMC, PAL,
* PWM, RTC, SDC, Serial, UART, USB, USB-CDC, SPI, ST, WDG.
* - Abstraction of streams.
* - Abstraction of block devices.
* - The drivers can be ported to virtually any MCU architecture thanks to
* an high level API.
* - The HAL can be used with or without an RTOS.
* - The HAL can be adapted to any reasonable RTOS thanks to an Operating
* System Abstraction Layer (OSAL). ChibiOS/RT and ChibiOS/NIL are supported
* out of the box.
* .
*/

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@ -1,8 +0,0 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<meta http-equiv="Refresh" content="0; URL=html/index.html">
</head>
<body>
</body>
</html>

View File

@ -1,5 +0,0 @@
del html\*.* /Q
doxygen Doxyfile_chm
del html\*.md5
del html\*.map
pause

View File

@ -1,5 +0,0 @@
del html\*.* /Q
doxygen Doxyfile_html
del html\*.md5
del html\*.map
pause

View File

@ -1,6 +0,0 @@
#!/bin/bash
rm html/*
doxygen Doxyfile_html
rm html/*.md5
rm html/*.map

View File

@ -1,11 +0,0 @@
*** Documentation build procedure ***
The following software must be installed:
- Doxygen 1.7.4 or later.
- Graphviz 2.26.3 or later. The ./bin directory must be specified in the path
in order to make Graphviz accessible by Doxygen.
Build procedure:
- Run Doxywizard.
- Load ./docs/Doxyfile_html or ./docs/Doxyfile_chm from Doxywizard.
- Start.

View File

@ -1,32 +0,0 @@
*** ChibiOS/NIL Test Suite
***
*** Compiled: Jul 9 2015 - 10:31:29
*** Platform: SPC560Dxx Car Body and Convenience
*** Test Board: EVB with SPC560Dxx Mini Module
----------------------------------------------------------------------------
--- Test Case 1.1 (System Tick Counter functionality)
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 1.2 (Thread Sleep functionality)
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 2.1 (semaphore primitives, no state change)
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 2.2 (semaphore primitives, with state change)
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 2.3 (semaphores timeout)
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 2.4 (suspend and resume functionality)
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 2.5 (events functionality)
--- Result: SUCCESS
----------------------------------------------------------------------------
Final result: SUCCESS

View File

@ -1,32 +0,0 @@
*** ChibiOS/NIL Test Suite
***
*** Compiled: Jul 9 2015 - 10:52:02
*** Platform: STM32F303xC Analog & DSP
*** Test Board: STMicroelectronics STM32F3-Discovery
----------------------------------------------------------------------------
--- Test Case 1.1 (System Tick Counter functionality)
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 1.2 (Thread Sleep functionality)
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 2.1 (semaphore primitives, no state change)
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 2.2 (semaphore primitives, with state change)
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 2.3 (semaphores timeout)
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 2.4 (suspend and resume functionality)
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 2.5 (events functionality)
--- Result: SUCCESS
----------------------------------------------------------------------------
Final result: SUCCESS

View File

@ -1,12 +0,0 @@
--- Module: ..\..\..\os\common\ports\ARMCMx\compilers\GCC\crt1.c (C)
--- Module: ..\..\..\os\common\ports\ARMCMx\compilers\GCC\vectors.c (C)
--- Module: ..\..\..\os\nil\src\nil.c (C)
--- Module: ..\..\..\os\nil\ports\ARMCMx\nilcore.c (C)
--- Module: ..\..\..\os\nil\ports\ARMCMx\nilcore_v7m.c (C)
--- Module: main.c (C)

View File

@ -1,870 +0,0 @@
%!PS-Adobe-3.0 EPSF-3.0
%%Creator: cairo 1.8.8 (http://cairographics.org)
%%CreationDate: Mon Aug 30 12:09:46 2010
%%Pages: 1
%%BoundingBox: 0 0 196 229
%%DocumentData: Clean7Bit
%%LanguageLevel: 2
%%EndComments
%%BeginProlog
/cairo_eps_state save def
/dict_count countdictstack def
/op_count count 1 sub def
userdict begin
/q { gsave } bind def
/Q { grestore } bind def
/cm { 6 array astore concat } bind def
/w { setlinewidth } bind def
/J { setlinecap } bind def
/j { setlinejoin } bind def
/M { setmiterlimit } bind def
/d { setdash } bind def
/m { moveto } bind def
/l { lineto } bind def
/c { curveto } bind def
/h { closepath } bind def
/re { exch dup neg 3 1 roll 5 3 roll moveto 0 rlineto
0 exch rlineto 0 rlineto closepath } bind def
/S { stroke } bind def
/f { fill } bind def
/f* { eofill } bind def
/B { fill stroke } bind def
/B* { eofill stroke } bind def
/n { newpath } bind def
/W { clip } bind def
/W* { eoclip } bind def
/BT { } bind def
/ET { } bind def
/pdfmark where { pop globaldict /?pdfmark /exec load put }
{ globaldict begin /?pdfmark /pop load def /pdfmark
/cleartomark load def end } ifelse
/BDC { mark 3 1 roll /BDC pdfmark } bind def
/EMC { mark /EMC pdfmark } bind def
/cairo_store_point { /cairo_point_y exch def /cairo_point_x exch def } def
/Tj { show currentpoint cairo_store_point } bind def
/TJ {
{
dup
type /stringtype eq
{ show } { -0.001 mul 0 cairo_font_matrix dtransform rmoveto } ifelse
} forall
currentpoint cairo_store_point
} bind def
/cairo_selectfont { cairo_font_matrix aload pop pop pop 0 0 6 array astore
cairo_font exch selectfont cairo_point_x cairo_point_y moveto } bind def
/Tf { pop /cairo_font exch def /cairo_font_matrix where
{ pop cairo_selectfont } if } bind def
/Td { matrix translate cairo_font_matrix matrix concatmatrix dup
/cairo_font_matrix exch def dup 4 get exch 5 get cairo_store_point
/cairo_font where { pop cairo_selectfont } if } bind def
/Tm { 2 copy 8 2 roll 6 array astore /cairo_font_matrix exch def
cairo_store_point /cairo_font where { pop cairo_selectfont } if } bind def
/g { setgray } bind def
/rg { setrgbcolor } bind def
/d1 { setcachedevice } bind def
%%EndProlog
11 dict begin
/FontType 42 def
/FontName /f-0-0 def
/PaintType 0 def
/FontMatrix [ 1 0 0 1 0 0 ] def
/FontBBox [ 0 0 0 0 ] def
/Encoding 256 array def
0 1 255 { Encoding exch /.notdef put } for
Encoding 1 /uni0057 put
Encoding 2 /uni006F put
Encoding 3 /uni0072 put
Encoding 4 /uni006B put
Encoding 5 /uni0073 put
Encoding 6 /uni0070 put
Encoding 7 /uni0061 put
Encoding 8 /uni0063 put
Encoding 9 /uni0065 put
Encoding 10 /uni0020 put
Encoding 11 /uni0062 put
Encoding 12 /uni0074 put
Encoding 13 /uni0054 put
Encoding 14 /uni0068 put
Encoding 15 /uni0064 put
Encoding 16 /uni0053 put
Encoding 17 /uni0075 put
Encoding 18 /uni0069 put
Encoding 19 /uni006E put
Encoding 20 /uni0078 put
Encoding 21 /uni0050 put
Encoding 22 /uni004C put
Encoding 23 /uni006C put
Encoding 24 /uni0067 put
Encoding 25 /uni0028 put
Encoding 26 /uni0029 put
Encoding 27 /uni006D put
Encoding 28 /uni0049 put
Encoding 29 /uni004E put
Encoding 30 /uni005F put
Encoding 31 /uni0052 put
Encoding 32 /uni0045 put
Encoding 33 /uni0051 put
Encoding 34 /uni0055 put
Encoding 35 /uni0044 put
Encoding 36 /uni0041 put
Encoding 37 /uni0043 put
Encoding 38 /uni004B put
/CharStrings 39 dict dup begin
/.notdef 0 def
/uni0057 1 def
/uni006F 2 def
/uni0072 3 def
/uni006B 4 def
/uni0073 5 def
/uni0070 6 def
/uni0061 7 def
/uni0063 8 def
/uni0065 9 def
/uni0020 10 def
/uni0062 11 def
/uni0074 12 def
/uni0054 13 def
/uni0068 14 def
/uni0064 15 def
/uni0053 16 def
/uni0075 17 def
/uni0069 18 def
/uni006E 19 def
/uni0078 20 def
/uni0050 21 def
/uni004C 22 def
/uni006C 23 def
/uni0067 24 def
/uni0028 25 def
/uni0029 26 def
/uni006D 27 def
/uni0049 28 def
/uni004E 29 def
/uni005F 30 def
/uni0052 31 def
/uni0045 32 def
/uni0051 33 def
/uni0055 34 def
/uni0044 35 def
/uni0041 36 def
/uni0043 37 def
/uni004B 38 def
end readonly def
/sfnts [
<00010000000a008000030020636d617001a2f26900003bb40000008c63767420962ad2760000
3c40000006306670676dcc79599a000042700000066e676c79668bebc785000000ac00003b08
68656164ce982692000048e0000000366868656112330c9c0000491800000024686d7478ae81
10400000493c0000009c6c6f63610004d82c000049d8000000a06d61787004e40ca800004a78
000000207072657052fec4e900004a9800000aff000201000000050005000003000700002111
21112521112101000400fc2003c0fc400500fb002004c0000000000100190000077605ba0018
01db402629002611291226183900361139123618490047114912471858005711581257181098
08980f02b10602435458403310011a192b153405340c4405440c4b155405540c5b156405640c
6b157405740c7b150f05150c030001120800080f0208020102003f3f3f3f3f111217395d0111
1239391b401e030405050206070808050a0b0c0c090d0e0f0f0c14131212151617181815b8ff
3cb305001820b8ff3cb30c121120b8ff3c405a15080920000502022001001401010018050808
1e151814151518120c09091e151214151512110c0f0f2010111410101112090c081815050f11
100c000205150c050318100f0f0909080802020102181212111100081a17171a104109015100
20000c015100150151004000050151b620200101011919b8018bb1a8182b4e10f45d1a194dfd
1a18fdfd1a19fd184e456544e6003f3c103c103c3f3c103c103c103c103c1217390112393911
12393911123939113939874d2e2b877dc4872e182b877dc4872e182b877dc4872e182b877dc4
2b2b2b870e10c4c4870e103cc4870e10c4c4870e10c4c4870e10c4c4870e10c4c4014bb00f53
4bb011515a58b2120a18b8fff6383859014bb025534bb02a515a58b90000ffc03859004bb00b
534bb00e515a58b30c40054038385959313001725d2101331316173637013313121736371333
0123012627060701019efe7bc7df241a380a0117ead24f231c2de6c3fe6ebbfecb27071714fe
c905bafc3f9795eb2403defd1afeecf38bb403aefa46045d8c206547fba3000000020044ffe8
0427043e000d0019016bb615180d0d065513b8ffe8b40d0d06550fb8ffe840730d0d06551918
0d0d065512070a190c4706480856065908670669080834103a123a16351845104b124b164518
5c055c0952105d125d1652186d056d0964106d126d1664187701150906050d5b035405540a5b
0c6c036505650a6c0c0a171c0407111c0b0b14241b400d0d02551b400b0b025507b8ffea4011
0f0f025507180d0d025507100b0b025507b8fff0b40b0b065507b8fff0b40d0d065507b8fff0
b40f0f065507b8fff0b40c0c065507b8ffc04013242534300701000710072007030731df1b01
1bb8ffc040491e2334301b011b0e24000c0e0f025500120d0d0255000c0c0c0255001c0b0b02
55000e0b0b0655000e0d0d0655000c1010065500160c0c065500402425341f003f000200311a
3437182b10f65d2b2b2b2b2b2b2b2b2bed10712b5df65d5d2b2b2b2b2b2b2b2b2b2bed003fed
3fed313001715d0071435c584009530553096205620904015d59002b2b2b2b13103736333200
1514060623220013141633323635342623220644a489c5db01167beb8bdffeedb9b28786b2b3
8587b2021301278e76fee1fdcdeb82011e010dcccbccd1c5cbca000000010085000002c6043e
001100c9403b2f1301100401230434044304530466047404060911080908090d1311090d0003
08010b1c06070106000a0928900801082220130113022211250100b8ffc04010333634f00001
00002000d000e0000400b8fff8b41010025500b8fff840110e0e025500040c0c025500060b0b
025500b8fffcb41010065500b8fff440160f0f065500060c0c065500080d0d0655004e1247c4
182b10f62b2b2b2b2b2b2b2b5d712b3cfde4105df472e4003f3f3fed11393911393901111239
390010c9870e7dc43130005d72015d33113315363633321707262322060706151185a23e693f
5b5e3e42423b5e141e0426a171483aa727473f6072fdd400000000010088000003f805ba000b
0261401b060c0d0d0655070656065a09030f0df305f60603090c1010025506b8fff4b40c0c02
550ab8fff4b40c0c025509b8fff4b40c0c025503b8ffe840100d0d06555503770a0212062013
213408b8fff0b312273409b8fff0b41227341205b8fff0b312213409b8fff040841227340604
04050406370947040525062d0a580a7703750ada03e30607a60601230626072508390638093f
0d4f0d59045906580759097d0479059909c606d204d606e406e907f706f90815120a0a050303
04020606070909080a0a050908082507061407070603040425050a1405050a0a090603040801
02000405060708080b0b000a04b8010f400905040c0c0655052208b8010f402120073f070207
100c0c0655071a900d010d0b2500022501019000013f004f000200b8fffe40310e0e02550010
0d0d025500100c0c0255000a0b0b025500120b0b065500120c0c065500080d0d065500190c0d
e1214766182b2b4ef42b2b2b2b2b2b2b5d713c4d10ed10ed4e1071f62b5d4dedf42bed003f3c
103c103c3f3c3f3c11173987052e2b047d10c487052e182b0e7d10c40710083c083c0310083c
083cb10602435458400d4b09011f0984030209180d1134002b5d7159313001435c58400a092c
1d3909081d1d3c06b8ffdeb21d3906b8ffd4b2203906b8ffd4b121392b2b2b2b2b595d00715d
0171002b2b435c58b90006ffc0b2213903b8ffc0b2163903b8ffdeb2103906b8ffdeb2103903
b8ffdeb20c3903b8ffdeb10b392b2b2b2b2b2b59012b2b2b435c584012dd0401081416390908
14143c090814143c06b8fff6b2183906b8ffecb11b392b2b2b2b2b015d59005d2b2b2b2b2b01
5d712b33113311013301012301071188b401aae9fe6a01bfdefea17f05bafcbc01b0fe76fd64
021f7afe5b000001003fffe803b1043e00300317407b042214223a094a094424562265227c09
8e098424a613ab2cc2030d09171a1817304b2cd617051b025502021032010a185c085c095c0a
5c0b5c0c5c0d6a086a096a0a6a0b6a0c6a0db426b4270f27262427242936245a0a590b642664
28742374248024930a9c0c9228972c9530a40aa90ca327a428b326c5261628b8fff4b40d0d06
5522b8fff4b40d0d065523b8fff4b40d0d065524b8fff4b40d0d065528b8fff4b40c0c065522
b8fff4b40c0c065523b8fff4b40c0c065524b8fff4b40c0c06551db8ffde40121e395a082725
0c0a041a202615040b2e1d1ab802aa4022192c0b0b02551f193f194f195f19af19cf19060f19
1f196f19df19041f198f190219bd02550015000002aa0001ffc040140b0b0255100140010210
01d00102000110010201b8ffc0b314163401b8ffc040100e113401012e5c1d6c1d021d1c1507
04b8fff4b40b0b025504b8ffe6b41010065504b8ffe640130f0f0655041c2e0b1f1a011a2419
4013183432b8ffc0402f0f0f025519180f0f025519180d0d025519160c0c0255192010100655
19200f0f065519100c0c065519160d0d065519b8025bb207242ab8ffc0b51c39d02a012ab8ff
e6b40c0c02552ab8ffe8b40f0f02552ab8ffe8b40c0c06552ab8ffeab60d0d06552a1a32b8ff
c04021272a346032c032023f3280320232100101012400180d0d025500100d0d06550020b8ff
f4b40d0d025520b8fff4b41010065520b8fff440190f0f065520240f100b0b02550f160c0c02
550f200d0d02550fb8fffa40200f0f02550f0e0c0c06550f0c0d0d06550f22df00013f004f00
020019313437182b4e10f45d714df42b2b2b2b2b2bed2b2b2b102b2bed724e105d712bf62b2b
2b2b712b4dedf42b2b2b2b2b2b2b2b2bed72003fed2b2b2b3fed7112392f2b2b5d71722be410
fd5d71722be41112391112390111121739313043794040272d1e2305142c2611101210131003
06220d201b000928071b01052d071b011e14201b00210e231b0022230d0c08290a1b01282709
0a062b041b001f101d1b01002b2b103c103c2b103c103c2b012b2b2b2b2a2b818181002b2b2b
2b2b2b2b2b2b5d71015d72715d1337161633323635342726272e023534363736363332161617
072626232206151417161716171e02151406062322263fb20f897b7c78352593c6994f41382a
91537dbd5a11b00c73697c6a16162f1b84bf975669c67dcfd9013d1c6b7265443d2318253249
814e4779281f2b487b6718525c5237231c1d130a2433417c5c5a9f57ac0000020087fe690421
043e0012001e0162408e0c102d103d104b10043f20b020021f20290c231d3215321d421d7020
9020083a173a1b4a174a1b59085b0c5c175c1b6a086b0c69106d176b1bc020d314dd18dd1ad3
1ee414e41ee020ff201623042b102b1535043a1046044a105a10e50beb1dfe100b110e03161c
1c06070106161c0e0b000e1924d00a01100a400a600a800a0420400b0b025520400d0d02550a
b8ffe6400b0f0f02550a180d0d02550ab8fffab40c0c02550ab8ffeeb40b0b06550ab8fff4b4
0f0f06550ab8ffe840230c0c06550a74011333023312250000c001019001a001b001f001041f
013f014f010301b8fffc401d0e0e025501100d0d025501100c0c025501100b0b0255010c0b0b
065501b8fff6b41010065501b8fffc40160f0f0655010c0c0c065501120d0d065501191f4737
18012b4e10f42b2b2b2b2b2b2b2b2b5d71723c4d10fdf4e410fd2b2b2b2b2b2b2b2b5d71ed00
3f3fed3f3fed113912393130005d015d71720071131133153636333216161514020623222627
1103141633323635342623220687a43a926888d06a75df7b5a8f2e11a67678aba77473b1fe69
05bd8a51518cff98a3fefb8b4c3afdfb03a4cdc4cbd5cbcad7000002004affe8041c043e0028
0037022d402c090d092a190d1a2a290d2a2a390d3615371b3a2a492a5d0d5d2a6a0d692a6030
8a0d86299a169b1aa90d1528b8ffe8b40b0b065527b8ffe840190b0b0655a619aa28b619bb28
c419cf28d215dd28084416011eb8fff440110c0c065512120c0c0655050c0c0c065535b8ffe0
40550c0c06551f171f182b2c2a343904392c4904482c5608592b6608692b760c870cc90cf90d
f92b1137340e0104102f243417322114185f296f2902291c2f0e3f0e8f0e9f0eff0e059f0eaf
0eef0e030e0c0f0f02550eb8ffeab4101002550eb8fff44015101006550e0c0d0d06550e060f
0f06550e0e1c0317b802aab61895141c1c0700b8fff4401a0c0c06550045270a321c030b2961
106100060d0d025500252124b8ffecb41010025524b8ffec400b0d0d025524040c0c025524b8
ffe4b40b0b025524b8fff4b40b0b065524b8ffdc400b1010065524060f0f065524b8fffcb40c
0c065524b8025b400e27400026102620263026af260539b8ffc0b40e0e025526b8ffd6b60e0e
0255263139b8ffc0400d1e23343039c03902a039013917b8fff4404110100655172518222f24
bf06cf06021f063f0602060e0f0f0255060c0d0d025506180c0c0255060c0b0b0255060c0b0b
0655060e0d0d065506100c0c065506313810f62b2b2b2b2b2b2b5d71edf4ed2b105d712bf62b
2b5dedf42b2b2b2b2b2b2b2b3cfd2be5e5003fed3fe42b3fedfde41112392f2b2b2b2b2b5d71
ed711112391112393901111217393130005d2b2b2b2b01715d2b2b0071250606232226353436
363736373637363534272623220607273e02333216161716151514161723260306070e021514
16333236373635033c64b96aafbc477348356bda67013345887f791db0186ed08988aa501009
1722bc1c1762c46f5c326d6968a2261d835546ab854e814e140e0d1a24250a6e2d3d59711871
8b4b40614a2e78f0fb853d3801dd281c10284d2f48605b4f3d77000000010050ffe803ed043e
001a015ab1020243545840340e7f0f010f0b01400050007000030004121c0b07181c040b010e
1507080e0e0255070c0d0d0255070c0c0c025507100b0b0255072f2b2b2b2bcdd4c6003fed3f
ed10c45d3210c45d3231301b4047090c011f1c4313431753135317601360179b029b039a0da4
10a41a0c080d190a6a0269036a05750c700d800da60cb509b60ab50c0c160c860ce302030e22
5f0f6f0f7f0f030f01b802aa4079300040005000600070009000a000e000f00009000f0f0b00
0004121c0b07181c040b1c0f010f240e080d0d06550e221b000100240b2b1f01010001010140
0b0b065501401010065501480c0c0655011a0d0d065501491c1524cf07011f073f0702070e0b
0b0655070a1010065507120c0c065507311b34c4182b10f62b2b2b5d71ed10f62b2b2b2b5d72
4b53234b515a58b90001ffc03859ed72f42bed72003fed3fed12392f11392f105de4105de431
30005d71015d7159011706062322001134123633321617072626232206151416333236033cb1
1defaedafef772e989addc1faf197f5a88aaa4846a8e018517b7cf011d010aac010281afa11b
6b6cc3d3d6c282000002004bffe8041e043e0015001d015340171f001c150255035d055d0955
0b65036b056f09650b0815b8ffe4b40d0d065511b8ffe440520d0d06551d1c0d0d06552712d9
05fa14f61a0431123a19311c41124d1a411c51125c19521c61126d1a611c78067815f602f618
100016010f0d171750166016701603161c0f9010a010021010041b1c0a0700ba02aa0001ffc0
b41010025501b8ffc04010101006551001010195131c040b17400db8ffdcb40d0d02550db8ff
eeb40d0d06550db8ffeab40c0c06550db8ffc04009272a34b00d010d1a1fb8ffc0b32526341f
b8ffc040411e2334301f011f163310240740242a341f073f074f070307200b0b025507180c0c
0255071c0d0d0255070e0b0b0655071c0c0c065507160d0d065507191e3437182b4e10f42b2b
2b2b2b2b5d2b4dfde44e10712b2bf6712b2b2b2b4ded003fedfd5d2b2be43fed12392f5d3cfd
713c011112393912393130015d005d2b2b2b0171720117060623220011100033320011140721
16163332360121262726232206035eba2ceeb9e9feef0114dcd5010e01fce80ab285638cfdda
02510c3856897ca9015617a3b4011f0103010c0128fedefef91020afba680195864368a60000
00020086ffe8041f05ba0010001d0180409b01050c0f240535054505053f1fb01f021f1f221c
331c421c701f901f063a133c163c1a4c164c1a5d085d0d580f5d165e1a6a086c0d680f6e166e
1ac01fd90cda17da19e213ec17ec19e31de01fff1f1920052f0f2f1430053f0f40054c0f5005
6605da1df504fa100c10150e040602001b1c0607010a151c0e0b1824d00b01100b400b600b80
0b041f400d0d02550b0c0f0f02550b180d0d02550bb8fff6b40c0c02550bb8fff0b40b0b0655
0bb8fff4b40f0f06550bb8ffe0b40c0c06550bb8fff4402f0d0d06550b7401113300040c0c02
5500040d0d0655003303250202c001019001a001b001f001041f013f014f010301b8fffeb410
10025501b8fffc401d0e0e0255010c0d0d025501100c0c025501120b0b0255010c0b0b065501
b8fff8b41010065501b8fffc40160f0f065501180c0c065501140d0d065501191e4737182b4e
10f42b2b2b2b2b2b2b2b2b2b5d71723c4d10fdf42b2be410fd2b2b2b2b2b2b2b2b5d71ed003f
ed3f3fed3f11391112393130005d015d7172007121231133113633321e021510002322270314
1716333236353426232206012da7b472b162af7140fef2bdbc6b0234559176aca57576ac05ba
fdf58f4f8fca73feeffed69d0196bf558bcdcbd0c6cd000000010024fff2022a0599001700d8
b9000affc0b323263409b8ffc0404123263480190100010c0d0a0103001610092b0f0a06161c
030b0f10220022010d12250c01ff070845094560077007800790070400072007a007b007c007
d0070607b8ffeeb41010025507b8fff4b40f0f025507b8fff2b40e0e025507b8fff8b40d0d02
5507b8fff8b40c0c025507b8fffab41010065507b8fff0400b0f0f065507060c0c065507b8ff
e8b40d0d065507ba026a00180136b166182b10f62b2b2b2b2b2b2b2b2b5d71f4e410ed3cfd3c
10e4f43c003fed3f3cfd3c1139123911333310c93130015d2b2b251706232226263511233533
11371133152311141616333202101a4c3c626c2c8484b3b5b5132b281ea19f103e65a202638c
01076cfe8d8cfd934d2c1a0000010030000004ba05ba00070089400d05021e04030200080706
050409b80273b320040104b80101b7062001022f030103b80101b5010120000100b8ffe8400b
1010025500080f0f025500b8fff2b40c0c025500b8ffe2b40d0d025500b8fffcb40c0c065500
b8fffeb40d0d065500b80273b308b699182b10f62b2b2b2b2b2b5d3c10f45d3c10fde45de610
3c103c003f3f3cfd3c313021112135211521110213fe1d048afe1b050dadadfaf30000000001
0087000003e805ba00140161b90016ffc0b315173403b8ffe0400e0d0d0655250435034503ba
0d0403b8ffe0403a1719341708110c1114030501000f1c0507140b0a0c250940333634ff0901
c0090116400b0b025516401010025509281010025509140e0e025509b8ffec40110d0d025509
040c0c0255091a0b0b025509b8fff6400b0b0b065509141010065509b8fff8400b0d0d065509
0a0f0f065509b8fff6b60c0c0655094e16b8ffc04017343634b016f016027016a016b016ff16
04160214250100b8ffc04010333634f0000100002000d000e0000400b8fffab41010025500b8
fffa40170e0e025500040c0c025500080b0b025500040b0b065500b8fffa40160f0f06550002
0c0c065500020d0d0655004e154750182b10f62b2b2b2b2b2b2b2b5d712b3cfd3c105d712bf4
2b2b2b2b2b2b2b2b2b2b2b2b5d712bed003f3c3fed3f1139113901123931304379400e060e07
250e060c1b010d080f1b01002b012b2b81002b5d2b012b331133113633321616151123113426
23220606151187b47ec076ae4bb4756b508d3c05bafdf2925da49cfd5f02a1877b538e7dfdbb
00020046ffe803df05ba0011001d015540a40a02040d250d340d440d053514351c5702540a52
14531c6702640565096314601cc01fd405d513dd19e513e514ef17eb19e51de01fff1f161f1f
2b1a3c163c1a4b1a701f901f072e02240d2e163a02350d4b02450d4614491c570a560d670de5
06e716fa01f40e100115030e0b100f001b1c0b0711000a151c030b1833010025110f251010d0
11011011401160118011041f400b0b02551f400d0d025511121010025511b8fff440110f0f02
5511060e0e025511180d0d025511b8fff2400b0b0b0655110e1010065511b8ffeeb40c0c0655
11b8fff840420d0d065511741224bf07cf07df07ff07041f073f074f0703071e0b0b02550718
0c0c0255071e0d0d0255070c0b0b0655070c0d0d0655071a0c0c065507191e3450182b4e10f4
2b2b2b2b2b2b5d714dedfd2b2b2b2b2b2b2b2b2b2b5d713c10ed10fd3ce4003fed3f3c3fed3f
3c11391112393130005d01715d00712135062322262635341236333216171133110114163332
36353426232206033865c47fd5756ad48360962fb3fd20ac7576a5a87b78a1869e8cfba39f01
038a5141020efa460212cccac1c6daccc4000001005cffe704eb05d300300215402763036304
730374040425273503391c430349074c1d451f44244627530359075c1d572889130e23b8fff2
b41010025524b8fff2b41010025525b8fff2b41010025526b8fff2b41010025527b8fff2b410
10025523b8fff6b40d10025524b8fff6b40d10025525b8fff6b40d10025526b8fff6b40d1002
5527b8fff640460d100255280d26240224032725360f34234425452f5a20562355256c0b6a0d
6b0e66146518790b7a0d7a0f7d107524732586038a0b890d8a0f8d1085248325920d960f9615
1eb10602435458402d2126121b261a09262901260000291a120432312600650002000d2d791b
891b021b25160d2d1e27250125051605b8fff4400c0c0c0655051e2d091e1e1603003fed3fed
2b1112395d1112391112395d1112395d01111217392fed2fed2fed2fed1b402d25240e0d0b05
211c1d1e1b08070604030206012524220e0d0b06051e1b2d1a400c0c02558f1a011aed16002d
01b8ffc040120c0c02551001200150016001700190010601b801b040132d1e1e1603051e2d09
1b261a4a092600290129b8ffeab40e0e025529b8fff4400d0c0c0255291a32212612012612b8
ffecb40e0e025512b8fff6b40d0d025512b8fff8400f0c0c02551254200001001931635b182b
4e10f45d4de42b2b2bed10ed4e10f62b2b5d4dedf4ed003fed3fed10fd5d2be410fd5d2bf411
1217391117391112393901121739593130005d712b2b2b2b2b2b2b2b2b2b015d7113371e0233
3236363534262726242726263534363633321616170726262322061514171604171616151406
06232224265cb70d5fc87d6faa53505c3bfe6c5169677ef294a3f98605ba0fada9b0a1393801
d958807a86fb9dc7fef39901d7106e8d5742734445672317612b37a3656fc16469cc810e8b8e
815b4f33336b283bb57675cf7374e900000000010083ffe803e004260018014fb9001affc040
0915173402201316340fb8fff040331214342b1301240813160c0113160b06000a111c030b00
3316251817403336341a401010025517281010025517120e0e025517b8ffec400b0d0d025517
040c0c025517b8fff4400b0b0b065517141010065517b8fff8400b0d0d0655170c0f0f065517
b8fff6400d0c0c0655ff1701c01701174e1ab8ffc04015343634b01af01a02701aa01ab01aff
1a041a0c2509b8ffc04010333634f0090100092009d009e0090409b8fff8b41010025509b8ff
f840110e0e025509040c0c0255090a0b0b065509b8fff640160f0f065509020c0c065509020d
0d0655094e194750182b10f62b2b2b2b2b2b2b5d712bed105d712bf65d712b2b2b2b2b2b2b2b
2b2b2b3cfde4003fed3f3f3c39390111123931304379401a04100e0d0f0d0206070806080508
030610040c1b000d08111b00002b012b2a2a81005d012b2b2b21350623222626272635113311
141716163332363635113311033f7cd55ea34f100bb40b116e51518e3bb49cb4486d4f357302
92fdb38d314751538f880239fbda0000000200880000013c05ba0003000700cd405e09360b0b
02554f099009a009b009c009df09f0090700091f09700980099f09b009c009df09e009ff090a
1f09010001070402030906037e0100060506040a0607250500049f04a004b004c004e00406c0
04f0040200042004d004e0040404b8fff8b41010025504b8fffa40170e0e025504040c0c0255
040a0b0b025504140b0b065504b8ffeab41010065504b8fffeb40d0d065504b8fffc400a0c0c
0655044e084750182b10f62b2b2b2b2b2b2b2b5d71723cfd3c003f3f3c3fed01111239391112
39393130015d72712b133533150311331188b4b4b404ebcfcffb150426fbda00000100870000
03e6043e0016017d40130503061302a810b810e303e713f003f6130604b8fff0403c0b0d3479
10019810d018e018ff18042008140e1416121c05070106160d0a0d0e0c0e2418401010025518
400b0b02550b28101002550b140e0e02550bb8ffec40110d0d02550b040c0c02550b220b0b02
550bb8fff4400b0b0b06550b14101006550bb8fff9400b0d0d06550b0a0f0f06550bb8fff640
120c0c06550b40333634ff0b01ff0b010b4e18b8ffc0401a343634b018f018027018a018b018
c01804180302331516250100b8fff6b41111025500b8fffab41010025500b8fffa40170e0e02
5500040c0c0255000a0b0b025500040b0b065500b8fffa40110f0f065500020c0c065500040d
0d065500b8ffc04012333634f0000100002000d000e00004004e1710f65d712b2b2b2b2b2b2b
2b2b2b3cfd3cf43c105d712bf65d712b2b2b2b2b2b2b2b2b2b2b2b2bed3c103c003f3c3f3fed
11390112393130437940160611090a080a070a0306102611060e1b010f0a121b01002b012b2b
2a81015d71002b5d71331133153633321616171615112311342626232206151187a275dd60a1
50100ab42a6b4873a7042697af45704d327dfd7302866e6d4192ccfdbc0000000001000f0000
03f10426001001dcb1020243545840150f010b060402090602060d0a000a0f180f0f02550f2f
2b003f3f3f3f11173931301bb70f12010f22193906b8ffde405019395a0f96049608990e9a0f
c005c006c007cb0f090f4016391a031309150d1a1035013a0b81018e0b082f1257045907590b
580e9701980a980bb702b80cc80bca0ecc10da03d509d10ddb10e50a1212b10602435458400b
0c0012110f180d10065506b8ffe8400e0d1006550f0600020d000a0a0206003f3c3f3c111239
392b2b01111239391b40660606030708090901060609050403030b0f0f100e0d0d010f0f0d10
0b010009020d0b030c100a060f020f0a10c600c60902102500091400000903020dc60d010d25
0c03140c0c030a090903030206100d0d0c0c000a4f120112490d7e0c220a0f6106097e400ab8
011bb74006500680060306b80243400e20037e02224f00010049117cc4182b10f65df4ed1a19
fd5dfd1a18ed10e510f4ede65d003f3c103c103c3f3c103c103c87052e2b5d877dc4872e182b
5d7d10c400111239390f0f8708c4870e10c408c4870e10c4c408c4070e103c3c083c59313001
435c58b40e181d390bb8ffde400b1d390c221739032217390bb8ffdeb2213910b8ffc0400a15
390122213909401c392b2b2b2b2b2b2b2b595d71002b5d2b2b015d5933010133171617363737
330101230327010f0184fe99e1a32e1c2c25b3d7fe91018bddda3afee9022801fef947304233
fbfe0cfdce014a59fe5d0002009e000004fd05ba000d001800b2402c65116b14024b104b145b
105b14040b0c1e0f0e0e0017181e02010200081226080a0d0d025508100b0b065508b8fff440
1b0c0c0655081a201a01201a011a180d200120000100201010025500b8fff6b40f0f025500b8
fff6b40d0d025500b8fffa400b0c0c0255000c0b0b065500b8fffab40c0c065500b8fff0400a
0d0d0655005d193b5c182b10f62b2b2b2b2b2b2b5d3cfd3c4e10715df62b2b2b4ded003f3f3c
fd3c12392f3cfd3c3130015d005d33112132171e021514022121111121323635342627262321
9e0229924d6c9259eefec9fe88017bbc9e5d4c3184fe8905ba0e1265b66dbbfefdfdac03018c
7f5c83150d000000000100960000042a05ba0005006d400c010204031e05000820040104b802
a7400f070203200120000100201010025500b8fff6b40f0f025500b8fff6b40d0d025500b8ff
fab40c0c025500b8fff6b40c0c065500b8fff8400a0d0d0655005d063b5c182b10f62b2b2b2b
2b2b5d3cfd3c10e65d003f3cfd3c3f313033113311211596c202d205bafaf3ad000000010083
0000013705ba000300e3b605360b0b025505b8ffc0b337383405b8ffc0b334353405b8ffc0b3
30313405b8ffc0b322253405b8ffc040251517340f051f059f05df05044f05df05f005031f05
70058005ff05040100000a0203250100b8ffc0b337383400b8ffc040153335349f0001c000f0
000200002000d000e0000400b8fff8b41010025500b8fffa401d0e0e025500040c0c0255000a
0b0b025500140b0b065500081010065500b8fffeb40d0d065500b8ffffb40c0c065500b8fffc
400a0c0c0655004e044750182b10f62b2b2b2b2b2b2b2b2b5d71722b2b3cfd3c003f3f313001
5d71722b2b2b2b2b2b3311331183b405bafa460000020042fe5103ea043e001e002a016f4060
0b0b05142c0b25144c0b451406091d191d2c0b26142c23390b36144a0b46145607580b680bfa
0af5150e2e232c273e233e274c27902ca02c07362136293f2c460b4621452954215429690763
216329602c802cda27e821ee23ef271117160615b802b1b4281c130701b802aa401020003000
600070008000c000d0000700b8027d4032051c1c0f0a45221c0c0a16153325330a251818d017
011017401760178017042c400b0c02552c400d0d025517121010025517b8fff440110f0f0255
17060e0e025517160d0d025517b8ffea400b0b0b065517121010065517b8ffeeb40c0c065517
b8fffc404a0d0d065517740f012500221f24bf0fcf0fdf0fff0f041f0f3f0f4f0f030f200b0b
02550f1a0c0c02550f220d0d02550f1c0b0b06550f0c0d0d06550f1a0c0c06550f192b2c7421
3450182b2b4ef42b2b2b2b2b2b5d714dedf4ed10fd2b2b2b2b2b2b2b2b2b2b5d713c10fde4f6
3c003fede43fedfd5de43fede43f3c3130015d71005d71171716171633323637362706232202
3534123633321735331114060623222613141633323635342623220666af0b3243747d88180e
0176b0dbf06ed18dbc7aa665dba0beea99a67d7ca8ad7a78a8581a512532645a37b08b013cdd
9801018c9880fc6af8cf78ab032ad1c0bfccc3c6c3000001007cfe51026005d30010003d400a
270f0100101207081010b80133b3009f0e08b801334011079f0e5e0003100320030303ac119d
8c182b10f65dfdf6ed10f6ed003f3c3f3c3130015d0126021134373637330607060706151001
01df95ce4d5abc8179273d232b012bfe51bc01f8010eeedafdfbd0598a96bbbdfe1ffe200001
007cfe51026005d300100065400c2802281002090a1001001209b80133b30a9f0301b80133b4
009f035e0eb8fff0b4101002550eb8fff8b40f0f02550eb8ffe4b40d0d02550eb8ffec400f0a
0a02550f0e1f0e020eac129d8c182b10f65d2b2b2b2bfdf6ed10f6ed003f3c3f3c3130015d13
23001134272627262733161716151002fd81012b2b223d277a81bc5a4dcffe5101e001e1bcb9
968a5ad2fbfddaeefef2fe0800000001008700000626043e002301c7b9000dfff4b40d0d0655
08b8fff4b40d0d065509b8ffd8404d0b0d342504e404e409e117e52005d505f6200217082023
09181b20090303231e1c06151c0b0b06070106231a19100ad025019025a025022517171a0e25
90110111041010025511180f0f025511b8ffec400b0e0e025511140c0c025511b8ffe840170b
0b025511020b0b0655110c1010065511060f0f065511b8fffab40c0c065511b8fff8b40d0d06
5511b8015d400c1825901b011b180f0f02551bb8ffec400b0e0e02551b140c0c02551bb8ffee
40110b0b02551b040b0b06551b0a101006551bb8fffe400b0d0d06551b0c0f0f06551bb8fffc
b40c0c06551bb8015d4016000233232501d000019000a000021f003f004f000300b8fffe401d
0e0e025500100d0d025500100c0c0255000c0b0b025500160b0b065500b8fffcb41010065500
b8fff440140f0f0655000a0c0c0655000e0d0d065500192425b80178b3214750182b2b4ef42b
2b2b2b2b2b2b2b2b5d71723c4dfde410f42b2b2b2b2b2b2b2b2b5dedf42b2b2b2b2b2b2b2b2b
2b5dfd4e456544e67172003f3c3c3c3f3f3c4d10ed10ed11173901111239123931304379400e
0c141326140c111b01120d151b01002b012b2b81015d005d2b2b2b3311331536363332161736
3332161511231134262623220615112311342623220606151187a132a66a76971f7eca9eaab3
235c3e7094b458644c813a0426954e5f6258baafb6fd27029d6c5f3a95a4fd9702b27878509a
91fdd900000100bf0000018105ba000300ccb5010200080205b8ffc0b3383d3405b8ffc0b333
343405b8ffc0b32d303405b8ffc0b328293405b8ffc0b323253405b8ffc0b31d1e3405b8ffc0
b3181a3405b8ffc0402a0d103420059005af050303200100008f00a000b000042f0040005000
df00f000051220008f0090000305b8ffc0400b0d0d025500181010025500b8ffecb40f0f0255
00b8ffeeb40d0d025500b8fff640100c0c025500200b0b065500a204d659182b10f62b2b2b2b
2b2b5d435c58b2800001015d5971723cfd5d2b2b2b2b2b2b2b2b3c003f3f313033113311bfc2
05bafa460001009c0000051f05ba0009017db1120bb8ffc0400a13153408180c16025503b8ff
e840210c1602550802030320070814070708020703030809040202090708040320060605b8ff
ecb40f0f025505b8fff2400b0d0d025505120c0c025505b8fff7401a0b0b0655055d200b0120
0b500b600b700b800b050b0809200100b8ffc0400d13153420000100201010025500b8fff6b4
0f0f025500b8fff6b40d0d025500b8fffa400b0c0c025500040b0b065500b8fff7b40c0c0655
00b8fff8400a0d0d0655005d0a3b59182b10f62b2b2b2b2b2b2b5d2b3cfd3c105d71f42b2b2b
2b3c10fd3c003f3c3f3c1239390111393987042e2b877dc4b10602435458b90003ffe0b70c11
3408200c1134002b2b5931302b2b012b435c58b40840463903b8ffc0b646390840323903b8ff
c0b632390722193902b8ffdeb619390722323902b8ffdeb632390722233902b8ffde400b2339
070e1439070e133902b8fff4b61339070e1d3902b8fff4b61d39070e153902b8fff8b115392b
2b2b2b2b2b2b012b2b2b2b2b2b002b2b2b2b59331133011133112301119cc70302bac7fcfe05
bafb81047ffa460480fb800000000001ffe1fe69048afeeb0003001a400c013f00021a050019
044341182b4e10e410e6002f4ded3130033521151f04a9fe69828200000200a1000005ad05ba
0018002201fc4021120b0e0112361c5a1f66086d1f0409100d0d065508100d0d065507100d0d
065524b8ffc0b40c0c02550db8fff4b40c0c02550cb8fff4b40c0c02550bb8fff4b40c0c0255
12b8ffe2b3121a3412b8fff0b322273411b8ffe2b31d273410b8ffe2b31d27340fb8ffe2b31d
273412b8ffd8b31d263411b8ffe2b3121a3410b8ffe2b3121a340fb8ffe24049121a34250e4a
1c4a20530b5c1c6d1c7209780e790f850a880f970da90fb80fe80ee70f100e0c0c20110f1411
110f110f0c09121b02211a160a061211100d0c0518090916171a191e17b8ffc040190b0b0655
17170021221e0201020018180f0f0e081e260e9c06b8ffe8b40f0f025506b8fff6b40d0d0255
06b8ffe040220c0c025506060d0d0655065d2024702480240324221820012000010020101002
5500b8fff6b40f0f025500b8fff6b40d0d025500b8fffa400b0c0c025500060b0b065500b8ff
f7b40c0c065500b8fff8400a0d0d0655005d233ba8182b4e10f42b2b2b2b2b2b2b5d3c4dfd3c
105df62b2b2b2b19e418ed003f3c103c103c3f3cfd3c12392f2bfd3c103c392f121739011117
39870e2e2b057d10c43130015d2b2b2b2b2b2b2b2b2b2b2b2b2b002b2b2b5d435c58400a0840
0f390f103a11123a2b2b2b590171435c58b9000effde401a193911221939122219390e401c39
1022143910221f39102215392b2b2b2b2b2b2b5933112132161615140607161716171323032e
02272623231111213236363534262321a1028ac4cc7acad34d28554cfff4c2556e572d214be1
01a185964e97a3fe3005ba4fc8799cd61d25244e75fe710131848c380b07fd75033337794768
8600000100a2000004e805ba000b0095401506051e080807070003041e0201020a091e0b0008
07b8ffc0401d1012340754034a200a200d020a1a0d0409200120000100201010025500b8fff6
b40f0f025500b8fff6b40d0d025500b8fffab40c0c025500b8fffab40c0c065500b8fff0400a
0d0d0655005d0c3b5b182b4e10f42b2b2b2b2b2b5d3c4dfd3c4e10f65d4df4e42b003f3cfd3c
3f3cfd3c12392f3c10fd3c3130331121152111211521112115a20424fc9e032bfcd5038405ba
adfe3facfe0dad0000020058ff8e05ee05d400150028016840955f269f260219183715020b1c
041f04231b1c141f1423062a052d172b263b053c173a264c054c1749265d05552358266f057b
037a058c038c0595009a03a400ab03d500d516e500e517e5181a1c052b002a053b05045d0592
189626d5260425162a26341639264918491c451f45234b265608581155155a1c5a1d561f5720
5722690566156b267b268e1c8e26db18dc26190b180115b8ffd4b21b3900b8ffd440381b3904
1814182a053a0504020316280307282618160500062103131a0502282618160005241e1e0f03
0208241e07091a2613180f0f025513b8ffeeb40d0d025513b8ffe8b40c0c025513b8fff0b40b
0b065513b8fff4b40d0d065513b8fff440250c0c0655134a021a202a802a022a2126200b010b
180b0b06550b060c0c06550b1929635c182b4e10f42b2b5d4ded4e105df64df42b2b2b2b2b2b
ed003fed3f3fed11173912390111123912173900113310c910c95d3130012b2b5d5d0072715d
015d717225161707262706232224023534122433320412151402251617361134022623220011
1000333237262704f58772399e9da3c5c7febcafb00145c9cb0146ab6efde6a86dab79e991d9
fee2011bdc685c5b659d5d2b87397b5bc0015cdad90164bac1fea5dab5fedf8d2f5d9c0139b2
010a93fed7fed9fee2fece273b19000100a1ffe7052205ba001400d9400a260f58045808c908
0416b8ffc0401613153434043b0846044a08760fa605e80f070c000211b802bbb40609142602
b8ffecb40f0f025502b8fff2400b0d0d025502100c0c025502b8ffe0401c0b0b0655025d2016
01201650160260167016801603160d26200a010ab8ffc0400a1315340a20101002550ab8fff6
b40f0f02550ab8fff6b40d0d02550ab8fffa400b0c0c02550a040b0b06550ab8fff7b40c0c06
550ab8fff8400a0d0d06550a5d153b59182b4e10f42b2b2b2b2b2b2b2b5ded4d105d5d71f62b
2b2b2b4ded003fed3f3c3130015d2b005d013311140204232224023511331114161633323611
0460c264fefbd4cefefa70c247ad7dd6b605bafcb1ddfefca38e010de9034ffcb2bfb562c201
14000002009e0000055a05ba000f001d00e5402f201f0143081c1d1e02010211101e0f000817
262009011f400d0d0255092010100255090a0f0f025509180d0d025509b8fff440150c0c0655
091a1f1d10200120000100201010025500b8fff6b40f0f025500b8fff6b40d0d025500b8fffa
b40c0c025500b8fff7b40c0c065500b8fff8400a0d0d0655005d1e3b5c182b10f62b2b2b2b2b
2b5d3cfd3c10f62b2b2b2b2b5ded003f3cfd3c3f3cfd3c313043794036031b07080608050804
08040619181a1802060b0a0c0a0d0a030615161416131603061b03172101120e17210118081c
2101160a1121002b2b012b2b2a2a2a2a81015d3311213217161716121514020e022325213236
373636353426272623219e01f9ab5a7e5974734e7a91cd85feb1013991a531454d976c4eadfe
cc05ba151d4c62fecfc4a7fefea96132ad363145e9a6e6f72a1e0002fffd0000055905ba0007
000e0167b6010e0f10025502b8fff2b40f10025502b8fff8b40d0d065502b8fff440590c0c06
55090c0c0c0655050c0c0c06552f10301067086809601088039010c905c606c010f0100b0805
590156025010680bb010f30cf30df30e09040c040d040e030b0a090504040c0d0e080607070c
09050408060c07010000b8fff8400f0c0c02550020070c1407070c020303b8fff840150c0c02
550320040c1404040c091e0505081e060306b80270400900080ce94002010202ba010b000101
0b40120c2000650703525004cf04df040390040104b80101400b500cc007df0c03900c010cb8
010140100f07cf07027f0780070207930fd6d7182b10f45d7119f45d71f45d7118ed10ed1a19
10eded00183f3c1aed3fe43c10ed3c10ed87052e2b2b7d10c4872e182b2b7d10c40111123939
1139398710c4c40ec4c4870510c4c40ec4c43130014bb00b534bb01e515a58b4040f030807ba
fff00000fff838383838590172715d2b2b2b2b2b2b2301330123032103132103262706070302
33d10258ddabfd9ba1d901f19946221c3305bafa4601bcfe44025a0196b9778d8b0000000001
0066ffe7057605d3001d00d3b563026a1d0201b8ffe8b40b0b065500b8ffe8405f0b0b065520
00320d63007000741d8000841d90009a05ab03a50db903b40dc70dd000e41df31d110e121d11
1d1d032a0628112a1c201f470d56145715561968056b1d7b128b129a03990e9a1ca801a402a8
11d50e130014001a1014101a0402b8ffdeb2283901b8ffc0402d2839100f0001041b131e0c03
1b1e040910260f4a0026200101011a1f1726200801080c0b0b065508191e635c182b4e10f42b
5d4ded4e10f65d4dedf4ed003fed3fed1117393130012b2b5d5d71005d2b2b01720117060423
2224023534122433320417072626232206021514121633323604b4c23dfec3e5edfed79baf01
43c2dc012c3bbf33c293a9e35c6de686a3e2020231effbc1016ed2e50155b1e0cb2da092a2fe
ef91bbfee98abc000000000100960000055205ba000b01fe401e0322373908093a270a350636
0a470a57038603d70307760ad903d90a0306b8fff440180d0d025528058c048a05aa04ea0805
0a04013504d6040209b8ffe04009122134032012213403b8ffdeb30c391209b8ffe0b3122134
08b8ffe0b312213404b8ffe0b31d213404b8ffc0b312163408b8ffde403d1939080925253d08
0919193d060607090a09080a0503040420050a1405050a090808200706140707060a0a000502
040102070b0800080a03020b010004b8023a400f300501a005b005c005e00504054a08b8023a
400b30070120078007b0070307b80286400c0b2020000100201010025500b8fff6b40f0f0255
00b8fff6b40d0d025500b8fffab40c0c025500b8fffab40c0c065500b8fff2400a0d0d065500
5d0c3ba8182b10f42b2b2b2b2b2b5dedfd5d71edf45d71ed103c103c3c3c003f3c3c3c3f3c3c
3c12392f87052e2b0e7d10c487052e182b047d10c40708103c083c014bb018534bb01b515a58
b90004ffd83859b10602435458b90004fff0b30c113403b8fff040170c113406100e11340810
0e103409100e11340a100d1034002b2b2b2b2b2b593130012b2b2b2b2b2b2b435c5840110922
1939082c1939042c193904221b3905b8ffdeb616390422163906b8ffde400b12390822143904
40143908b8ffdeb52539044015392b2b2b2b2b2b2b2b2b2b2b59002b2b2b0171725d2b00715d
2b2b33113311012101012101071196c202d80107fd990282ff00fdf6f005bafd2902d7fdaefc
9802e6eafe040000000000020003000000000014000100000000003400040020000000040004
00010000f026ffff0000f000ffff100000010000000000060058000000000027000000010002
0003000400050006000700080009000a000b000c000d000e000f001000110012001300140015
0016001700180019001a001b001c001d001e001f002000210022002300240025002605ba0019
05ba001a05a70019042600180000ffe70000ffe80000ffe7fe69ffe805ba0019fe69ffe802ea
000000b8000000b80000000000a800ad016900ad00bf00c201f0001800af00b900b400c80017
0044009c007c009400870006005a00c80089005200520005004400940119ffb4002f00a10003
00a100cd00170057007e00ba00160118ffe9007f008503d300870085000d002200410050006f
008d014cff75005c00df04830037004c006e00700180ff58ff8eff92ffa400a500b903c8fffd
000b001a0063006300cdffee05d8ffdc002d005c0095009900df019209b500400057008000b9
039d0072009a035d0401ff67fffa00030021007700cd0004004d00cd01c0022b004c006500e7
0118017c034305d8ffa3ffb0ffc40003001c005d0068009a00ba013501470221055cff4dffcd
0016002d00780080009900b200b600b600b800bd00da010c05f0ffa4fff00019002c0049007f
00b400ce01c003fefd81fe3f000000050018002900390049006f00be00c700d0012301c1026f
050c05320540057affd4001400310055005700a700b400e601f7027e027e027f03c60446ff42
000e0085009100bf00c200c500e1011a012f014f01560229026f029e03720008002c00310031
006400690089009800c700de012b01b6020c02cf03a304ab04fb061dfee0ff0e00060026009b
009d00c1010d011801200173018201d601e30243025f029b02e2039404a904d20761001c005e
006d008d00ab00f7011201380151015b0168017c01870191019901cd01d001e802410254026b
02ef0368037103bd044204420453047304830586058b06e8fe58fec4fed1fef7ff32ff860051
007c008100910095009e00b400b900cf00d900d900df00e20105010b010e010e012001210155
017b017b017e018d01a201a801a901b401d001d001e201e901f201f501fb020002000206021b
0221022202220223027202770294029c02cf02cf02d002ec02f903170322032b0335033c0359
036f037103870390039003b503e1041a04cf04ff053205320596059f05a805ab05c205f0060c
0782080008ccfca3fd2afddefe00fe88fe96feb2feb4ffe100150019001a001c001f003c0051
00610061006a0078009600a500af00d3010c0118011a012a013e014c0151015f016a01710178
01820184019a01a501a801a901ae01bc01cd01d701ef0200020d021c02210222022e02350242
024f024f025e026502710290029202b402d602fa0307030b030f0315032a0347035d03650374
0379039603b003cc03dd03e203f603fc03fc03ff040a041f04220426042b0447045f0475049e
04e704e7055c05cb05e5060a066d068606b806f10736073e07500751075d078f07b607d40860
00b600c300b500b700000000000000000000000001e00381034503b5008e0233041902ce02ce
002d005f0064034d023f000002a80188027d01b402240578063b023b014e00f00426029402c6
029f02f6023b034d014b0153006a0231000000000000061404aa0000003c04c300ed04bc0265
02ce03b50078060c017e02ef060c00b201000239000001c50330042b03cb00da03df010704a1
00db040a011701ed02a70350010b01bd043e05580021039c00ae0371017d00b5024500000afb
088c012b014e01aa00870054013201f803ff0003024e00b4003703e30083006b02d800ed0077
0088009701640467008e0033017c00e700a6029e0329056e062a061501c90269048a021301b4
000204a9000002390124010305140084015d039a06ef02d9007500cf040a00de03ac04bc02cf
02ae034d04f005520168006d007d00860071ff810079055804d2016700030156002504e00094
007c033204210094007f0072005c002f00b6001800ba00b80041034d00720018001f004c016a
01550099009a009a009800b200040078006900140057006e00ce00b4065402b80067050e0165
00e7000004cbfe52005affa60099ff67006eff92002dffd40087ff7c00b800a800e5008f00a8
0185fe7b0070001e00d900de014c054602cf0546ff2d028a02d90253029600b7000000000000
00000000000000000125011800ea00ea00ae0000003e05bb008a04d70053003fff8cffd50015
0028002200990062004a00e4006d00ee00e5004803c00033fe4e02b1ff460370007905df0051
ffa7ff1f010a0068ff6c004f00bc00a507050061072b4043555441403f3e3d3c3b3a39383735
34333231302f2e2d2c2b2a292827262524232221201f1e1d1c1b1a191817161514131211100f
0e0d0c0b0a090807060504030201002c4523466020b02660b004262348482d2c452346236120
b02661b004262348482d2c45234660b0206120b04660b004262348482d2c4523462361b02060
20b02661b02061b004262348482d2c45234660b0406120b06660b004262348482d2c45234623
61b0406020b02661b04061b004262348482d2c0110203c003c2d2c20452320b0cd442320b801
5a51582320b08d44235920b0ed51582320b04d44235920b09051582320b00d44235921212d2c
20204518684420b001602045b04676688a4560442d2c01b10b0a432343650a2d2c00b10a0b43
23430b2d2c00b0172370b101173e01b0172370b10217453ab10200080d2d2c45b01a234445b0
1923442d2c2045b00325456164b050515845441b2121592d2cb00143632362b0002342b00f2b
2d2c2045b0004360442d2c01b00643b00743650a2d2c2069b04061b0008b20b12cc08a8cb810
0062602b0c642364615c58b00361592d2c45b0112bb0172344b0177ae4182d2c45b0112bb017
23442d2cb01243588745b0112bb0172344b0177ae41b038a45186920b01723448a8a8720b0a0
5158b0112bb0172344b0177ae41b21b0177ae45959182d2c2d2cb0022546608a46b040618c48
2d2c4b53205c58b002855958b00185592d2c20b0032545b019234445b01a23444565234520b0
0325606a20b009234223688a6a606120b01a8ab000527921b21a1a40b9ffe0001a45208a5458
2321b03f1b235961441cb114008a5279b31940201945208a54582321b03f1b235961442d2cb1
10114323430b2d2cb10e0f4323430b2d2cb10c0d4323430b2d2cb10c0d432343650b2d2cb10e
0f432343650b2d2cb11011432343650b2d2c4b525845441b2121592d2c0120b003252349b040
60b0206320b000525823b002253823b002256538008a63381b212121212159012d2c4bb06451
584569b00943608a103a1b212121592d2c01b005251023208af500b0016023edec2d2c01b005
251023208af500b0016123edec2d2c01b0062510f500edec2d2c20b001600110203c003c2d2c
20b001610110203c003c2d2cb02b2bb02a2a2d2c00b00743b006430b2d2c3eb02a2a2d2c352d
2c76b8022323701020b802234520b0005058b00161593a2f182d2c21210c6423648bb8400062
2d2c21b08051580c6423648bb82000621bb200402f2b59b002602d2c21b0c051580c6423648b
b81555621bb200802f2b59b002602d2c0c6423648bb84000626023212d2cb4000100000015b0
0826b00826b00826b008260f10161345683ab001162d2cb4000100000015b00826b00826b008
26b008260f1016134568653ab001162d2c4b53234b515a5820458a60441b2121592d2c4b5458
20458a60441b2121592d2c4b53234b515a58381b2121592d2c4b5458381b2121592d2cb01343
58031b02592d2cb0134358021b03592d2c4b54b012435c5a58381b2121592d2cb012435c580c
b00425b00425060c6423646164b807085158b00425b00425012046b01060482046b010604859
0a21211b2121592d2cb012435c580cb00425b00425060c6423646164b807085158b00425b004
25012046b8fff060482046b8fff06048590a21211b2121592d2c4b53234b515a58b03a2b1b21
21592d2c4b53234b515a58b03b2b1b2121592d2c4b53234b515ab012435c5a58381b2121592d
2c0c8a034b54b00426024b545a8a8a0ab012435c5a58381b2121592d2c4b5258b00425b00425
49b00425b00425496120b0005458212043b0005558b00325b00325b8ffc038b8ffc038591bb0
4054582043b0005458b00225b8ffc038591b2043b0005458b00325b00325b8ffc038b8ffc038
1bb00325b8ffc03859595959212121212d2c462346608a8a462320468a608a61b8ff80622320
10238ab902c202c28a70456020b0005058b00161b8ffba8b1bb0468c59b0106068013a2d2cb1
020042b123018851b1400188535a58b910000020885458b202010243604259b12401885158b9
20000040885458b2020202436042b12401885458b2022002436042004b014b5258b202080243
6042591bb940000080885458b202040243604259b94000008063b80100885458b20208024360
4259b94000010063b80200885458b202100243604259b94000020063b80400885458b2024002
43604259595959592d2cb0024354584b53234b515a58381b2121591b21212121592d00000001
000000030000ea930bd45f0f3cf5081b080000000000a2e3272a00000000b9d5b4f6faaffd67
1000080c00000009000100010000000000010000073efe4e00431000faaffe26100000010000
000000000000000000000000002706000100078d00190473004402aa0085040000880400003f
047300870473004a040000500473004b02390000047300860239002404e30030047300870473
00460556005c0473008301c70088047300870400000f0556009e0473009601c7008304730042
02aa007c02aa007c06aa0087023900bf05c7009c0473ffe105c700a1055600a20639005805c7
00a105c7009e0556fffd05c7006605560096000000000000002c0000026c0000043000000538
000007d000000b7800000d3c00001010000011c4000013840000138400001564000016880000
1738000018dc00001a9000001d3c00001edc00001fd000002198000023bc000024c400002550
0000264c0000283c000028bc0000296400002b9400002c7800002e2400002e58000030c40000
31880000337c000034a0000035e800003794000038d000003b080001000000270100003f0076
000700020010002f00560000040d0aff00030002b1540f4122031700ef031700ff0317000300
1f0317002f0317004f0317005f0317008f0317009f03170006000f0317005f0317006f031700
7f031700bf031700f00317000600400317b2923340b80317b28b3340b80317b36a6c3240b803
17b2613340b80317b35c5d3240b80317b357593240b80317b34d513240b80317b344493240b8
0317b23a3340b80317b331343240b80317b32e423240b80317b3272c3240b80317b312253280
b80317b30a0d32c04116031600d00316000200700316000102c4000f0101001f00a0031500b0
031500020306000f0101001f00400312b32426329fbf03040001030203010064001fffc00301
b20d1132410a02ff02ef0012001f02ee02ed0064001fffc002edb30e11329f414a02e200af02
e200bf02e2000302e202e202e102e1007f02e00001001002e0003f02e0009f02e000bf02e000
cf02e000ef02e0000602e002e002df02df02de02de000f02dd002f02dd003f02dd005f02dd00
9f02dd00bf02dd00ef02dd000702dd02dd001002dc0001000002dc0001001002dc003f02dc00
0202dc02dc001002db000102db02db000f02da000102da02daffc002d3b2373932b9ffc002d3
b22b2f32b9ffc002d3b21f2532b9ffc002d3b2171b32b9ffc002d3b2121632b802d2b2f9291f
b802e3b3202b1fa0413002d400b002d40002000002d4001002d4002002d4005002d4006002d4
007002d40006006002d6007002d6008002d6009002d600a002d600b002d60006000002d60010
02d6002002ca002002cc002002d6003002d6004002d6005002d6000802d0b2202b1fb802cfb2
26421f411602ce02c70017001f02cd02c80017001f02cc02c60017001f02cb02c50017001f02
c902c5001e001f02ca02c6b21e1f00410b02c6000002c7001002c6001002c7002f02c5000502
c1b324121fff411102bf0001001f02bf002f02bf003f02bf004f02bf005f02bf008f02bf0006
02bf0222b2641f12410b02bb00ca0800001f02b200e90800001f02a600a20800406a1f402643
4932402043493240263a3d3240203a3d329f209f26024026969932402096993240268e923240
208e92324026848c324020848c3240267a813240207a813240266c763240206c76324026646a
324020646a3240265a5f3240205a5f3240264f543240204f5432b8029eb724271f374f6b0120
410f0277003002770040027700500277000402770277027700f90400001f029bb22a2a1fb802
9a402b292a1f80ba0180bc0180520180a201806501807e01808101803c01805e01802b01801c
01801e0180400180bb0138000100800140b40180400180bb013800010080013940180180ca01
80ad018073018026018025018024018020013740b80221b2493340b80221b2453340b80221b3
41423240b80221b33d3e320f410f0221003f0221007f0221000300bf022100cf022100ff0221
000300400221b320223240b80221b3191e3240b80222b32a3f3240b80221b32e3a326f414802
c3007f02c3008f02c300df02c30004002f02c3006002c300cf02c30003000f02c3003f02c300
5f02c300c002c300ef02c300ff02c3000600df02220001008f02220001000f0222002f022200
3f0222005f0222007f022200ef0222000600bf022100ef02210002006f0221007f022100af02
210003002f0221003f0221004f0221000302c302c30222022202210221401d101c102b104803
8f1c010f1e014f1eff1e023700161600000012110811b8010db6f70df8f70d00094109028e02
8f001d001f0290028f001d001f028fb2f91d1fb80198b226bb1f41150197001e0401001f0139
00260125001f013800730401001f0135001c0801001f0134001c02ab001f0132b21c561fb801
0fb2262c1fba010e001e0401b61ff91ce41fe91cb80201b61fe81cbb1fd720b80401b21fd51c
b802abb61fd41c891fc92fb80801b21fbc26b80101b21fba20b80201b61fb91c381fadcab804
01b21f8126b8019ab21f7e26b8019ab61f7d1c471f6b1cb80401b21f6526b8019ab21f5e73b8
0401400f1f52265a1f481c891f441c621f4073b80801b61f3f1c5e1f3c26b8019ab21f351cb8
0401b61f301cbb1f2b1cb80401b61f2a1c561f291cb80101b21f231eb80401b21f5537b80168
402c07960758074f07360732072c0721071f071d071b071408120810080e080c080a08080806
0804080208000814b8ffe0402b00000100140610000001000604000001000410000001001002
000001000200000001000002010802004a00b013034b024b5342014bb0c063004b6220b0f653
23b8010a515ab005234201b0124b004b5442b0382b4bb807ff52b0372b4bb007505b58b10101
8e59b0382bb00288b801005458b801ffb101018e851bb0124358b900010111858d1bb9000101
28858d5959001816763f183f123e113946443e113946443e113946443e113946443e11394660
443e11394660442b2b2b2b2b2b2b2b2b2b2b182b2b2b2b2b2b2b2b2b2b2b182b1db0964b5358
b0aa1d59b0324b5358b0ff1d594bb09353205c58b901f201f04544b901f101f045445958b903
3e01f2455258b901f2033e4459594bb8015653205c58b9002001f14544b9002601f145445958
b9081e0020455258b90020081e4459594bb8019a53205c58b9002501f24544b9002401f24544
5958b909090025455258b9002509094459594bb8040153205c58b173244544b1242445445958
b917200073455258b9007317204459594bb8040153205c58b1ca254544b1252545445958b916
8000ca455258b900ca16804459594bb03e53205c58b11c1c4544b11e1c45445958b9011a001c
455258b9001c011a4459594bb05653205c58b11c1c4544b12f1c45445958b90189001c455258
b9001c01894459594bb8030153205c58b11c1c4544b11c1c45445958b90de0001c455258b900
1c0de04459592b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b
2b2b2b2b2b2b2b2b2b65422b2b01b33b59635c456523456023456560234560b08b766818b080
622020b163594565234520b003266062636820b003266165b059236544b063234420b13b5c45
65234520b003266062636820b003266165b05c236544b03b2344b1005c455458b15c406544b2
3b403b4523614459b347503437456523456023456560234560b089766818b080622020b13450
4565234520b003266062636820b003266165b050236544b034234420b147374565234520b003
266062636820b003266165b037236544b0472344b10037455458b137406544b2474047452361
4459004b5342014b5058b108004259435c58b108004259b3020b0a124358601b215942161070
3eb0124358b93b21187e1bba040001a8000b2b59b00c2342b00d2342b0124358b92d412d411b
ba04000400000b2b59b00e2342b00f2342b0124358b9187e3b211bba01a80400000b2b59b010
2342b0112342002b7475737500184569444569444569447373737374757374752b2b2b2b7475
2b2b2b2b2b737373737373737373737373737373737373737373737373732b2b2b45b0406144
737400004bb02a534bb03f515a58b1070745b040604459004bb03a534bb03f515a58b10b0b45
b8ffc0604459004bb02e534bb03a515a58b1030345b040604459004bb02e534bb03c515a58b1
090945b8ffc06044592b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b752b2b2b2b2b2b2b435c58
b9008002bbb301401e017400735903b01e4b5402b0124b545ab012435c5a58ba009f02220001
007359002b7473012b01732b2b2b2b2b2b2b2b737373732b002b2b2b2b2b2b00456944734569
4473456944737475456944734569444569444569447374456944456944732b2b2b2b2b732b00
2b732b74752b2b2b2b2b2b2b2b2b2b2b2b2b2b7374752b0000>
] def
FontName currentdict end definefont pop
%%Page: 1 1
%%BeginPageSetup
%%PageBoundingBox: 0 0 196 229
%%EndPageSetup
q
1 g
84.574 223.767 111.258 -223.258 re f
0 g
0.8 w
0 J
0 j
[] 0.0 d
4 M q 1 0 0 -1 0 228.91925 cm
84.574 5.152 111.258 223.258 re S Q
BT
9.6 0 0 9.6 0.084375 2.047373 Tm
/f-0-0 1 Tf
[<010203>-1<04050607>-1<08090a0b07>-1<0509>]TJ
0 22.916667 Td
[<010203>-1<04050607>-1<08090a0c>1<02>-1<06>]TJ
ET
[ 0.8 0.8] 0 d
q 1 0 0 -1 0 228.91925 cm
84.16 205.164 m 195.816 205.164 l S Q
[ 0.8 0.8] 0 d
q 1 0 0 -1 0 228.91925 cm
84.602 56.379 m 195.859 56.379 l S Q
[ 0.8 0.8] 0 d
q 1 0 0 -1 0 228.91925 cm
84.602 116.379 m 195.859 116.379 l S Q
BT
9.6 0 0 9.6 98.925002 8.414549 Tm
/f-0-0 1 Tf
[<0d0e>-1<03>-1<0907>-1<0f0a10>-1<0c>1<03>-1<11>-1<080c>1<11>-1<03>-1<09>]TJ
0.68164 11.25 Td
[<1213>-1<0c>1<080c140a100c03>-1<11080c1103>-1<09>]TJ
0.343913 7.916667 Td
[<0d0e>-1<03>-1<0907>-1<0f0a10>-1<0c>1<07>-1<0804>]TJ
-11.375163 -8.809407 Td
[<10>-1<0c>1<07>-1<08040a>1<15>-1<02>-1<1213>-1<0c>1<09>-1<03>]TJ
ET
0.558281 w
[] 0.0 d
q 1 0 0 -1 0 228.91925 cm
76.48 227.523 m 83.652 227.523 l S Q
81.422 1.396 m 80.305 0.279 l 84.211 1.396 l 80.305 2.513 l 81.422
1.396 l h
81.422 1.396 m f*
0.279141 w
q -1 0 0 1 0 228.91925 cm
-81.422 -227.523 m -80.305 -228.641 l -84.211 -227.523 l -80.305
-226.406 l -81.422 -227.523 l h
-81.422 -227.523 m S Q
0.558281 w
q 1 0 0 -1 0 228.91925 cm
76.48 115.523 m 83.652 115.523 l S Q
81.422 113.396 m 80.305 112.279 l 84.211 113.396 l 80.305 114.513 l
81.422 113.396 l h
81.422 113.396 m f*
0.279141 w
q -1 0 0 1 0 228.91925 cm
-81.422 -115.523 m -80.305 -116.641 l -84.211 -115.523 l -80.305
-114.406 l -81.422 -115.523 l h
-81.422 -115.523 m S Q
0.558281 w
q 1 0 0 -1 0 228.91925 cm
76.332 6.035 m 83.504 6.035 l S Q
81.27 222.884 m 80.152 221.767 l 84.063 222.884 l 80.152 224.001 l
81.27 222.884 l h
81.27 222.884 m f*
0.279141 w
q -1 0 0 1 0 228.91925 cm
-81.27 -6.035 m -80.152 -7.152 l -84.063 -6.035 l -80.152 -4.918 l
-81.27 -6.035 l h
-81.27 -6.035 m S Q
0.8 w
[ 0.8 0.8] 0 d
q 1 0 0 -1 0 228.91925 cm
84.145 181.18 m 195.801 181.18 l S Q
BT
9.6 0 0 9.6 88.22969 31.844237 Tm
/f-0-0 1 Tf
[<0d0e>-1<03>-1<0907>-1<0f0a1602>-1<080717>-1<0a>1<10>-1<0c0203>-1<07>-1<18
09>]TJ
ET
0.558281 w
[] 0.0 d
q 1 0 0 -1 0 228.91925 cm
76.332 206.035 m 83.504 206.035 l S Q
81.27 22.884 m 80.152 21.767 l 84.063 22.884 l 80.152 24.001 l 81.27
22.884 l h
81.27 22.884 m f*
0.279141 w
q -1 0 0 1 0 228.91925 cm
-81.27 -206.035 m -80.152 -207.152 l -84.063 -206.035 l -80.152
-204.918 l -81.27 -206.035 l h
-81.27 -206.035 m S Q
BT
9.6 0 0 9.6 -0.310938 25.150499 Tm
/f-0-0 1 Tf
[<080e0d>-1<0e0f>-1<1610>-1<19>-1<1a>]TJ
0.0843099 2.006672 Td
[<10>-1<0c>1<07>-1<08040a>1<16>-1<121b>-1<12>-1<0c>]TJ
ET
0.558281 w
q 1 0 0 -1 0 228.91925 cm
76.332 182.035 m 83.504 182.035 l S Q
81.27 46.884 m 80.152 45.767 l 84.063 46.884 l 80.152 48.001 l 81.27
46.884 l h
81.27 46.884 m f*
0.279141 w
q -1 0 0 1 0 228.91925 cm
-81.27 -182.035 m -80.152 -183.152 l -84.063 -182.035 l -80.152
-180.918 l -81.27 -182.035 l h
-81.27 -182.035 m S Q
0.8 w
[ 0.8 0.8] 0 d
q 1 0 0 -1 0 228.91925 cm
84.543 97.18 m 195.801 97.18 l S Q
[ 0.8 0.8] 0 d
q 1 0 0 -1 0 228.91925 cm
84.543 77.18 m 195.801 77.18 l S Q
BT
9.6 0 0 9.6 102.637498 156.583295 Tm
/f-0-0 1 Tf
[<09140c080c140a>1<10>-1<0c0311>-1<080c>1<11>-1<03>-1<09>]TJ
-1.601887 -1.938639 Td
[<1c1d0d1e>-1<1f20>-1<21221c1f20>-1<23>-1<1e10>-1<0d>-1<24>-1<25>]TJ
10.675781 0 Td
<26>Tj
ET
Q
showpage
%%Trailer
count op_count sub {pop} repeat
countdictstack dict_count sub {end} repeat
cairo_eps_state restore
%%EOF

Binary file not shown.

Before

Width:  |  Height:  |  Size: 20 KiB

View File

@ -1,280 +0,0 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<svg
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://web.resource.org/cc/"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
xmlns:xlink="http://www.w3.org/1999/xlink"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
width="250"
height="300"
id="svg2160"
sodipodi:version="0.32"
inkscape:version="0.45.1"
version="1.0"
sodipodi:docbase="D:\Progetti\ChibiOS-RT\docs\img"
sodipodi:docname="workspace.svg"
inkscape:output_extension="org.inkscape.output.svg.inkscape"
inkscape:export-filename="D:\Progetti\ChibiOS-RT\docs\img\workspace.png"
inkscape:export-xdpi="90"
inkscape:export-ydpi="90">
<defs
id="defs2162">
<marker
inkscape:stockid="Arrow1Mend"
orient="auto"
refY="0"
refX="0"
id="Arrow1Mend"
style="overflow:visible">
<path
id="path3299"
d="M 0,0 L 5,-5 L -12.5,0 L 5,5 L 0,0 z "
style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none"
transform="matrix(-0.4,0,0,-0.4,-4,0)" />
</marker>
<linearGradient
inkscape:collect="always"
id="linearGradient3224">
<stop
style="stop-color:#ffffff;stop-opacity:1;"
offset="0"
id="stop3226" />
<stop
style="stop-color:#000000;stop-opacity:0"
offset="1"
id="stop3228" />
</linearGradient>
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient3224"
id="linearGradient3230"
x1="199.30756"
y1="341.00253"
x2="348.78439"
y2="341.00253"
gradientUnits="userSpaceOnUse" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient3224"
id="linearGradient2357"
gradientUnits="userSpaceOnUse"
x1="199.30756"
y1="341.00253"
x2="348.78439"
y2="341.00253" />
</defs>
<sodipodi:namedview
id="base"
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1.0"
inkscape:pageopacity="0.0"
inkscape:pageshadow="2"
inkscape:zoom="1.6725"
inkscape:cx="125"
inkscape:cy="128.25112"
inkscape:document-units="px"
inkscape:current-layer="layer1"
showgrid="true"
width="250px"
height="300px"
gridspacingx="5px"
gridspacingy="5px"
inkscape:grid-points="false"
inkscape:grid-bbox="true"
gridtolerance="10"
inkscape:object-paths="true"
objecttolerance="1"
guidetolerance="1"
inkscape:window-width="993"
inkscape:window-height="871"
inkscape:window-x="352"
inkscape:window-y="69" />
<metadata
id="metadata2165">
<rdf:RDF>
<cc:Work
rdf:about="">
<dc:format>image/svg+xml</dc:format>
<dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
</cc:Work>
</rdf:RDF>
</metadata>
<g
inkscape:label="Livello 1"
inkscape:groupmode="layer"
id="layer1">
<rect
style="fill:#ffffff;stroke:#000000;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
id="rect2196"
width="139.07188"
height="279.0719"
x="110.46406"
y="10.464057" />
<flowRoot
xml:space="preserve"
id="flowRoot3180"
transform="translate(1.8535156,-54.849147)"><flowRegion
id="flowRegion3182"><rect
id="rect3184"
width="97.01046"
height="17.563538"
x="2.9895365"
y="332.43646" /></flowRegion><flowPara
id="flowPara3186">Workspace base</flowPara></flowRoot> <flowRoot
xml:space="preserve"
id="flowRoot3188"
transform="translate(1.8535156,-329.84915)"><flowRegion
id="flowRegion3190"><rect
id="rect3192"
width="97.01046"
height="17.563538"
x="2.9895365"
y="332.43646" /></flowRegion><flowPara
id="flowPara3196">Workspace top</flowPara></flowRoot> <path
style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:1,1;stroke-dashoffset:0;stroke-opacity:1"
d="M 109.94816,260.4823 C 249.5177,260.4823 249.5177,260.4823 249.5177,260.4823"
id="path3243"
inkscape:export-filename="C:\Progetti\ChibiOS\homepage\workspace.png"
inkscape:export-xdpi="90"
inkscape:export-ydpi="90" />
<path
style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;marker-start:none;stroke-miterlimit:4;stroke-dasharray:1, 1;stroke-dashoffset:0;stroke-opacity:1"
d="M 110.5,74.5 C 249.57284,74.5 249.57284,74.5 249.57284,74.5"
id="path3245" />
<path
style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:1, 1;stroke-dashoffset:0;stroke-opacity:1"
d="M 110.5,149.5 C 249.57284,149.5 249.57284,149.5 249.57284,149.5"
id="path3247" />
<flowRoot
xml:space="preserve"
id="flowRoot3249"
transform="translate(125.4043,-62.808117)"><flowRegion
id="flowRegion3251"><rect
id="rect3253"
width="107.01046"
height="12.563538"
x="2.9895365"
y="332.43646" /></flowRegion><flowPara
id="flowPara3255">Thread Structure</flowPara></flowRoot> <flowRoot
xml:space="preserve"
id="flowRoot3257"
transform="translate(133.58398,-197.80812)"><flowRegion
id="flowRegion3259"><rect
id="rect3261"
width="102.01046"
height="17.563538"
x="2.9895365"
y="332.43646" /></flowRegion><flowPara
id="flowPara3263">intctx Structure</flowPara></flowRoot> <flowRoot
xml:space="preserve"
id="flowRoot3265"
transform="translate(137.71094,-292.80812)"><flowRegion
id="flowRegion3267"><rect
id="rect3269"
width="97.01046"
height="17.563538"
x="2.9895365"
y="332.43646" /></flowRegion><flowPara
id="flowPara3273">Thread Stack</flowPara></flowRoot> <flowRoot
xml:space="preserve"
id="flowRoot3277"
transform="translate(1.2089844,-187.09523)"><flowRegion
id="flowRegion3279"><rect
id="rect3281"
width="97.01046"
height="17.563538"
x="2.9895365"
y="332.43646" /></flowRegion><flowPara
id="flowPara3283">Stack Pointer</flowPara></flowRoot> <path
style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.6978516px;stroke-linecap:butt;stroke-linejoin:miter;marker-end:url(#Arrow1Mend);stroke-opacity:1"
d="M 100.34893,288.42983 C 109.31485,288.42983 109.31485,288.42983 109.31485,288.42983"
id="path3487" />
<path
style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.6978516px;stroke-linecap:butt;stroke-linejoin:miter;marker-end:url(#Arrow1Mend);stroke-opacity:1"
d="M 100.34893,148.42983 C 109.31485,148.42983 109.31485,148.42983 109.31485,148.42983"
id="path3489" />
<path
style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.6978516px;stroke-linecap:butt;stroke-linejoin:miter;marker-end:url(#Arrow1Mend);stroke-opacity:1"
d="M 100.16177,11.570166 C 109.12769,11.570166 109.12769,11.570166 109.12769,11.570166"
id="path3491" />
<path
style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:1, 1;stroke-dashoffset:0;stroke-opacity:1"
d="M 109.93046,230.5 C 249.5,230.5 249.5,230.5 249.5,230.5"
id="path2206"
inkscape:export-filename="C:\Progetti\ChibiOS\homepage\workspace.png"
inkscape:export-xdpi="90"
inkscape:export-ydpi="90" />
<flowRoot
xml:space="preserve"
id="flowRoot2208"
transform="translate(112.03516,-92.095227)"><flowRegion
id="flowRegion2210"><rect
id="rect2212"
width="132.01047"
height="17.563538"
x="2.9895365"
y="332.43646" /></flowRegion><flowPara
id="flowPara2214">Thread Local Storage</flowPara></flowRoot> <path
style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.6978516px;stroke-linecap:butt;stroke-linejoin:miter;marker-end:url(#Arrow1Mend);stroke-opacity:1"
d="M 100.16177,261.57017 C 109.12769,261.57017 109.12769,261.57017 109.12769,261.57017"
id="path2216" />
<flowRoot
xml:space="preserve"
id="flowRoot2218"
transform="translate(1.359375,-83.728054)"><flowRegion
id="flowRegion2220"><rect
id="rect2222"
width="117.01046"
height="17.563538"
x="2.9895365"
y="332.43646" /></flowRegion><flowPara
id="flowPara2224">chThdLS()</flowPara></flowRoot> <flowRoot
xml:space="preserve"
id="flowRoot2209"
transform="translate(2.3710937,-107.80812)"><flowRegion
id="flowRegion2211"><rect
id="rect2213"
width="97.01046"
height="17.563538"
x="2.9895365"
y="332.43646" /></flowRegion><flowPara
id="flowPara2215">Stack Limit</flowPara></flowRoot> <path
style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.6978516px;stroke-linecap:butt;stroke-linejoin:miter;marker-end:url(#Arrow1Mend);stroke-opacity:1"
d="M 100.16177,231.57017 C 109.12769,231.57017 109.12769,231.57017 109.12769,231.57017"
id="path2217" />
<path
style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:1, 1;stroke-dashoffset:0;stroke-opacity:1"
d="M 110.42716,125.5 C 249.5,125.5 249.5,125.5 249.5,125.5"
id="path2221" />
<path
style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:1, 1;stroke-dashoffset:0;stroke-opacity:1"
d="M 110.42716,100.5 C 249.5,100.5 249.5,100.5 249.5,100.5"
id="path2223" />
<flowRoot
xml:space="preserve"
id="flowRoot2225"
transform="translate(130.04492,-248.01905)"><flowRegion
id="flowRegion2227"><rect
id="rect2229"
width="102.01046"
height="17.563538"
x="2.9895365"
y="332.43646" /></flowRegion><flowPara
id="flowPara2231">extctx Structure</flowPara></flowRoot> <flowRoot
xml:space="preserve"
id="flowRoot2235"
transform="translate(110.82227,-224.75538)"><flowRegion
id="flowRegion2237"><rect
id="rect2239"
width="137.01047"
height="17.563538"
x="2.9895365"
y="332.43646" /></flowRegion><flowPara
id="flowPara2241">INT_REQUIRED_STACK</flowPara></flowRoot> </g>
</svg>

Before

Width:  |  Height:  |  Size: 11 KiB

View File

@ -1,2 +0,0 @@
#!/bin/bash
rsync -avP -e ssh --delete --exclude=.* ./html/ gdisirio,chibios@web.sourceforge.net:/home/groups/c/ch/chibios/htdocs/docs3/nil

View File

@ -1,45 +0,0 @@
/*
ChibiOS - Copyright (C) 2006..2015 Giovanni Di Sirio.
This file is part of ChibiOS.
ChibiOS is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 3 of the License, or
(at your option) any later version.
ChibiOS is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
/**
* @mainpage Introduction
* @author Giovanni Di Sirio (gdisirio@users.sourceforge.net).
*
* <h2>Why Nil?</h2>
* Of course because it is so small that it is almost nil.
* I wrote Nil because I wanted to experiment with an idea I had
* regarding a minimal RTOS. Basically I wanted to verify how small
* could be an RTOS while retaining useful features.
*
* <h2>Features</h2>
* - Free software, GPL3 licensed. Stable releases include a exception clause
* to the GPL.
* - Designed for realtime applications.
* - Easily portable.
* - Preemptive scheduling.
* - Each thread has its own priority level.
* - Offers tasks, time, semaphores, event flags, timeouts.
* - Fully static.
* - Minimal system requirements: about 700 bytes ROM with all options enabled.
* - Almost totally written in C with little ASM code required for ports.
* - Compatible with ChibiOS/HAL.
* - API compatible with ChibiOS/RT of which, ChibiOS/NIL, is functionally
* a subset.
* .
*/

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@ -1,8 +0,0 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<meta http-equiv="Refresh" content="0; URL=html/index.html">
</head>
<body>
</body>
</html>

View File

@ -1,5 +0,0 @@
del html\*.* /Q
doxygen Doxyfile_chm
del html\*.md5
del html\*.map
pause

View File

@ -1,5 +0,0 @@
del html\*.* /Q
doxygen Doxyfile_html
del html\*.md5
del html\*.map
pause

View File

@ -1,6 +0,0 @@
#!/bin/bash
rm html/*
doxygen Doxyfile_html
rm html/*.md5
rm html/*.map

View File

@ -1,11 +0,0 @@
*** Documentation build procedure ***
The following software must be installed:
- Doxygen 1.7.4 or later.
- Graphviz 2.26.3 or later. The ./bin directory must be specified in the path
in order to make Graphviz accessible by Doxygen.
Build procedure:
- Run Doxywizard.
- Load ./docs/Doxyfile_html or ./docs/Doxyfile_chm from Doxywizard.
- Start.

View File

@ -1,174 +0,0 @@
***************************************************************************
Options: -O2 -fomit-frame-pointer -falign-functions=16
Settings: CCLK=48, MAMCR=2, MAMTIM=3 (3 wait states)
***************************************************************************
*** ChibiOS/RT test suite
***
*** Kernel: 3.1.0
*** Compiled: Jan 6 2016 - 12:43:49
*** Compiler: GCC 4.9.3 20150529 (release) [ARM/embedded-4_9-branch revision 227977]
*** Architecture: ARMv4T
*** Core Variant: ARM7
*** Port Info: Pure ARM mode
*** Platform: LPC214x
*** Test Board: Olimex LPC-P2148
----------------------------------------------------------------------------
--- Test Case 1.1 (System, critical zones)
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 1.2 (System, interrupts handling)
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 1.3 (System, integrity)
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 2.1 (Threads, enqueuing test #1)
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 2.2 (Threads, enqueuing test #2)
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 2.3 (Threads, priority change)
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 2.4 (Threads, delays)
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 3.1 (Semaphores, enqueuing)
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 3.2 (Semaphores, timeout)
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 3.3 (Semaphores, atomic signal-wait)
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 3.4 (Binary Semaphores, functionality)
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 4.1 (Mutexes, priority enqueuing test)
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 4.2 (Mutexes, priority inheritance, simple case)
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 4.3 (Mutexes, priority inheritance, complex case)
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 4.4 (Mutexes, priority return)
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 4.5 (Mutexes, status)
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 4.6 (CondVar, signal test)
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 4.7 (CondVar, broadcast test)
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 4.8 (CondVar, boost test)
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 5.1 (Messages, loop)
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 6.1 (Mailboxes, queuing and timeouts)
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 7.1 (Events, registration and dispatch)
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 7.2 (Events, wait and broadcast)
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 7.3 (Events, timeouts)
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 8.1 (Heap, allocation and fragmentation test)
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 9.1 (Memory Pools, queue/dequeue)
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 10.1 (Dynamic APIs, threads creation from heap)
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 10.2 (Dynamic APIs, threads creation from memory pool)
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 10.3 (Dynamic APIs, registry and references)
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 11.1 (Queues, input queues)
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 11.2 (Queues, output queues)
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 12.1 (Benchmark, messages #1)
--- Score : 158929 msgs/S, 317858 ctxswc/S
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 12.2 (Benchmark, messages #2)
--- Score : 118409 msgs/S, 236818 ctxswc/S
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 12.3 (Benchmark, messages #3)
--- Score : 118409 msgs/S, 236818 ctxswc/S
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 12.4 (Benchmark, context switch)
--- Score : 503568 ctxswc/S
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 12.5 (Benchmark, threads, full cycle)
--- Score : 89082 threads/S
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 12.6 (Benchmark, threads, create only)
--- Score : 128249 threads/S
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 12.7 (Benchmark, mass reschedule, 5 threads)
--- Score : 37521 reschedules/S, 225126 ctxswc/S
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 12.8 (Benchmark, round robin context switching)
--- Score : 318352 ctxswc/S
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 12.9 (Benchmark, I/O Queues throughput)
--- Score : 380408 bytes/S
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 12.10 (Benchmark, virtual timers set/reset)
--- Score : 313716 timers/S
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 12.11 (Benchmark, semaphores wait/signal)
--- Score : 831916 wait+signal/S
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 12.12 (Benchmark, mutexes lock/unlock)
--- Score : 375200 lock+unlock/S
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 12.13 (Benchmark, RAM footprint)
--- System: 328 bytes
--- Thread: 72 bytes
--- Timer : 20 bytes
--- Semaph: 12 bytes
--- EventS: 4 bytes
--- EventL: 20 bytes
--- Mutex : 16 bytes
--- CondV.: 8 bytes
--- Queue : 36 bytes
--- MailB.: 40 bytes
--- Result: SUCCESS
----------------------------------------------------------------------------
Final result: SUCCESS

View File

@ -1,174 +0,0 @@
***************************************************************************
Options: -O2 -fomit-frame-pointer -falign-functions=16
Settings: CCLK=48, MAMCR=2, MAMTIM=3 (3 wait states)
***************************************************************************
*** ChibiOS/RT test suite
***
*** Kernel: 3.1.0
*** Compiled: Jan 6 2016 - 12:46:35
*** Compiler: GCC 4.9.3 20150529 (release) [ARM/embedded-4_9-branch revision 227977]
*** Architecture: ARMv4T
*** Core Variant: ARM7
*** Port Info: Pure THUMB mode
*** Platform: LPC214x
*** Test Board: Olimex LPC-P2148
----------------------------------------------------------------------------
--- Test Case 1.1 (System, critical zones)
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 1.2 (System, interrupts handling)
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 1.3 (System, integrity)
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 2.1 (Threads, enqueuing test #1)
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 2.2 (Threads, enqueuing test #2)
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 2.3 (Threads, priority change)
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 2.4 (Threads, delays)
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 3.1 (Semaphores, enqueuing)
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 3.2 (Semaphores, timeout)
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 3.3 (Semaphores, atomic signal-wait)
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 3.4 (Binary Semaphores, functionality)
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 4.1 (Mutexes, priority enqueuing test)
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 4.2 (Mutexes, priority inheritance, simple case)
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 4.3 (Mutexes, priority inheritance, complex case)
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 4.4 (Mutexes, priority return)
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 4.5 (Mutexes, status)
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 4.6 (CondVar, signal test)
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 4.7 (CondVar, broadcast test)
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 4.8 (CondVar, boost test)
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 5.1 (Messages, loop)
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 6.1 (Mailboxes, queuing and timeouts)
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 7.1 (Events, registration and dispatch)
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 7.2 (Events, wait and broadcast)
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 7.3 (Events, timeouts)
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 8.1 (Heap, allocation and fragmentation test)
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 9.1 (Memory Pools, queue/dequeue)
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 10.1 (Dynamic APIs, threads creation from heap)
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 10.2 (Dynamic APIs, threads creation from memory pool)
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 10.3 (Dynamic APIs, registry and references)
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 11.1 (Queues, input queues)
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 11.2 (Queues, output queues)
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 12.1 (Benchmark, messages #1)
--- Score : 114679 msgs/S, 229358 ctxswc/S
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 12.2 (Benchmark, messages #2)
--- Score : 93584 msgs/S, 187168 ctxswc/S
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 12.3 (Benchmark, messages #3)
--- Score : 93584 msgs/S, 187168 ctxswc/S
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 12.4 (Benchmark, context switch)
--- Score : 423200 ctxswc/S
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 12.5 (Benchmark, threads, full cycle)
--- Score : 70327 threads/S
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 12.6 (Benchmark, threads, create only)
--- Score : 109934 threads/S
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 12.7 (Benchmark, mass reschedule, 5 threads)
--- Score : 31422 reschedules/S, 188532 ctxswc/S
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 12.8 (Benchmark, round robin context switching)
--- Score : 258820 ctxswc/S
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 12.9 (Benchmark, I/O Queues throughput)
--- Score : 282356 bytes/S
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 12.10 (Benchmark, virtual timers set/reset)
--- Score : 313622 timers/S
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 12.11 (Benchmark, semaphores wait/signal)
--- Score : 394420 wait+signal/S
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 12.12 (Benchmark, mutexes lock/unlock)
--- Score : 246192 lock+unlock/S
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 12.13 (Benchmark, RAM footprint)
--- System: 328 bytes
--- Thread: 72 bytes
--- Timer : 20 bytes
--- Semaph: 12 bytes
--- EventS: 4 bytes
--- EventL: 20 bytes
--- Mutex : 16 bytes
--- CondV.: 8 bytes
--- Queue : 36 bytes
--- MailB.: 40 bytes
--- Result: SUCCESS
----------------------------------------------------------------------------
Final result: SUCCESS

View File

@ -1,164 +0,0 @@
*** ChibiOS/RT test suite
***
*** Kernel: 3.1.0
*** Compiled: Nov 23 2015 - 14:08:46
*** Compiler: CW
*** Architecture: Power Architecture
*** Core Variant: e200z0
*** Port Info: VLE mode
*** Platform: SPC560Dxx Car Body and Convenience
*** Test Board: EVB with SPC560Dxx Mini Module
----------------------------------------------------------------------------
--- Test Case 1.1 (System, critical zones)
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 1.2 (System, interrupts handling)
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 1.3 (System, integrity)
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 2.1 (Threads, enqueuing test #1)
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 2.2 (Threads, enqueuing test #2)
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 2.3 (Threads, priority change)
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 2.4 (Threads, delays)
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 3.1 (Semaphores, enqueuing)
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 3.2 (Semaphores, timeout)
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 3.3 (Semaphores, atomic signal-wait)
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 3.4 (Binary Semaphores, functionality)
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 4.1 (Mutexes, priority enqueuing test)
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 4.2 (Mutexes, priority return)
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 4.3 (Mutexes, status)
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 4.4 (CondVar, signal test)
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 4.5 (CondVar, broadcast test)
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 4.6 (CondVar, boost test)
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 5.1 (Messages, loop)
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 6.1 (Mailboxes, queuing and timeouts)
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 7.1 (Events, registration and dispatch)
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 7.2 (Events, wait and broadcast)
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 7.3 (Events, timeouts)
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 8.1 (Heap, allocation and fragmentation test)
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 9.1 (Memory Pools, queue/dequeue)
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 10.1 (Dynamic APIs, threads creation from heap)
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 10.2 (Dynamic APIs, threads creation from memory pool)
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 10.3 (Dynamic APIs, registry and references)
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 11.1 (Queues, input queues)
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 11.2 (Queues, output queues)
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 12.1 (Benchmark, messages #1)
--- Score : 137795 msgs/S, 275590 ctxswc/S
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 12.2 (Benchmark, messages #2)
--- Score : 121356 msgs/S, 242712 ctxswc/S
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 12.3 (Benchmark, messages #3)
--- Score : 121356 msgs/S, 242712 ctxswc/S
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 12.4 (Benchmark, context switch)
--- Score : 431744 ctxswc/S
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 12.5 (Benchmark, threads, full cycle)
--- Score : 97184 threads/S
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 12.6 (Benchmark, threads, create only)
--- Score : 131718 threads/S
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 12.7 (Benchmark, mass reschedule, 5 threads)
--- Score : 39290 reschedules/S, 235740 ctxswc/S
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 12.8 (Benchmark, round robin context switching)
--- Score : 255000 ctxswc/S
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 12.9 (Benchmark, I/O Queues throughput)
--- Score : 377420 bytes/S
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 12.10 (Benchmark, virtual timers set/reset)
--- Score : 540416 timers/S
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 12.11 (Benchmark, semaphores wait/signal)
--- Score : 535768 wait+signal/S
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 12.12 (Benchmark, mutexes lock/unlock)
--- Score : 433696 lock+unlock/S
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 12.13 (Benchmark, RAM footprint)
--- System: 640 bytes
--- Thread: 68 bytes
--- Timer : 20 bytes
--- Semaph: 12 bytes
--- EventS: 4 bytes
--- EventL: 20 bytes
--- Mutex : 16 bytes
--- CondV.: 8 bytes
--- Queue : 36 bytes
--- MailB.: 40 bytes
--- Result: SUCCESS
----------------------------------------------------------------------------
Final result: SUCCESS

View File

@ -1,164 +0,0 @@
*** ChibiOS/RT test suite
***
*** Kernel: 3.1.0
*** Compiled: Jan 4 2016 - 12:12:53
*** Compiler: GCC 4.6.3 build on 2013-01-07
*** Architecture: Power Architecture
*** Core Variant: e200z0
*** Port Info: VLE mode
*** Platform: SPC560Dxx Car Body and Convenience
*** Test Board: EVB with SPC560Dxx Mini Module
----------------------------------------------------------------------------
--- Test Case 1.1 (System, critical zones)
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 1.2 (System, interrupts handling)
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 1.3 (System, integrity)
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 2.1 (Threads, enqueuing test #1)
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 2.2 (Threads, enqueuing test #2)
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 2.3 (Threads, priority change)
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 2.4 (Threads, delays)
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 3.1 (Semaphores, enqueuing)
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 3.2 (Semaphores, timeout)
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 3.3 (Semaphores, atomic signal-wait)
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 3.4 (Binary Semaphores, functionality)
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 4.1 (Mutexes, priority enqueuing test)
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 4.2 (Mutexes, priority return)
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 4.3 (Mutexes, status)
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 4.4 (CondVar, signal test)
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 4.5 (CondVar, broadcast test)
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 4.6 (CondVar, boost test)
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 5.1 (Messages, loop)
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 6.1 (Mailboxes, queuing and timeouts)
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 7.1 (Events, registration and dispatch)
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 7.2 (Events, wait and broadcast)
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 7.3 (Events, timeouts)
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 8.1 (Heap, allocation and fragmentation test)
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 9.1 (Memory Pools, queue/dequeue)
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 10.1 (Dynamic APIs, threads creation from heap)
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 10.2 (Dynamic APIs, threads creation from memory pool)
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 10.3 (Dynamic APIs, registry and references)
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 11.1 (Queues, input queues)
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 11.2 (Queues, output queues)
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 12.1 (Benchmark, messages #1)
--- Score : 152782 msgs/S, 305564 ctxswc/S
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 12.2 (Benchmark, messages #2)
--- Score : 128898 msgs/S, 257796 ctxswc/S
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 12.3 (Benchmark, messages #3)
--- Score : 128898 msgs/S, 257796 ctxswc/S
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 12.4 (Benchmark, context switch)
--- Score : 452768 ctxswc/S
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 12.5 (Benchmark, threads, full cycle)
--- Score : 102403 threads/S
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 12.6 (Benchmark, threads, create only)
--- Score : 145797 threads/S
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 12.7 (Benchmark, mass reschedule, 5 threads)
--- Score : 40187 reschedules/S, 241122 ctxswc/S
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 12.8 (Benchmark, round robin context switching)
--- Score : 315140 ctxswc/S
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 12.9 (Benchmark, I/O Queues throughput)
--- Score : 389600 bytes/S
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 12.10 (Benchmark, virtual timers set/reset)
--- Score : 644036 timers/S
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 12.11 (Benchmark, semaphores wait/signal)
--- Score : 637644 wait+signal/S
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 12.12 (Benchmark, mutexes lock/unlock)
--- Score : 503400 lock+unlock/S
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 12.13 (Benchmark, RAM footprint)
--- System: 640 bytes
--- Thread: 68 bytes
--- Timer : 20 bytes
--- Semaph: 12 bytes
--- EventS: 4 bytes
--- EventL: 20 bytes
--- Mutex : 16 bytes
--- CondV.: 8 bytes
--- Queue : 36 bytes
--- MailB.: 40 bytes
--- Result: SUCCESS
----------------------------------------------------------------------------
Final result: SUCCESS

View File

@ -1,164 +0,0 @@
*** ChibiOS/RT test suite
***
*** Kernel: 3.1.0
*** Compiled: Jan 4 2016 - 12:19:15
*** Compiler: GCC 4.6.3 build on 2013-01-07
*** Architecture: Power Architecture
*** Core Variant: e200z0
*** Port Info: VLE mode
*** Platform: SPC560Pxx Chassis and Safety
*** Test Board: EVB with SPC560Pxx Mini Module
----------------------------------------------------------------------------
--- Test Case 1.1 (System, critical zones)
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 1.2 (System, interrupts handling)
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 1.3 (System, integrity)
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 2.1 (Threads, enqueuing test #1)
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 2.2 (Threads, enqueuing test #2)
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 2.3 (Threads, priority change)
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 2.4 (Threads, delays)
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 3.1 (Semaphores, enqueuing)
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 3.2 (Semaphores, timeout)
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 3.3 (Semaphores, atomic signal-wait)
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 3.4 (Binary Semaphores, functionality)
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 4.1 (Mutexes, priority enqueuing test)
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 4.2 (Mutexes, priority return)
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 4.3 (Mutexes, status)
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 4.4 (CondVar, signal test)
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 4.5 (CondVar, broadcast test)
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 4.6 (CondVar, boost test)
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 5.1 (Messages, loop)
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 6.1 (Mailboxes, queuing and timeouts)
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 7.1 (Events, registration and dispatch)
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 7.2 (Events, wait and broadcast)
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 7.3 (Events, timeouts)
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 8.1 (Heap, allocation and fragmentation test)
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 9.1 (Memory Pools, queue/dequeue)
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 10.1 (Dynamic APIs, threads creation from heap)
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 10.2 (Dynamic APIs, threads creation from memory pool)
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 10.3 (Dynamic APIs, registry and references)
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 11.1 (Queues, input queues)
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 11.2 (Queues, output queues)
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 12.1 (Benchmark, messages #1)
--- Score : 203904 msgs/S, 407808 ctxswc/S
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 12.2 (Benchmark, messages #2)
--- Score : 172027 msgs/S, 344054 ctxswc/S
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 12.3 (Benchmark, messages #3)
--- Score : 172028 msgs/S, 344056 ctxswc/S
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 12.4 (Benchmark, context switch)
--- Score : 604248 ctxswc/S
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 12.5 (Benchmark, threads, full cycle)
--- Score : 136665 threads/S
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 12.6 (Benchmark, threads, create only)
--- Score : 194575 threads/S
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 12.7 (Benchmark, mass reschedule, 5 threads)
--- Score : 53632 reschedules/S, 321792 ctxswc/S
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 12.8 (Benchmark, round robin context switching)
--- Score : 420560 ctxswc/S
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 12.9 (Benchmark, I/O Queues throughput)
--- Score : 519944 bytes/S
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 12.10 (Benchmark, virtual timers set/reset)
--- Score : 857878 timers/S
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 12.11 (Benchmark, semaphores wait/signal)
--- Score : 850996 wait+signal/S
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 12.12 (Benchmark, mutexes lock/unlock)
--- Score : 671816 lock+unlock/S
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 12.13 (Benchmark, RAM footprint)
--- System: 640 bytes
--- Thread: 68 bytes
--- Timer : 20 bytes
--- Semaph: 12 bytes
--- EventS: 4 bytes
--- EventL: 20 bytes
--- Mutex : 16 bytes
--- CondV.: 8 bytes
--- Queue : 36 bytes
--- MailB.: 40 bytes
--- Result: SUCCESS
----------------------------------------------------------------------------
Final result: SUCCESS

View File

@ -1,164 +0,0 @@
*** ChibiOS/RT test suite
***
*** Kernel: 3.1.0
*** Compiled: Jan 4 2016 - 12:24:32
*** Compiler: GCC 4.6.3 build on 2013-01-07
*** Architecture: Power Architecture
*** Core Variant: e200z3
*** Port Info: VLE mode
*** Platform: SPC563Mxx Powertrain
*** Test Board: EVB with SPC563Mxx Mini Module
----------------------------------------------------------------------------
--- Test Case 1.1 (System, critical zones)
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 1.2 (System, interrupts handling)
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 1.3 (System, integrity)
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 2.1 (Threads, enqueuing test #1)
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 2.2 (Threads, enqueuing test #2)
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 2.3 (Threads, priority change)
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 2.4 (Threads, delays)
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 3.1 (Semaphores, enqueuing)
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 3.2 (Semaphores, timeout)
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 3.3 (Semaphores, atomic signal-wait)
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 3.4 (Binary Semaphores, functionality)
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 4.1 (Mutexes, priority enqueuing test)
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 4.2 (Mutexes, priority return)
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 4.3 (Mutexes, status)
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 4.4 (CondVar, signal test)
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 4.5 (CondVar, broadcast test)
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 4.6 (CondVar, boost test)
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 5.1 (Messages, loop)
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 6.1 (Mailboxes, queuing and timeouts)
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 7.1 (Events, registration and dispatch)
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 7.2 (Events, wait and broadcast)
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 7.3 (Events, timeouts)
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 8.1 (Heap, allocation and fragmentation test)
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 9.1 (Memory Pools, queue/dequeue)
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 10.1 (Dynamic APIs, threads creation from heap)
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 10.2 (Dynamic APIs, threads creation from memory pool)
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 10.3 (Dynamic APIs, registry and references)
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 11.1 (Queues, input queues)
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 11.2 (Queues, output queues)
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 12.1 (Benchmark, messages #1)
--- Score : 268017 msgs/S, 536034 ctxswc/S
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 12.2 (Benchmark, messages #2)
--- Score : 217039 msgs/S, 434078 ctxswc/S
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 12.3 (Benchmark, messages #3)
--- Score : 217039 msgs/S, 434078 ctxswc/S
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 12.4 (Benchmark, context switch)
--- Score : 892448 ctxswc/S
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 12.5 (Benchmark, threads, full cycle)
--- Score : 176703 threads/S
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 12.6 (Benchmark, threads, create only)
--- Score : 257645 threads/S
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 12.7 (Benchmark, mass reschedule, 5 threads)
--- Score : 74919 reschedules/S, 449514 ctxswc/S
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 12.8 (Benchmark, round robin context switching)
--- Score : 602240 ctxswc/S
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 12.9 (Benchmark, I/O Queues throughput)
--- Score : 649676 bytes/S
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 12.10 (Benchmark, virtual timers set/reset)
--- Score : 1086362 timers/S
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 12.11 (Benchmark, semaphores wait/signal)
--- Score : 950076 wait+signal/S
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 12.12 (Benchmark, mutexes lock/unlock)
--- Score : 806080 lock+unlock/S
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 12.13 (Benchmark, RAM footprint)
--- System: 640 bytes
--- Thread: 68 bytes
--- Timer : 20 bytes
--- Semaph: 12 bytes
--- EventS: 4 bytes
--- EventL: 20 bytes
--- Mutex : 16 bytes
--- CondV.: 8 bytes
--- Queue : 36 bytes
--- MailB.: 40 bytes
--- Result: SUCCESS
----------------------------------------------------------------------------
Final result: SUCCESS

View File

@ -1,163 +0,0 @@
*** ChibiOS/RT test suite
***
*** Kernel: 3.1.0
*** Compiled: Nov 26 2015 - 10:23:43
*** Compiler: CW
*** Architecture: Power Architecture
*** Core Variant: e200z4
*** Port Info: VLE mode
*** Platform: SPC56ECxx Gateway
*** Test Board: EVB with SPC56ECxx Mini Module
----------------------------------------------------------------------------
--- Test Case 1.1 (System, critical zones)
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 1.2 (System, interrupts handling)
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 1.3 (System, integrity)
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 2.1 (Threads, enqueuing test #1)
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 2.2 (Threads, enqueuing test #2)
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 2.3 (Threads, priority change)
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 2.4 (Threads, delays)
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 3.1 (Semaphores, enqueuing)
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 3.2 (Semaphores, timeout)
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 3.3 (Semaphores, atomic signal-wait)
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 3.4 (Binary Semaphores, functionality)
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 4.1 (Mutexes, priority enqueuing test)
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 4.2 (Mutexes, priority return)
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 4.3 (Mutexes, status)
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 4.4 (CondVar, signal test)
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 4.5 (CondVar, broadcast test)
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 4.6 (CondVar, boost test)
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 5.1 (Messages, loop)
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 6.1 (Mailboxes, queuing and timeouts)
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 7.1 (Events, registration and dispatch)
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 7.2 (Events, wait and broadcast)
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 7.3 (Events, timeouts)
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 8.1 (Heap, allocation and fragmentation test)
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 9.1 (Memory Pools, queue/dequeue)
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 10.1 (Dynamic APIs, threads creation from heap)
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 10.2 (Dynamic APIs, threads creation from memory pool)
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 10.3 (Dynamic APIs, registry and references)
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 11.1 (Queues, input queues)
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 11.2 (Queues, output queues)
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 12.1 (Benchmark, messages #1)
--- Score : 329243 msgs/S, 658486 ctxswc/S
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 12.2 (Benchmark, messages #2)
--- Score : 290181 msgs/S, 580362 ctxswc/S
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 12.3 (Benchmark, messages #3)
--- Score : 290180 msgs/S, 580360 ctxswc/S
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 12.4 (Benchmark, context switch)
--- Score : 1048952 ctxswc/S
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 12.5 (Benchmark, threads, full cycle)
--- Score : 238257 threads/S
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 12.6 (Benchmark, threads, create only)
--- Score : 332900 threads/S
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 12.7 (Benchmark, mass reschedule, 5 threads)
--- Score : 90040 reschedules/S, 540240 ctxswc/S
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 12.8 (Benchmark, round robin context switching)
--- Score : 572860 ctxswc/S
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 12.9 (Benchmark, I/O Queues throughput)
--- Score : 963572 bytes/S
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 12.10 (Benchmark, virtual timers set/reset)
--- Score : 1182066 timers/S
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 12.11 (Benchmark, semaphores wait/signal)
--- Score : 1606860 wait+signal/S
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 12.12 (Benchmark, mutexes lock/unlock)
--- Score : 1245140 lock+unlock/S
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 12.13 (Benchmark, RAM footprint)
--- System: 640 bytes
--- Thread: 68 bytes
--- Timer : 20 bytes
--- Semaph: 12 bytes
--- EventS: 4 bytes
--- EventL: 20 bytes
--- Mutex : 16 bytes
--- CondV.: 8 bytes
--- Queue : 36 bytes
--- MailB.: 40 bytes
--- Result: SUCCESS
----------------------------------------------------------------------------
Final result: SUCCESS

View File

@ -1,163 +0,0 @@
*** ChibiOS/RT test suite
***
*** Kernel: 3.1.0
*** Compiled: Nov 26 2015 - 10:12:00
*** Compiler: GCC 4.6.3 build on 2013-01-07
*** Architecture: Power Architecture
*** Core Variant: e200z4
*** Port Info: VLE mode
*** Platform: SPC56ECxx Gateway
*** Test Board: EVB with SPC56ECxx Mini Module
----------------------------------------------------------------------------
--- Test Case 1.1 (System, critical zones)
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 1.2 (System, interrupts handling)
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 1.3 (System, integrity)
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 2.1 (Threads, enqueuing test #1)
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 2.2 (Threads, enqueuing test #2)
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 2.3 (Threads, priority change)
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 2.4 (Threads, delays)
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 3.1 (Semaphores, enqueuing)
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 3.2 (Semaphores, timeout)
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 3.3 (Semaphores, atomic signal-wait)
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 3.4 (Binary Semaphores, functionality)
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 4.1 (Mutexes, priority enqueuing test)
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 4.2 (Mutexes, priority return)
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 4.3 (Mutexes, status)
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 4.4 (CondVar, signal test)
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 4.5 (CondVar, broadcast test)
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 4.6 (CondVar, boost test)
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 5.1 (Messages, loop)
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 6.1 (Mailboxes, queuing and timeouts)
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 7.1 (Events, registration and dispatch)
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 7.2 (Events, wait and broadcast)
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 7.3 (Events, timeouts)
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 8.1 (Heap, allocation and fragmentation test)
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 9.1 (Memory Pools, queue/dequeue)
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 10.1 (Dynamic APIs, threads creation from heap)
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 10.2 (Dynamic APIs, threads creation from memory pool)
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 10.3 (Dynamic APIs, registry and references)
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 11.1 (Queues, input queues)
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 11.2 (Queues, output queues)
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 12.1 (Benchmark, messages #1)
--- Score : 373370 msgs/S, 746740 ctxswc/S
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 12.2 (Benchmark, messages #2)
--- Score : 308897 msgs/S, 617794 ctxswc/S
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 12.3 (Benchmark, messages #3)
--- Score : 308901 msgs/S, 617802 ctxswc/S
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 12.4 (Benchmark, context switch)
--- Score : 1088344 ctxswc/S
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 12.5 (Benchmark, threads, full cycle)
--- Score : 248658 threads/S
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 12.6 (Benchmark, threads, create only)
--- Score : 367648 threads/S
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 12.7 (Benchmark, mass reschedule, 5 threads)
--- Score : 94298 reschedules/S, 565788 ctxswc/S
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 12.8 (Benchmark, round robin context switching)
--- Score : 680188 ctxswc/S
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 12.9 (Benchmark, I/O Queues throughput)
--- Score : 985940 bytes/S
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 12.10 (Benchmark, virtual timers set/reset)
--- Score : 1477618 timers/S
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 12.11 (Benchmark, semaphores wait/signal)
--- Score : 1762552 wait+signal/S
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 12.12 (Benchmark, mutexes lock/unlock)
--- Score : 1325572 lock+unlock/S
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 12.13 (Benchmark, RAM footprint)
--- System: 640 bytes
--- Thread: 68 bytes
--- Timer : 20 bytes
--- Semaph: 12 bytes
--- EventS: 4 bytes
--- EventL: 20 bytes
--- Mutex : 16 bytes
--- CondV.: 8 bytes
--- Queue : 36 bytes
--- MailB.: 40 bytes
--- Result: SUCCESS
----------------------------------------------------------------------------
Final result: SUCCESS

View File

@ -1,164 +0,0 @@
*** ChibiOS/RT test suite
***
*** Kernel: 3.1.0
*** Compiled: Jan 4 2016 - 12:05:54
*** Compiler: GCC 4.6.3 build on 2013-01-07
*** Architecture: Power Architecture
*** Core Variant: e200z4
*** Port Info: VLE mode
*** Platform: SPC56ELxx Chassis and Safety
*** Test Board: EVB with SPC56ELxx Mini Module
----------------------------------------------------------------------------
--- Test Case 1.1 (System, critical zones)
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 1.2 (System, interrupts handling)
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 1.3 (System, integrity)
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 2.1 (Threads, enqueuing test #1)
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 2.2 (Threads, enqueuing test #2)
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 2.3 (Threads, priority change)
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 2.4 (Threads, delays)
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 3.1 (Semaphores, enqueuing)
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 3.2 (Semaphores, timeout)
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 3.3 (Semaphores, atomic signal-wait)
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 3.4 (Binary Semaphores, functionality)
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 4.1 (Mutexes, priority enqueuing test)
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 4.2 (Mutexes, priority return)
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 4.3 (Mutexes, status)
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 4.4 (CondVar, signal test)
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 4.5 (CondVar, broadcast test)
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 4.6 (CondVar, boost test)
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 5.1 (Messages, loop)
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 6.1 (Mailboxes, queuing and timeouts)
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 7.1 (Events, registration and dispatch)
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 7.2 (Events, wait and broadcast)
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 7.3 (Events, timeouts)
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 8.1 (Heap, allocation and fragmentation test)
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 9.1 (Memory Pools, queue/dequeue)
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 10.1 (Dynamic APIs, threads creation from heap)
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 10.2 (Dynamic APIs, threads creation from memory pool)
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 10.3 (Dynamic APIs, registry and references)
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 11.1 (Queues, input queues)
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 11.2 (Queues, output queues)
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 12.1 (Benchmark, messages #1)
--- Score : 380488 msgs/S, 760976 ctxswc/S
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 12.2 (Benchmark, messages #2)
--- Score : 315402 msgs/S, 630804 ctxswc/S
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 12.3 (Benchmark, messages #3)
--- Score : 315402 msgs/S, 630804 ctxswc/S
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 12.4 (Benchmark, context switch)
--- Score : 1108472 ctxswc/S
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 12.5 (Benchmark, threads, full cycle)
--- Score : 253926 threads/S
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 12.6 (Benchmark, threads, create only)
--- Score : 375717 threads/S
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 12.7 (Benchmark, mass reschedule, 5 threads)
--- Score : 95576 reschedules/S, 573456 ctxswc/S
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 12.8 (Benchmark, round robin context switching)
--- Score : 688012 ctxswc/S
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 12.9 (Benchmark, I/O Queues throughput)
--- Score : 994116 bytes/S
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 12.10 (Benchmark, virtual timers set/reset)
--- Score : 1472694 timers/S
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 12.11 (Benchmark, semaphores wait/signal)
--- Score : 1762556 wait+signal/S
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 12.12 (Benchmark, mutexes lock/unlock)
--- Score : 1325572 lock+unlock/S
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 12.13 (Benchmark, RAM footprint)
--- System: 640 bytes
--- Thread: 68 bytes
--- Timer : 20 bytes
--- Semaph: 12 bytes
--- EventS: 4 bytes
--- EventL: 20 bytes
--- Mutex : 16 bytes
--- CondV.: 8 bytes
--- Queue : 36 bytes
--- MailB.: 40 bytes
--- Result: SUCCESS
----------------------------------------------------------------------------
Final result: SUCCESS

View File

@ -1,164 +0,0 @@
*** ChibiOS/RT test suite
***
*** Kernel: 3.1.0
*** Compiled: Jan 6 2016 - 10:53:39
*** Compiler: GCC 4.9.3 20150529 (release) [ARM/embedded-4_9-branch revision 227977]
*** Architecture: ARMv6-M
*** Core Variant: Cortex-M0
*** Port Info: Preemption through NMI
*** Platform: STM32F051x8 Entry Level Medium Density devices
*** Test Board: ST STM32F0-Discovery
----------------------------------------------------------------------------
--- Test Case 1.1 (System, critical zones)
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 1.2 (System, interrupts handling)
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 1.3 (System, integrity)
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 2.1 (Threads, enqueuing test #1)
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 2.2 (Threads, enqueuing test #2)
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 2.3 (Threads, priority change)
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 2.4 (Threads, delays)
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 3.1 (Semaphores, enqueuing)
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 3.2 (Semaphores, timeout)
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 3.3 (Semaphores, atomic signal-wait)
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 3.4 (Binary Semaphores, functionality)
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 4.1 (Mutexes, priority enqueuing test)
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 4.2 (Mutexes, priority return)
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 4.3 (Mutexes, status)
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 4.4 (CondVar, signal test)
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 4.5 (CondVar, broadcast test)
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 4.6 (CondVar, boost test)
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 5.1 (Messages, loop)
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 6.1 (Mailboxes, queuing and timeouts)
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 7.1 (Events, registration and dispatch)
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 7.2 (Events, wait and broadcast)
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 7.3 (Events, timeouts)
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 8.1 (Heap, allocation and fragmentation test)
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 9.1 (Memory Pools, queue/dequeue)
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 10.1 (Dynamic APIs, threads creation from heap)
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 10.2 (Dynamic APIs, threads creation from memory pool)
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 10.3 (Dynamic APIs, registry and references)
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 11.1 (Queues, input queues)
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 11.2 (Queues, output queues)
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 12.1 (Benchmark, messages #1)
--- Score : 161605 msgs/S, 323210 ctxswc/S
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 12.2 (Benchmark, messages #2)
--- Score : 128334 msgs/S, 256668 ctxswc/S
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 12.3 (Benchmark, messages #3)
--- Score : 128334 msgs/S, 256668 ctxswc/S
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 12.4 (Benchmark, context switch)
--- Score : 466560 ctxswc/S
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 12.5 (Benchmark, threads, full cycle)
--- Score : 102121 threads/S
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 12.6 (Benchmark, threads, create only)
--- Score : 146779 threads/S
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 12.7 (Benchmark, mass reschedule, 5 threads)
--- Score : 40506 reschedules/S, 243036 ctxswc/S
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 12.8 (Benchmark, round robin context switching)
--- Score : 339200 ctxswc/S
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 12.9 (Benchmark, I/O Queues throughput)
--- Score : 413564 bytes/S
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 12.10 (Benchmark, virtual timers set/reset)
--- Score : 295818 timers/S
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 12.11 (Benchmark, semaphores wait/signal)
--- Score : 872708 wait+signal/S
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 12.12 (Benchmark, mutexes lock/unlock)
--- Score : 428564 lock+unlock/S
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 12.13 (Benchmark, RAM footprint)
--- System: 336 bytes
--- Thread: 68 bytes
--- Timer : 20 bytes
--- Semaph: 12 bytes
--- EventS: 4 bytes
--- EventL: 20 bytes
--- Mutex : 16 bytes
--- CondV.: 8 bytes
--- Queue : 36 bytes
--- MailB.: 40 bytes
--- Result: SUCCESS
----------------------------------------------------------------------------
Final result: SUCCESS

View File

@ -1,164 +0,0 @@
*** ChibiOS/RT test suite
***
*** Kernel: 3.1.0
*** Compiled: Jan 6 2016 - 11:01:25
*** Compiler: GCC 4.9.3 20150529 (release) [ARM/embedded-4_9-branch revision 227977]
*** Architecture: ARMv7E-M
*** Core Variant: Cortex-M4F
*** Port Info: Advanced kernel mode
*** Platform: STM32F303xC Analog & DSP
*** Test Board: STMicroelectronics STM32F3-Discovery
----------------------------------------------------------------------------
--- Test Case 1.1 (System, critical zones)
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 1.2 (System, interrupts handling)
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 1.3 (System, integrity)
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 2.1 (Threads, enqueuing test #1)
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 2.2 (Threads, enqueuing test #2)
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 2.3 (Threads, priority change)
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 2.4 (Threads, delays)
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 3.1 (Semaphores, enqueuing)
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 3.2 (Semaphores, timeout)
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 3.3 (Semaphores, atomic signal-wait)
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 3.4 (Binary Semaphores, functionality)
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 4.1 (Mutexes, priority enqueuing test)
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 4.2 (Mutexes, priority return)
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 4.3 (Mutexes, status)
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 4.4 (CondVar, signal test)
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 4.5 (CondVar, broadcast test)
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 4.6 (CondVar, boost test)
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 5.1 (Messages, loop)
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 6.1 (Mailboxes, queuing and timeouts)
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 7.1 (Events, registration and dispatch)
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 7.2 (Events, wait and broadcast)
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 7.3 (Events, timeouts)
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 8.1 (Heap, allocation and fragmentation test)
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 9.1 (Memory Pools, queue/dequeue)
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 10.1 (Dynamic APIs, threads creation from heap)
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 10.2 (Dynamic APIs, threads creation from memory pool)
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 10.3 (Dynamic APIs, registry and references)
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 11.1 (Queues, input queues)
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 11.2 (Queues, output queues)
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 12.1 (Benchmark, messages #1)
--- Score : 221513 msgs/S, 443026 ctxswc/S
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 12.2 (Benchmark, messages #2)
--- Score : 179981 msgs/S, 359962 ctxswc/S
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 12.3 (Benchmark, messages #3)
--- Score : 179981 msgs/S, 359962 ctxswc/S
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 12.4 (Benchmark, context switch)
--- Score : 639224 ctxswc/S
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 12.5 (Benchmark, threads, full cycle)
--- Score : 135323 threads/S
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 12.6 (Benchmark, threads, create only)
--- Score : 193007 threads/S
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 12.7 (Benchmark, mass reschedule, 5 threads)
--- Score : 57092 reschedules/S, 342552 ctxswc/S
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 12.8 (Benchmark, round robin context switching)
--- Score : 449948 ctxswc/S
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 12.9 (Benchmark, I/O Queues throughput)
--- Score : 619284 bytes/S
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 12.10 (Benchmark, virtual timers set/reset)
--- Score : 431154 timers/S
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 12.11 (Benchmark, semaphores wait/signal)
--- Score : 1035852 wait+signal/S
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 12.12 (Benchmark, mutexes lock/unlock)
--- Score : 597440 lock+unlock/S
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 12.13 (Benchmark, RAM footprint)
--- System: 472 bytes
--- Thread: 68 bytes
--- Timer : 20 bytes
--- Semaph: 12 bytes
--- EventS: 4 bytes
--- EventL: 20 bytes
--- Mutex : 16 bytes
--- CondV.: 8 bytes
--- Queue : 36 bytes
--- MailB.: 40 bytes
--- Result: SUCCESS
----------------------------------------------------------------------------
Final result: SUCCESS

View File

@ -1,164 +0,0 @@
*** ChibiOS/RT test suite
***
*** Kernel: 3.1.0
*** Compiled: Jan 6 2016 - 10:57:31
*** Compiler: GCC 4.9.3 20150529 (release) [ARM/embedded-4_9-branch revision 227977]
*** Architecture: ARMv7E-M
*** Core Variant: Cortex-M4
*** Port Info: Advanced kernel mode
*** Platform: STM32F303xC Analog & DSP
*** Test Board: STMicroelectronics STM32F3-Discovery
----------------------------------------------------------------------------
--- Test Case 1.1 (System, critical zones)
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 1.2 (System, interrupts handling)
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 1.3 (System, integrity)
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 2.1 (Threads, enqueuing test #1)
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 2.2 (Threads, enqueuing test #2)
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 2.3 (Threads, priority change)
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 2.4 (Threads, delays)
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 3.1 (Semaphores, enqueuing)
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 3.2 (Semaphores, timeout)
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 3.3 (Semaphores, atomic signal-wait)
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 3.4 (Binary Semaphores, functionality)
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 4.1 (Mutexes, priority enqueuing test)
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 4.2 (Mutexes, priority return)
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 4.3 (Mutexes, status)
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 4.4 (CondVar, signal test)
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 4.5 (CondVar, broadcast test)
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 4.6 (CondVar, boost test)
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 5.1 (Messages, loop)
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 6.1 (Mailboxes, queuing and timeouts)
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 7.1 (Events, registration and dispatch)
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 7.2 (Events, wait and broadcast)
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 7.3 (Events, timeouts)
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 8.1 (Heap, allocation and fragmentation test)
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 9.1 (Memory Pools, queue/dequeue)
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 10.1 (Dynamic APIs, threads creation from heap)
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 10.2 (Dynamic APIs, threads creation from memory pool)
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 10.3 (Dynamic APIs, registry and references)
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 11.1 (Queues, input queues)
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 11.2 (Queues, output queues)
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 12.1 (Benchmark, messages #1)
--- Score : 280128 msgs/S, 560256 ctxswc/S
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 12.2 (Benchmark, messages #2)
--- Score : 216847 msgs/S, 433694 ctxswc/S
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 12.3 (Benchmark, messages #3)
--- Score : 216847 msgs/S, 433694 ctxswc/S
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 12.4 (Benchmark, context switch)
--- Score : 915664 ctxswc/S
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 12.5 (Benchmark, threads, full cycle)
--- Score : 158227 threads/S
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 12.6 (Benchmark, threads, create only)
--- Score : 243222 threads/S
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 12.7 (Benchmark, mass reschedule, 5 threads)
--- Score : 68111 reschedules/S, 408666 ctxswc/S
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 12.8 (Benchmark, round robin context switching)
--- Score : 571380 ctxswc/S
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 12.9 (Benchmark, I/O Queues throughput)
--- Score : 619296 bytes/S
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 12.10 (Benchmark, virtual timers set/reset)
--- Score : 431168 timers/S
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 12.11 (Benchmark, semaphores wait/signal)
--- Score : 1035872 wait+signal/S
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 12.12 (Benchmark, mutexes lock/unlock)
--- Score : 597452 lock+unlock/S
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 12.13 (Benchmark, RAM footprint)
--- System: 336 bytes
--- Thread: 68 bytes
--- Timer : 20 bytes
--- Semaph: 12 bytes
--- EventS: 4 bytes
--- EventL: 20 bytes
--- Mutex : 16 bytes
--- CondV.: 8 bytes
--- Queue : 36 bytes
--- MailB.: 40 bytes
--- Result: SUCCESS
----------------------------------------------------------------------------
Final result: SUCCESS

View File

@ -1,164 +0,0 @@
*** ChibiOS/RT test suite
***
*** Kernel: 3.1.0
*** Compiled: Jan 6 2016 - 11:08:52
*** Compiler: IAR
*** Architecture: ARMv7E-M
*** Core Variant: Cortex-M4F
*** Port Info: Advanced kernel mode
*** Platform: STM32F303xC Analog & DSP
*** Test Board: STMicroelectronics STM32F3-Discovery
----------------------------------------------------------------------------
--- Test Case 1.1 (System, critical zones)
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 1.2 (System, interrupts handling)
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 1.3 (System, integrity)
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 2.1 (Threads, enqueuing test #1)
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 2.2 (Threads, enqueuing test #2)
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 2.3 (Threads, priority change)
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 2.4 (Threads, delays)
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 3.1 (Semaphores, enqueuing)
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 3.2 (Semaphores, timeout)
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 3.3 (Semaphores, atomic signal-wait)
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 3.4 (Binary Semaphores, functionality)
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 4.1 (Mutexes, priority enqueuing test)
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 4.2 (Mutexes, priority return)
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 4.3 (Mutexes, status)
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 4.4 (CondVar, signal test)
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 4.5 (CondVar, broadcast test)
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 4.6 (CondVar, boost test)
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 5.1 (Messages, loop)
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 6.1 (Mailboxes, queuing and timeouts)
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 7.1 (Events, registration and dispatch)
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 7.2 (Events, wait and broadcast)
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 7.3 (Events, timeouts)
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 8.1 (Heap, allocation and fragmentation test)
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 9.1 (Memory Pools, queue/dequeue)
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 10.1 (Dynamic APIs, threads creation from heap)
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 10.2 (Dynamic APIs, threads creation from memory pool)
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 10.3 (Dynamic APIs, registry and references)
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 11.1 (Queues, input queues)
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 11.2 (Queues, output queues)
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 12.1 (Benchmark, messages #1)
--- Score : 212992 msgs/S, 425984 ctxswc/S
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 12.2 (Benchmark, messages #2)
--- Score : 193007 msgs/S, 386014 ctxswc/S
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 12.3 (Benchmark, messages #3)
--- Score : 193007 msgs/S, 386014 ctxswc/S
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 12.4 (Benchmark, context switch)
--- Score : 630816 ctxswc/S
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 12.5 (Benchmark, threads, full cycle)
--- Score : 129017 threads/S
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 12.6 (Benchmark, threads, create only)
--- Score : 177319 threads/S
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 12.7 (Benchmark, mass reschedule, 5 threads)
--- Score : 57918 reschedules/S, 347508 ctxswc/S
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 12.8 (Benchmark, round robin context switching)
--- Score : 373500 ctxswc/S
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 12.9 (Benchmark, I/O Queues throughput)
--- Score : 695568 bytes/S
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 12.10 (Benchmark, virtual timers set/reset)
--- Score : 549580 timers/S
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 12.11 (Benchmark, semaphores wait/signal)
--- Score : 999876 wait+signal/S
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 12.12 (Benchmark, mutexes lock/unlock)
--- Score : 702352 lock+unlock/S
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 12.13 (Benchmark, RAM footprint)
--- System: 472 bytes
--- Thread: 68 bytes
--- Timer : 20 bytes
--- Semaph: 12 bytes
--- EventS: 4 bytes
--- EventL: 20 bytes
--- Mutex : 16 bytes
--- CondV.: 8 bytes
--- Queue : 36 bytes
--- MailB.: 40 bytes
--- Result: SUCCESS
----------------------------------------------------------------------------
Final result: SUCCESS

View File

@ -1,164 +0,0 @@
*** ChibiOS/RT test suite
***
*** Kernel: 3.1.0
*** Compiled: Jan 6 2016 - 11:15:40
*** Compiler: IAR
*** Architecture: ARMv7E-M
*** Core Variant: Cortex-M4
*** Port Info: Advanced kernel mode
*** Platform: STM32F303xC Analog & DSP
*** Test Board: STMicroelectronics STM32F3-Discovery
----------------------------------------------------------------------------
--- Test Case 1.1 (System, critical zones)
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 1.2 (System, interrupts handling)
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 1.3 (System, integrity)
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 2.1 (Threads, enqueuing test #1)
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 2.2 (Threads, enqueuing test #2)
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 2.3 (Threads, priority change)
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 2.4 (Threads, delays)
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 3.1 (Semaphores, enqueuing)
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 3.2 (Semaphores, timeout)
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 3.3 (Semaphores, atomic signal-wait)
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 3.4 (Binary Semaphores, functionality)
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 4.1 (Mutexes, priority enqueuing test)
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 4.2 (Mutexes, priority return)
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 4.3 (Mutexes, status)
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 4.4 (CondVar, signal test)
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 4.5 (CondVar, broadcast test)
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 4.6 (CondVar, boost test)
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 5.1 (Messages, loop)
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 6.1 (Mailboxes, queuing and timeouts)
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 7.1 (Events, registration and dispatch)
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 7.2 (Events, wait and broadcast)
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 7.3 (Events, timeouts)
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 8.1 (Heap, allocation and fragmentation test)
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 9.1 (Memory Pools, queue/dequeue)
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 10.1 (Dynamic APIs, threads creation from heap)
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 10.2 (Dynamic APIs, threads creation from memory pool)
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 10.3 (Dynamic APIs, registry and references)
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 11.1 (Queues, input queues)
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 11.2 (Queues, output queues)
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 12.1 (Benchmark, messages #1)
--- Score : 272698 msgs/S, 545396 ctxswc/S
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 12.2 (Benchmark, messages #2)
--- Score : 239975 msgs/S, 479950 ctxswc/S
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 12.3 (Benchmark, messages #3)
--- Score : 239975 msgs/S, 479950 ctxswc/S
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 12.4 (Benchmark, context switch)
--- Score : 888808 ctxswc/S
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 12.5 (Benchmark, threads, full cycle)
--- Score : 146923 threads/S
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 12.6 (Benchmark, threads, create only)
--- Score : 212367 threads/S
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 12.7 (Benchmark, mass reschedule, 5 threads)
--- Score : 69693 reschedules/S, 418158 ctxswc/S
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 12.8 (Benchmark, round robin context switching)
--- Score : 453500 ctxswc/S
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 12.9 (Benchmark, I/O Queues throughput)
--- Score : 698532 bytes/S
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 12.10 (Benchmark, virtual timers set/reset)
--- Score : 580638 timers/S
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 12.11 (Benchmark, semaphores wait/signal)
--- Score : 993000 wait+signal/S
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 12.12 (Benchmark, mutexes lock/unlock)
--- Score : 698956 lock+unlock/S
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 12.13 (Benchmark, RAM footprint)
--- System: 336 bytes
--- Thread: 68 bytes
--- Timer : 20 bytes
--- Semaph: 12 bytes
--- EventS: 4 bytes
--- EventL: 20 bytes
--- Mutex : 16 bytes
--- CondV.: 8 bytes
--- Queue : 36 bytes
--- MailB.: 40 bytes
--- Result: SUCCESS
----------------------------------------------------------------------------
Final result: SUCCESS

View File

@ -1,164 +0,0 @@
*** ChibiOS/RT test suite
***
*** Kernel: 3.1.0
*** Compiled: Jan 6 2016 - 11:19:30
*** Compiler: RVCT
*** Architecture: ARMv7E-M
*** Core Variant: Cortex-M4F
*** Port Info: Advanced kernel mode
*** Platform: STM32F303xC Analog & DSP
*** Test Board: STMicroelectronics STM32F3-Discovery
----------------------------------------------------------------------------
--- Test Case 1.1 (System, critical zones)
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 1.2 (System, interrupts handling)
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 1.3 (System, integrity)
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 2.1 (Threads, enqueuing test #1)
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 2.2 (Threads, enqueuing test #2)
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 2.3 (Threads, priority change)
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 2.4 (Threads, delays)
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 3.1 (Semaphores, enqueuing)
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 3.2 (Semaphores, timeout)
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 3.3 (Semaphores, atomic signal-wait)
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 3.4 (Binary Semaphores, functionality)
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 4.1 (Mutexes, priority enqueuing test)
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 4.2 (Mutexes, priority return)
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 4.3 (Mutexes, status)
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 4.4 (CondVar, signal test)
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 4.5 (CondVar, broadcast test)
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 4.6 (CondVar, boost test)
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 5.1 (Messages, loop)
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 6.1 (Mailboxes, queuing and timeouts)
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 7.1 (Events, registration and dispatch)
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 7.2 (Events, wait and broadcast)
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 7.3 (Events, timeouts)
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 8.1 (Heap, allocation and fragmentation test)
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 9.1 (Memory Pools, queue/dequeue)
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 10.1 (Dynamic APIs, threads creation from heap)
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 10.2 (Dynamic APIs, threads creation from memory pool)
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 10.3 (Dynamic APIs, registry and references)
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 11.1 (Queues, input queues)
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 11.2 (Queues, output queues)
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 12.1 (Benchmark, messages #1)
--- Score : 201655 msgs/S, 403310 ctxswc/S
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 12.2 (Benchmark, messages #2)
--- Score : 179978 msgs/S, 359956 ctxswc/S
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 12.3 (Benchmark, messages #3)
--- Score : 179979 msgs/S, 359958 ctxswc/S
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 12.4 (Benchmark, context switch)
--- Score : 630120 ctxswc/S
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 12.5 (Benchmark, threads, full cycle)
--- Score : 138444 threads/S
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 12.6 (Benchmark, threads, create only)
--- Score : 197237 threads/S
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 12.7 (Benchmark, mass reschedule, 5 threads)
--- Score : 57593 reschedules/S, 345558 ctxswc/S
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 12.8 (Benchmark, round robin context switching)
--- Score : 413144 ctxswc/S
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 12.9 (Benchmark, I/O Queues throughput)
--- Score : 559424 bytes/S
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 12.10 (Benchmark, virtual timers set/reset)
--- Score : 349538 timers/S
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 12.11 (Benchmark, semaphores wait/signal)
--- Score : 877936 wait+signal/S
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 12.12 (Benchmark, mutexes lock/unlock)
--- Score : 590088 lock+unlock/S
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 12.13 (Benchmark, RAM footprint)
--- System: 472 bytes
--- Thread: 68 bytes
--- Timer : 20 bytes
--- Semaph: 12 bytes
--- EventS: 4 bytes
--- EventL: 20 bytes
--- Mutex : 16 bytes
--- CondV.: 8 bytes
--- Queue : 36 bytes
--- MailB.: 40 bytes
--- Result: SUCCESS
----------------------------------------------------------------------------
Final result: SUCCESS

View File

@ -1,164 +0,0 @@
*** ChibiOS/RT test suite
***
*** Kernel: 3.1.0
*** Compiled: Jan 6 2016 - 11:24:19
*** Compiler: RVCT
*** Architecture: ARMv7E-M
*** Core Variant: Cortex-M4
*** Port Info: Advanced kernel mode
*** Platform: STM32F303xC Analog & DSP
*** Test Board: STMicroelectronics STM32F3-Discovery
----------------------------------------------------------------------------
--- Test Case 1.1 (System, critical zones)
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 1.2 (System, interrupts handling)
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 1.3 (System, integrity)
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 2.1 (Threads, enqueuing test #1)
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 2.2 (Threads, enqueuing test #2)
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 2.3 (Threads, priority change)
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 2.4 (Threads, delays)
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 3.1 (Semaphores, enqueuing)
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 3.2 (Semaphores, timeout)
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 3.3 (Semaphores, atomic signal-wait)
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 3.4 (Binary Semaphores, functionality)
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 4.1 (Mutexes, priority enqueuing test)
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 4.2 (Mutexes, priority return)
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 4.3 (Mutexes, status)
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 4.4 (CondVar, signal test)
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 4.5 (CondVar, broadcast test)
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 4.6 (CondVar, boost test)
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 5.1 (Messages, loop)
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 6.1 (Mailboxes, queuing and timeouts)
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 7.1 (Events, registration and dispatch)
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 7.2 (Events, wait and broadcast)
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 7.3 (Events, timeouts)
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 8.1 (Heap, allocation and fragmentation test)
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 9.1 (Memory Pools, queue/dequeue)
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 10.1 (Dynamic APIs, threads creation from heap)
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 10.2 (Dynamic APIs, threads creation from memory pool)
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 10.3 (Dynamic APIs, registry and references)
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 11.1 (Queues, input queues)
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 11.2 (Queues, output queues)
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 12.1 (Benchmark, messages #1)
--- Score : 248249 msgs/S, 496498 ctxswc/S
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 12.2 (Benchmark, messages #2)
--- Score : 216194 msgs/S, 432388 ctxswc/S
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 12.3 (Benchmark, messages #3)
--- Score : 216194 msgs/S, 432388 ctxswc/S
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 12.4 (Benchmark, context switch)
--- Score : 897104 ctxswc/S
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 12.5 (Benchmark, threads, full cycle)
--- Score : 158225 threads/S
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 12.6 (Benchmark, threads, create only)
--- Score : 239177 threads/S
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 12.7 (Benchmark, mass reschedule, 5 threads)
--- Score : 69091 reschedules/S, 414546 ctxswc/S
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 12.8 (Benchmark, round robin context switching)
--- Score : 513320 ctxswc/S
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 12.9 (Benchmark, I/O Queues throughput)
--- Score : 568268 bytes/S
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 12.10 (Benchmark, virtual timers set/reset)
--- Score : 344538 timers/S
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 12.11 (Benchmark, semaphores wait/signal)
--- Score : 857048 wait+signal/S
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 12.12 (Benchmark, mutexes lock/unlock)
--- Score : 580584 lock+unlock/S
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 12.13 (Benchmark, RAM footprint)
--- System: 336 bytes
--- Thread: 68 bytes
--- Timer : 20 bytes
--- Semaph: 12 bytes
--- EventS: 4 bytes
--- EventL: 20 bytes
--- Mutex : 16 bytes
--- CondV.: 8 bytes
--- Queue : 36 bytes
--- MailB.: 40 bytes
--- Result: SUCCESS
----------------------------------------------------------------------------
Final result: SUCCESS

View File

@ -1,164 +0,0 @@
*** ChibiOS/RT test suite
***
*** Kernel: 3.1.0
*** Compiled: Jan 6 2016 - 11:35:21
*** Compiler: GCC 4.9.3 20150529 (release) [ARM/embedded-4_9-branch revision 227977]
*** Architecture: ARMv7E-M
*** Core Variant: Cortex-M4F
*** Port Info: Advanced kernel mode
*** Platform: STM32F407 High Performance with DSP and FPU
*** Test Board: STMicroelectronics STM32F4-Discovery
----------------------------------------------------------------------------
--- Test Case 1.1 (System, critical zones)
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 1.2 (System, interrupts handling)
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 1.3 (System, integrity)
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 2.1 (Threads, enqueuing test #1)
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 2.2 (Threads, enqueuing test #2)
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 2.3 (Threads, priority change)
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 2.4 (Threads, delays)
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 3.1 (Semaphores, enqueuing)
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 3.2 (Semaphores, timeout)
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 3.3 (Semaphores, atomic signal-wait)
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 3.4 (Binary Semaphores, functionality)
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 4.1 (Mutexes, priority enqueuing test)
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 4.2 (Mutexes, priority return)
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 4.3 (Mutexes, status)
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 4.4 (CondVar, signal test)
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 4.5 (CondVar, broadcast test)
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 4.6 (CondVar, boost test)
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 5.1 (Messages, loop)
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 6.1 (Mailboxes, queuing and timeouts)
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 7.1 (Events, registration and dispatch)
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 7.2 (Events, wait and broadcast)
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 7.3 (Events, timeouts)
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 8.1 (Heap, allocation and fragmentation test)
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 9.1 (Memory Pools, queue/dequeue)
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 10.1 (Dynamic APIs, threads creation from heap)
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 10.2 (Dynamic APIs, threads creation from memory pool)
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 10.3 (Dynamic APIs, registry and references)
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 11.1 (Queues, input queues)
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 11.2 (Queues, output queues)
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 12.1 (Benchmark, messages #1)
--- Score : 606492 msgs/S, 1212984 ctxswc/S
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 12.2 (Benchmark, messages #2)
--- Score : 506019 msgs/S, 1012038 ctxswc/S
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 12.3 (Benchmark, messages #3)
--- Score : 506019 msgs/S, 1012038 ctxswc/S
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 12.4 (Benchmark, context switch)
--- Score : 1690560 ctxswc/S
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 12.5 (Benchmark, threads, full cycle)
--- Score : 385317 threads/S
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 12.6 (Benchmark, threads, create only)
--- Score : 533328 threads/S
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 12.7 (Benchmark, mass reschedule, 5 threads)
--- Score : 162948 reschedules/S, 977688 ctxswc/S
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 12.8 (Benchmark, round robin context switching)
--- Score : 1219588 ctxswc/S
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 12.9 (Benchmark, I/O Queues throughput)
--- Score : 1802808 bytes/S
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 12.10 (Benchmark, virtual timers set/reset)
--- Score : 1344032 timers/S
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 12.11 (Benchmark, semaphores wait/signal)
--- Score : 3862052 wait+signal/S
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 12.12 (Benchmark, mutexes lock/unlock)
--- Score : 2036356 lock+unlock/S
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 12.13 (Benchmark, RAM footprint)
--- System: 472 bytes
--- Thread: 68 bytes
--- Timer : 20 bytes
--- Semaph: 12 bytes
--- EventS: 4 bytes
--- EventL: 20 bytes
--- Mutex : 16 bytes
--- CondV.: 8 bytes
--- Queue : 36 bytes
--- MailB.: 40 bytes
--- Result: SUCCESS
----------------------------------------------------------------------------
Final result: SUCCESS

View File

@ -1,164 +0,0 @@
*** ChibiOS/RT test suite
***
*** Kernel: 3.1.0
*** Compiled: Jan 6 2016 - 11:31:34
*** Compiler: GCC 4.9.3 20150529 (release) [ARM/embedded-4_9-branch revision 227977]
*** Architecture: ARMv7E-M
*** Core Variant: Cortex-M4
*** Port Info: Advanced kernel mode
*** Platform: STM32F407 High Performance with DSP and FPU
*** Test Board: STMicroelectronics STM32F4-Discovery
----------------------------------------------------------------------------
--- Test Case 1.1 (System, critical zones)
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 1.2 (System, interrupts handling)
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 1.3 (System, integrity)
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 2.1 (Threads, enqueuing test #1)
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 2.2 (Threads, enqueuing test #2)
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 2.3 (Threads, priority change)
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 2.4 (Threads, delays)
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 3.1 (Semaphores, enqueuing)
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 3.2 (Semaphores, timeout)
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 3.3 (Semaphores, atomic signal-wait)
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 3.4 (Binary Semaphores, functionality)
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 4.1 (Mutexes, priority enqueuing test)
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 4.2 (Mutexes, priority return)
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 4.3 (Mutexes, status)
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 4.4 (CondVar, signal test)
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 4.5 (CondVar, broadcast test)
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 4.6 (CondVar, boost test)
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 5.1 (Messages, loop)
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 6.1 (Mailboxes, queuing and timeouts)
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 7.1 (Events, registration and dispatch)
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 7.2 (Events, wait and broadcast)
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 7.3 (Events, timeouts)
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 8.1 (Heap, allocation and fragmentation test)
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 9.1 (Memory Pools, queue/dequeue)
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 10.1 (Dynamic APIs, threads creation from heap)
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 10.2 (Dynamic APIs, threads creation from memory pool)
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 10.3 (Dynamic APIs, registry and references)
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 11.1 (Queues, input queues)
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 11.2 (Queues, output queues)
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 12.1 (Benchmark, messages #1)
--- Score : 803821 msgs/S, 1607642 ctxswc/S
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 12.2 (Benchmark, messages #2)
--- Score : 636359 msgs/S, 1272718 ctxswc/S
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 12.3 (Benchmark, messages #3)
--- Score : 636358 msgs/S, 1272716 ctxswc/S
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 12.4 (Benchmark, context switch)
--- Score : 2569784 ctxswc/S
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 12.5 (Benchmark, threads, full cycle)
--- Score : 459013 threads/S
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 12.6 (Benchmark, threads, create only)
--- Score : 688519 threads/S
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 12.7 (Benchmark, mass reschedule, 5 threads)
--- Score : 203143 reschedules/S, 1218858 ctxswc/S
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 12.8 (Benchmark, round robin context switching)
--- Score : 1619260 ctxswc/S
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 12.9 (Benchmark, I/O Queues throughput)
--- Score : 1802812 bytes/S
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 12.10 (Benchmark, virtual timers set/reset)
--- Score : 1344184 timers/S
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 12.11 (Benchmark, semaphores wait/signal)
--- Score : 3862056 wait+signal/S
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 12.12 (Benchmark, mutexes lock/unlock)
--- Score : 2036356 lock+unlock/S
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 12.13 (Benchmark, RAM footprint)
--- System: 336 bytes
--- Thread: 68 bytes
--- Timer : 20 bytes
--- Semaph: 12 bytes
--- EventS: 4 bytes
--- EventL: 20 bytes
--- Mutex : 16 bytes
--- CondV.: 8 bytes
--- Queue : 36 bytes
--- MailB.: 40 bytes
--- Result: SUCCESS
----------------------------------------------------------------------------
Final result: SUCCESS

View File

@ -1,164 +0,0 @@
*** ChibiOS/RT test suite
***
*** Kernel: 3.1.0
*** Compiled: Jan 4 2016 - 11:55:52
*** Compiler: GCC 4.9.3 20150529 (release) [ARM/embedded-4_9-branch revision 227977]
*** Architecture: ARMv7E-M
*** Core Variant: Cortex-M7F
*** Port Info: Advanced kernel mode
*** Platform: STM32F746 Very High Performance with DSP and FPU
*** Test Board: STMicroelectronics STM32F746G-Discovery
----------------------------------------------------------------------------
--- Test Case 1.1 (System, critical zones)
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 1.2 (System, interrupts handling)
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 1.3 (System, integrity)
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 2.1 (Threads, enqueuing test #1)
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 2.2 (Threads, enqueuing test #2)
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 2.3 (Threads, priority change)
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 2.4 (Threads, delays)
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 3.1 (Semaphores, enqueuing)
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 3.2 (Semaphores, timeout)
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 3.3 (Semaphores, atomic signal-wait)
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 3.4 (Binary Semaphores, functionality)
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 4.1 (Mutexes, priority enqueuing test)
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 4.2 (Mutexes, priority return)
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 4.3 (Mutexes, status)
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 4.4 (CondVar, signal test)
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 4.5 (CondVar, broadcast test)
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 4.6 (CondVar, boost test)
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 5.1 (Messages, loop)
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 6.1 (Mailboxes, queuing and timeouts)
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 7.1 (Events, registration and dispatch)
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 7.2 (Events, wait and broadcast)
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 7.3 (Events, timeouts)
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 8.1 (Heap, allocation and fragmentation test)
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 9.1 (Memory Pools, queue/dequeue)
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 10.1 (Dynamic APIs, threads creation from heap)
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 10.2 (Dynamic APIs, threads creation from memory pool)
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 10.3 (Dynamic APIs, registry and references)
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 11.1 (Queues, input queues)
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 11.2 (Queues, output queues)
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 12.1 (Benchmark, messages #1)
--- Score : 923070 msgs/S, 1846140 ctxswc/S
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 12.2 (Benchmark, messages #2)
--- Score : 833971 msgs/S, 1667942 ctxswc/S
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 12.3 (Benchmark, messages #3)
--- Score : 833970 msgs/S, 1667940 ctxswc/S
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 12.4 (Benchmark, context switch)
--- Score : 3570224 ctxswc/S
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 12.5 (Benchmark, threads, full cycle)
--- Score : 640942 threads/S
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 12.6 (Benchmark, threads, create only)
--- Score : 947361 threads/S
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 12.7 (Benchmark, mass reschedule, 5 threads)
--- Score : 299484 reschedules/S, 1796904 ctxswc/S
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 12.8 (Benchmark, round robin context switching)
--- Score : 2122840 ctxswc/S
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 12.9 (Benchmark, I/O Queues throughput)
--- Score : 2517108 bytes/S
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 12.10 (Benchmark, virtual timers set/reset)
--- Score : 1990948 timers/S
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 12.11 (Benchmark, semaphores wait/signal)
--- Score : 3043584 wait+signal/S
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 12.12 (Benchmark, mutexes lock/unlock)
--- Score : 2470328 lock+unlock/S
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 12.13 (Benchmark, RAM footprint)
--- System: 472 bytes
--- Thread: 68 bytes
--- Timer : 20 bytes
--- Semaph: 12 bytes
--- EventS: 4 bytes
--- EventL: 20 bytes
--- Mutex : 16 bytes
--- CondV.: 8 bytes
--- Queue : 36 bytes
--- MailB.: 40 bytes
--- Result: SUCCESS
----------------------------------------------------------------------------
Final result: SUCCESS

View File

@ -1,164 +0,0 @@
*** ChibiOS/RT test suite
***
*** Kernel: 3.1.0
*** Compiled: Jan 4 2016 - 11:31:27
*** Compiler: GCC 4.9.3 20150529 (release) [ARM/embedded-4_9-branch revision 227977]
*** Architecture: ARMv7E-M
*** Core Variant: Cortex-M7
*** Port Info: Advanced kernel mode
*** Platform: STM32F746 Very High Performance with DSP and FPU
*** Test Board: STMicroelectronics STM32F746G-Discovery
----------------------------------------------------------------------------
--- Test Case 1.1 (System, critical zones)
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 1.2 (System, interrupts handling)
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 1.3 (System, integrity)
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 2.1 (Threads, enqueuing test #1)
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 2.2 (Threads, enqueuing test #2)
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 2.3 (Threads, priority change)
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 2.4 (Threads, delays)
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 3.1 (Semaphores, enqueuing)
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 3.2 (Semaphores, timeout)
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 3.3 (Semaphores, atomic signal-wait)
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 3.4 (Binary Semaphores, functionality)
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 4.1 (Mutexes, priority enqueuing test)
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 4.2 (Mutexes, priority return)
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 4.3 (Mutexes, status)
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 4.4 (CondVar, signal test)
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 4.5 (CondVar, broadcast test)
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 4.6 (CondVar, boost test)
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 5.1 (Messages, loop)
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 6.1 (Mailboxes, queuing and timeouts)
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 7.1 (Events, registration and dispatch)
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 7.2 (Events, wait and broadcast)
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 7.3 (Events, timeouts)
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 8.1 (Heap, allocation and fragmentation test)
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 9.1 (Memory Pools, queue/dequeue)
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 10.1 (Dynamic APIs, threads creation from heap)
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 10.2 (Dynamic APIs, threads creation from memory pool)
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 10.3 (Dynamic APIs, registry and references)
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 11.1 (Queues, input queues)
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 11.2 (Queues, output queues)
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 12.1 (Benchmark, messages #1)
--- Score : 1074619 msgs/S, 2149238 ctxswc/S
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 12.2 (Benchmark, messages #2)
--- Score : 947361 msgs/S, 1894722 ctxswc/S
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 12.3 (Benchmark, messages #3)
--- Score : 947361 msgs/S, 1894722 ctxswc/S
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 12.4 (Benchmark, context switch)
--- Score : 4909064 ctxswc/S
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 12.5 (Benchmark, threads, full cycle)
--- Score : 717602 threads/S
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 12.6 (Benchmark, threads, create only)
--- Score : 1136835 threads/S
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 12.7 (Benchmark, mass reschedule, 5 threads)
--- Score : 349378 reschedules/S, 2096268 ctxswc/S
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 12.8 (Benchmark, round robin context switching)
--- Score : 2548660 ctxswc/S
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 12.9 (Benchmark, I/O Queues throughput)
--- Score : 2530008 bytes/S
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 12.10 (Benchmark, virtual timers set/reset)
--- Score : 2000026 timers/S
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 12.11 (Benchmark, semaphores wait/signal)
--- Score : 3052996 wait+signal/S
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 12.12 (Benchmark, mutexes lock/unlock)
--- Score : 2489904 lock+unlock/S
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 12.13 (Benchmark, RAM footprint)
--- System: 336 bytes
--- Thread: 68 bytes
--- Timer : 20 bytes
--- Semaph: 12 bytes
--- EventS: 4 bytes
--- EventL: 20 bytes
--- Mutex : 16 bytes
--- CondV.: 8 bytes
--- Queue : 36 bytes
--- MailB.: 40 bytes
--- Result: SUCCESS
----------------------------------------------------------------------------
Final result: SUCCESS

View File

@ -1,164 +0,0 @@
*** ChibiOS/RT test suite
***
*** Kernel: 3.1.0
*** Compiled: Jan 6 2016 - 12:05:15
*** Compiler: GCC 4.9.3 20150529 (release) [ARM/embedded-4_9-branch revision 227977]
*** Architecture: ARMv6-M
*** Core Variant: Cortex-M0+
*** Port Info: Preemption through NMI
*** Platform: STM32L053xx ultra-low-power MCU
*** Test Board: STMicroelectronics NUCLEO-L053R8
----------------------------------------------------------------------------
--- Test Case 1.1 (System, critical zones)
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 1.2 (System, interrupts handling)
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 1.3 (System, integrity)
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 2.1 (Threads, enqueuing test #1)
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 2.2 (Threads, enqueuing test #2)
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 2.3 (Threads, priority change)
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 2.4 (Threads, delays)
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 3.1 (Semaphores, enqueuing)
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 3.2 (Semaphores, timeout)
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 3.3 (Semaphores, atomic signal-wait)
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 3.4 (Binary Semaphores, functionality)
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 4.1 (Mutexes, priority enqueuing test)
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 4.2 (Mutexes, priority return)
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 4.3 (Mutexes, status)
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 4.4 (CondVar, signal test)
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 4.5 (CondVar, broadcast test)
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 4.6 (CondVar, boost test)
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 5.1 (Messages, loop)
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 6.1 (Mailboxes, queuing and timeouts)
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 7.1 (Events, registration and dispatch)
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 7.2 (Events, wait and broadcast)
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 7.3 (Events, timeouts)
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 8.1 (Heap, allocation and fragmentation test)
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 9.1 (Memory Pools, queue/dequeue)
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 10.1 (Dynamic APIs, threads creation from heap)
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 10.2 (Dynamic APIs, threads creation from memory pool)
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 10.3 (Dynamic APIs, registry and references)
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 11.1 (Queues, input queues)
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 11.2 (Queues, output queues)
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 12.1 (Benchmark, messages #1)
--- Score : 113068 msgs/S, 226136 ctxswc/S
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 12.2 (Benchmark, messages #2)
--- Score : 90648 msgs/S, 181296 ctxswc/S
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 12.3 (Benchmark, messages #3)
--- Score : 90648 msgs/S, 181296 ctxswc/S
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 12.4 (Benchmark, context switch)
--- Score : 329040 ctxswc/S
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 12.5 (Benchmark, threads, full cycle)
--- Score : 71108 threads/S
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 12.6 (Benchmark, threads, create only)
--- Score : 102232 threads/S
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 12.7 (Benchmark, mass reschedule, 5 threads)
--- Score : 28751 reschedules/S, 172506 ctxswc/S
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 12.8 (Benchmark, round robin context switching)
--- Score : 240140 ctxswc/S
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 12.9 (Benchmark, I/O Queues throughput)
--- Score : 294924 bytes/S
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 12.10 (Benchmark, virtual timers set/reset)
--- Score : 196290 timers/S
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 12.11 (Benchmark, semaphores wait/signal)
--- Score : 630528 wait+signal/S
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 12.12 (Benchmark, mutexes lock/unlock)
--- Score : 314492 lock+unlock/S
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 12.13 (Benchmark, RAM footprint)
--- System: 328 bytes
--- Thread: 68 bytes
--- Timer : 20 bytes
--- Semaph: 12 bytes
--- EventS: 4 bytes
--- EventL: 20 bytes
--- Mutex : 16 bytes
--- CondV.: 8 bytes
--- Queue : 36 bytes
--- MailB.: 40 bytes
--- Result: SUCCESS
----------------------------------------------------------------------------
Final result: SUCCESS

View File

@ -1,164 +0,0 @@
*** ChibiOS/RT test suite
***
*** Kernel: 3.1.0
*** Compiled: Jan 6 2016 - 11:48:08
*** Compiler: GCC 4.9.3 20150529 (release) [ARM/embedded-4_9-branch revision 227977]
*** Architecture: ARMv7-M
*** Core Variant: Cortex-M3
*** Port Info: Advanced kernel mode
*** Platform: STM32L1xx Ultra Low Power Medium Density
*** Test Board: ST STM32L-Discovery
----------------------------------------------------------------------------
--- Test Case 1.1 (System, critical zones)
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 1.2 (System, interrupts handling)
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 1.3 (System, integrity)
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 2.1 (Threads, enqueuing test #1)
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 2.2 (Threads, enqueuing test #2)
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 2.3 (Threads, priority change)
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 2.4 (Threads, delays)
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 3.1 (Semaphores, enqueuing)
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 3.2 (Semaphores, timeout)
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 3.3 (Semaphores, atomic signal-wait)
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 3.4 (Binary Semaphores, functionality)
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 4.1 (Mutexes, priority enqueuing test)
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 4.2 (Mutexes, priority return)
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 4.3 (Mutexes, status)
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 4.4 (CondVar, signal test)
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 4.5 (CondVar, broadcast test)
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 4.6 (CondVar, boost test)
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 5.1 (Messages, loop)
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 6.1 (Mailboxes, queuing and timeouts)
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 7.1 (Events, registration and dispatch)
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 7.2 (Events, wait and broadcast)
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 7.3 (Events, timeouts)
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 8.1 (Heap, allocation and fragmentation test)
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 9.1 (Memory Pools, queue/dequeue)
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 10.1 (Dynamic APIs, threads creation from heap)
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 10.2 (Dynamic APIs, threads creation from memory pool)
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 10.3 (Dynamic APIs, registry and references)
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 11.1 (Queues, input queues)
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 11.2 (Queues, output queues)
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 12.1 (Benchmark, messages #1)
--- Score : 135579 msgs/S, 271158 ctxswc/S
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 12.2 (Benchmark, messages #2)
--- Score : 106657 msgs/S, 213314 ctxswc/S
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 12.3 (Benchmark, messages #3)
--- Score : 106657 msgs/S, 213314 ctxswc/S
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 12.4 (Benchmark, context switch)
--- Score : 433128 ctxswc/S
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 12.5 (Benchmark, threads, full cycle)
--- Score : 79992 threads/S
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 12.6 (Benchmark, threads, create only)
--- Score : 118507 threads/S
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 12.7 (Benchmark, mass reschedule, 5 threads)
--- Score : 34592 reschedules/S, 207552 ctxswc/S
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 12.8 (Benchmark, round robin context switching)
--- Score : 262268 ctxswc/S
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 12.9 (Benchmark, I/O Queues throughput)
--- Score : 314660 bytes/S
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 12.10 (Benchmark, virtual timers set/reset)
--- Score : 210880 timers/S
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 12.11 (Benchmark, semaphores wait/signal)
--- Score : 680780 wait+signal/S
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 12.12 (Benchmark, mutexes lock/unlock)
--- Score : 313696 lock+unlock/S
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 12.13 (Benchmark, RAM footprint)
--- System: 336 bytes
--- Thread: 68 bytes
--- Timer : 20 bytes
--- Semaph: 12 bytes
--- EventS: 4 bytes
--- EventL: 20 bytes
--- Mutex : 16 bytes
--- CondV.: 8 bytes
--- Queue : 36 bytes
--- MailB.: 40 bytes
--- Result: SUCCESS
----------------------------------------------------------------------------
Final result: SUCCESS

View File

@ -1,164 +0,0 @@
*** ChibiOS/RT test suite
***
*** Kernel: 3.1.0
*** Compiled: Jan 6 2016 - 12:13:33
*** Compiler: GCC 4.9.3 20150529 (release) [ARM/embedded-4_9-branch revision 227977]
*** Architecture: ARMv7E-M
*** Core Variant: Cortex-M4F
*** Port Info: Advanced kernel mode
*** Platform: STM32L4xx Ultra Low Power
*** Test Board: STMicroelectronics NUCLEO-L476RG
----------------------------------------------------------------------------
--- Test Case 1.1 (System, critical zones)
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 1.2 (System, interrupts handling)
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 1.3 (System, integrity)
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 2.1 (Threads, enqueuing test #1)
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 2.2 (Threads, enqueuing test #2)
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 2.3 (Threads, priority change)
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 2.4 (Threads, delays)
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 3.1 (Semaphores, enqueuing)
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 3.2 (Semaphores, timeout)
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 3.3 (Semaphores, atomic signal-wait)
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 3.4 (Binary Semaphores, functionality)
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 4.1 (Mutexes, priority enqueuing test)
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 4.2 (Mutexes, priority return)
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 4.3 (Mutexes, status)
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 4.4 (CondVar, signal test)
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 4.5 (CondVar, broadcast test)
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 4.6 (CondVar, boost test)
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 5.1 (Messages, loop)
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 6.1 (Mailboxes, queuing and timeouts)
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 7.1 (Events, registration and dispatch)
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 7.2 (Events, wait and broadcast)
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 7.3 (Events, timeouts)
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 8.1 (Heap, allocation and fragmentation test)
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 9.1 (Memory Pools, queue/dequeue)
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 10.1 (Dynamic APIs, threads creation from heap)
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 10.2 (Dynamic APIs, threads creation from memory pool)
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 10.3 (Dynamic APIs, registry and references)
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 11.1 (Queues, input queues)
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 11.2 (Queues, output queues)
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 12.1 (Benchmark, messages #1)
--- Score : 293033 msgs/S, 586066 ctxswc/S
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 12.2 (Benchmark, messages #2)
--- Score : 246148 msgs/S, 492296 ctxswc/S
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 12.3 (Benchmark, messages #3)
--- Score : 246148 msgs/S, 492296 ctxswc/S
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 12.4 (Benchmark, context switch)
--- Score : 817360 ctxswc/S
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 12.5 (Benchmark, threads, full cycle)
--- Score : 186911 threads/S
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 12.6 (Benchmark, threads, create only)
--- Score : 257228 threads/S
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 12.7 (Benchmark, mass reschedule, 5 threads)
--- Score : 79286 reschedules/S, 475716 ctxswc/S
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 12.8 (Benchmark, round robin context switching)
--- Score : 586060 ctxswc/S
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 12.9 (Benchmark, I/O Queues throughput)
--- Score : 868376 bytes/S
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 12.10 (Benchmark, virtual timers set/reset)
--- Score : 730616 timers/S
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 12.11 (Benchmark, semaphores wait/signal)
--- Score : 1839060 wait+signal/S
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 12.12 (Benchmark, mutexes lock/unlock)
--- Score : 981584 lock+unlock/S
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 12.13 (Benchmark, RAM footprint)
--- System: 472 bytes
--- Thread: 68 bytes
--- Timer : 20 bytes
--- Semaph: 12 bytes
--- EventS: 4 bytes
--- EventL: 20 bytes
--- Mutex : 16 bytes
--- CondV.: 8 bytes
--- Queue : 36 bytes
--- MailB.: 40 bytes
--- Result: SUCCESS
----------------------------------------------------------------------------
Final result: SUCCESS

View File

@ -1,164 +0,0 @@
*** ChibiOS/RT test suite
***
*** Kernel: 3.1.0
*** Compiled: Jan 6 2016 - 12:09:20
*** Compiler: GCC 4.9.3 20150529 (release) [ARM/embedded-4_9-branch revision 227977]
*** Architecture: ARMv7E-M
*** Core Variant: Cortex-M4
*** Port Info: Advanced kernel mode
*** Platform: STM32L4xx Ultra Low Power
*** Test Board: STMicroelectronics NUCLEO-L476RG
----------------------------------------------------------------------------
--- Test Case 1.1 (System, critical zones)
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 1.2 (System, interrupts handling)
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 1.3 (System, integrity)
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 2.1 (Threads, enqueuing test #1)
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 2.2 (Threads, enqueuing test #2)
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 2.3 (Threads, priority change)
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 2.4 (Threads, delays)
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 3.1 (Semaphores, enqueuing)
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 3.2 (Semaphores, timeout)
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 3.3 (Semaphores, atomic signal-wait)
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 3.4 (Binary Semaphores, functionality)
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 4.1 (Mutexes, priority enqueuing test)
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 4.2 (Mutexes, priority return)
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 4.3 (Mutexes, status)
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 4.4 (CondVar, signal test)
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 4.5 (CondVar, broadcast test)
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 4.6 (CondVar, boost test)
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 5.1 (Messages, loop)
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 6.1 (Mailboxes, queuing and timeouts)
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 7.1 (Events, registration and dispatch)
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 7.2 (Events, wait and broadcast)
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 7.3 (Events, timeouts)
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 8.1 (Heap, allocation and fragmentation test)
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 9.1 (Memory Pools, queue/dequeue)
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 10.1 (Dynamic APIs, threads creation from heap)
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 10.2 (Dynamic APIs, threads creation from memory pool)
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 10.3 (Dynamic APIs, registry and references)
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 11.1 (Queues, input queues)
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 11.2 (Queues, output queues)
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 12.1 (Benchmark, messages #1)
--- Score : 390235 msgs/S, 780470 ctxswc/S
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 12.2 (Benchmark, messages #2)
--- Score : 311278 msgs/S, 622556 ctxswc/S
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 12.3 (Benchmark, messages #3)
--- Score : 311278 msgs/S, 622556 ctxswc/S
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 12.4 (Benchmark, context switch)
--- Score : 1252432 ctxswc/S
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 12.5 (Benchmark, threads, full cycle)
--- Score : 223459 threads/S
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 12.6 (Benchmark, threads, create only)
--- Score : 333327 threads/S
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 12.7 (Benchmark, mass reschedule, 5 threads)
--- Score : 99378 reschedules/S, 596268 ctxswc/S
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 12.8 (Benchmark, round robin context switching)
--- Score : 780476 ctxswc/S
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 12.9 (Benchmark, I/O Queues throughput)
--- Score : 868380 bytes/S
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 12.10 (Benchmark, virtual timers set/reset)
--- Score : 730694 timers/S
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 12.11 (Benchmark, semaphores wait/signal)
--- Score : 1839064 wait+signal/S
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 12.12 (Benchmark, mutexes lock/unlock)
--- Score : 981588 lock+unlock/S
--- Result: SUCCESS
----------------------------------------------------------------------------
--- Test Case 12.13 (Benchmark, RAM footprint)
--- System: 336 bytes
--- Thread: 68 bytes
--- Timer : 20 bytes
--- Semaph: 12 bytes
--- EventS: 4 bytes
--- EventL: 20 bytes
--- Mutex : 16 bytes
--- CondV.: 8 bytes
--- Queue : 36 bytes
--- MailB.: 40 bytes
--- Result: SUCCESS
----------------------------------------------------------------------------
Final result: SUCCESS

Binary file not shown.

View File

@ -1,870 +0,0 @@
%!PS-Adobe-3.0 EPSF-3.0
%%Creator: cairo 1.8.8 (http://cairographics.org)
%%CreationDate: Mon Aug 30 12:09:46 2010
%%Pages: 1
%%BoundingBox: 0 0 196 229
%%DocumentData: Clean7Bit
%%LanguageLevel: 2
%%EndComments
%%BeginProlog
/cairo_eps_state save def
/dict_count countdictstack def
/op_count count 1 sub def
userdict begin
/q { gsave } bind def
/Q { grestore } bind def
/cm { 6 array astore concat } bind def
/w { setlinewidth } bind def
/J { setlinecap } bind def
/j { setlinejoin } bind def
/M { setmiterlimit } bind def
/d { setdash } bind def
/m { moveto } bind def
/l { lineto } bind def
/c { curveto } bind def
/h { closepath } bind def
/re { exch dup neg 3 1 roll 5 3 roll moveto 0 rlineto
0 exch rlineto 0 rlineto closepath } bind def
/S { stroke } bind def
/f { fill } bind def
/f* { eofill } bind def
/B { fill stroke } bind def
/B* { eofill stroke } bind def
/n { newpath } bind def
/W { clip } bind def
/W* { eoclip } bind def
/BT { } bind def
/ET { } bind def
/pdfmark where { pop globaldict /?pdfmark /exec load put }
{ globaldict begin /?pdfmark /pop load def /pdfmark
/cleartomark load def end } ifelse
/BDC { mark 3 1 roll /BDC pdfmark } bind def
/EMC { mark /EMC pdfmark } bind def
/cairo_store_point { /cairo_point_y exch def /cairo_point_x exch def } def
/Tj { show currentpoint cairo_store_point } bind def
/TJ {
{
dup
type /stringtype eq
{ show } { -0.001 mul 0 cairo_font_matrix dtransform rmoveto } ifelse
} forall
currentpoint cairo_store_point
} bind def
/cairo_selectfont { cairo_font_matrix aload pop pop pop 0 0 6 array astore
cairo_font exch selectfont cairo_point_x cairo_point_y moveto } bind def
/Tf { pop /cairo_font exch def /cairo_font_matrix where
{ pop cairo_selectfont } if } bind def
/Td { matrix translate cairo_font_matrix matrix concatmatrix dup
/cairo_font_matrix exch def dup 4 get exch 5 get cairo_store_point
/cairo_font where { pop cairo_selectfont } if } bind def
/Tm { 2 copy 8 2 roll 6 array astore /cairo_font_matrix exch def
cairo_store_point /cairo_font where { pop cairo_selectfont } if } bind def
/g { setgray } bind def
/rg { setrgbcolor } bind def
/d1 { setcachedevice } bind def
%%EndProlog
11 dict begin
/FontType 42 def
/FontName /f-0-0 def
/PaintType 0 def
/FontMatrix [ 1 0 0 1 0 0 ] def
/FontBBox [ 0 0 0 0 ] def
/Encoding 256 array def
0 1 255 { Encoding exch /.notdef put } for
Encoding 1 /uni0057 put
Encoding 2 /uni006F put
Encoding 3 /uni0072 put
Encoding 4 /uni006B put
Encoding 5 /uni0073 put
Encoding 6 /uni0070 put
Encoding 7 /uni0061 put
Encoding 8 /uni0063 put
Encoding 9 /uni0065 put
Encoding 10 /uni0020 put
Encoding 11 /uni0062 put
Encoding 12 /uni0074 put
Encoding 13 /uni0054 put
Encoding 14 /uni0068 put
Encoding 15 /uni0064 put
Encoding 16 /uni0053 put
Encoding 17 /uni0075 put
Encoding 18 /uni0069 put
Encoding 19 /uni006E put
Encoding 20 /uni0078 put
Encoding 21 /uni0050 put
Encoding 22 /uni004C put
Encoding 23 /uni006C put
Encoding 24 /uni0067 put
Encoding 25 /uni0028 put
Encoding 26 /uni0029 put
Encoding 27 /uni006D put
Encoding 28 /uni0049 put
Encoding 29 /uni004E put
Encoding 30 /uni005F put
Encoding 31 /uni0052 put
Encoding 32 /uni0045 put
Encoding 33 /uni0051 put
Encoding 34 /uni0055 put
Encoding 35 /uni0044 put
Encoding 36 /uni0041 put
Encoding 37 /uni0043 put
Encoding 38 /uni004B put
/CharStrings 39 dict dup begin
/.notdef 0 def
/uni0057 1 def
/uni006F 2 def
/uni0072 3 def
/uni006B 4 def
/uni0073 5 def
/uni0070 6 def
/uni0061 7 def
/uni0063 8 def
/uni0065 9 def
/uni0020 10 def
/uni0062 11 def
/uni0074 12 def
/uni0054 13 def
/uni0068 14 def
/uni0064 15 def
/uni0053 16 def
/uni0075 17 def
/uni0069 18 def
/uni006E 19 def
/uni0078 20 def
/uni0050 21 def
/uni004C 22 def
/uni006C 23 def
/uni0067 24 def
/uni0028 25 def
/uni0029 26 def
/uni006D 27 def
/uni0049 28 def
/uni004E 29 def
/uni005F 30 def
/uni0052 31 def
/uni0045 32 def
/uni0051 33 def
/uni0055 34 def
/uni0044 35 def
/uni0041 36 def
/uni0043 37 def
/uni004B 38 def
end readonly def
/sfnts [
<00010000000a008000030020636d617001a2f26900003bb40000008c63767420962ad2760000
3c40000006306670676dcc79599a000042700000066e676c79668bebc785000000ac00003b08
68656164ce982692000048e0000000366868656112330c9c0000491800000024686d7478ae81
10400000493c0000009c6c6f63610004d82c000049d8000000a06d61787004e40ca800004a78
000000207072657052fec4e900004a9800000aff000201000000050005000003000700002111
21112521112101000400fc2003c0fc400500fb002004c0000000000100190000077605ba0018
01db402629002611291226183900361139123618490047114912471858005711581257181098
08980f02b10602435458403310011a192b153405340c4405440c4b155405540c5b156405640c
6b157405740c7b150f05150c030001120800080f0208020102003f3f3f3f3f111217395d0111
1239391b401e030405050206070808050a0b0c0c090d0e0f0f0c14131212151617181815b8ff
3cb305001820b8ff3cb30c121120b8ff3c405a15080920000502022001001401010018050808
1e151814151518120c09091e151214151512110c0f0f2010111410101112090c081815050f11
100c000205150c050318100f0f0909080802020102181212111100081a17171a104109015100
20000c015100150151004000050151b620200101011919b8018bb1a8182b4e10f45d1a194dfd
1a18fdfd1a19fd184e456544e6003f3c103c103c3f3c103c103c103c103c1217390112393911
12393911123939113939874d2e2b877dc4872e182b877dc4872e182b877dc4872e182b877dc4
2b2b2b870e10c4c4870e103cc4870e10c4c4870e10c4c4870e10c4c4870e10c4c4014bb00f53
4bb011515a58b2120a18b8fff6383859014bb025534bb02a515a58b90000ffc03859004bb00b
534bb00e515a58b30c40054038385959313001725d2101331316173637013313121736371333
0123012627060701019efe7bc7df241a380a0117ead24f231c2de6c3fe6ebbfecb27071714fe
c905bafc3f9795eb2403defd1afeecf38bb403aefa46045d8c206547fba3000000020044ffe8
0427043e000d0019016bb615180d0d065513b8ffe8b40d0d06550fb8ffe840730d0d06551918
0d0d065512070a190c4706480856065908670669080834103a123a16351845104b124b164518
5c055c0952105d125d1652186d056d0964106d126d1664187701150906050d5b035405540a5b
0c6c036505650a6c0c0a171c0407111c0b0b14241b400d0d02551b400b0b025507b8ffea4011
0f0f025507180d0d025507100b0b025507b8fff0b40b0b065507b8fff0b40d0d065507b8fff0
b40f0f065507b8fff0b40c0c065507b8ffc04013242534300701000710072007030731df1b01
1bb8ffc040491e2334301b011b0e24000c0e0f025500120d0d0255000c0c0c0255001c0b0b02
55000e0b0b0655000e0d0d0655000c1010065500160c0c065500402425341f003f000200311a
3437182b10f65d2b2b2b2b2b2b2b2b2bed10712b5df65d5d2b2b2b2b2b2b2b2b2b2bed003fed
3fed313001715d0071435c584009530553096205620904015d59002b2b2b2b13103736333200
1514060623220013141633323635342623220644a489c5db01167beb8bdffeedb9b28786b2b3
8587b2021301278e76fee1fdcdeb82011e010dcccbccd1c5cbca000000010085000002c6043e
001100c9403b2f1301100401230434044304530466047404060911080908090d1311090d0003
08010b1c06070106000a0928900801082220130113022211250100b8ffc04010333634f00001
00002000d000e0000400b8fff8b41010025500b8fff840110e0e025500040c0c025500060b0b
025500b8fffcb41010065500b8fff440160f0f065500060c0c065500080d0d0655004e1247c4
182b10f62b2b2b2b2b2b2b2b5d712b3cfde4105df472e4003f3f3fed11393911393901111239
390010c9870e7dc43130005d72015d33113315363633321707262322060706151185a23e693f
5b5e3e42423b5e141e0426a171483aa727473f6072fdd400000000010088000003f805ba000b
0261401b060c0d0d0655070656065a09030f0df305f60603090c1010025506b8fff4b40c0c02
550ab8fff4b40c0c025509b8fff4b40c0c025503b8ffe840100d0d06555503770a0212062013
213408b8fff0b312273409b8fff0b41227341205b8fff0b312213409b8fff040841227340604
04050406370947040525062d0a580a7703750ada03e30607a60601230626072508390638093f
0d4f0d59045906580759097d0479059909c606d204d606e406e907f706f90815120a0a050303
04020606070909080a0a050908082507061407070603040425050a1405050a0a090603040801
02000405060708080b0b000a04b8010f400905040c0c0655052208b8010f402120073f070207
100c0c0655071a900d010d0b2500022501019000013f004f000200b8fffe40310e0e02550010
0d0d025500100c0c0255000a0b0b025500120b0b065500120c0c065500080d0d065500190c0d
e1214766182b2b4ef42b2b2b2b2b2b2b5d713c4d10ed10ed4e1071f62b5d4dedf42bed003f3c
103c103c3f3c3f3c11173987052e2b047d10c487052e182b0e7d10c40710083c083c0310083c
083cb10602435458400d4b09011f0984030209180d1134002b5d7159313001435c58400a092c
1d3909081d1d3c06b8ffdeb21d3906b8ffd4b2203906b8ffd4b121392b2b2b2b2b595d00715d
0171002b2b435c58b90006ffc0b2213903b8ffc0b2163903b8ffdeb2103906b8ffdeb2103903
b8ffdeb20c3903b8ffdeb10b392b2b2b2b2b2b59012b2b2b435c584012dd0401081416390908
14143c090814143c06b8fff6b2183906b8ffecb11b392b2b2b2b2b015d59005d2b2b2b2b2b01
5d712b33113311013301012301071188b401aae9fe6a01bfdefea17f05bafcbc01b0fe76fd64
021f7afe5b000001003fffe803b1043e00300317407b042214223a094a094424562265227c09
8e098424a613ab2cc2030d09171a1817304b2cd617051b025502021032010a185c085c095c0a
5c0b5c0c5c0d6a086a096a0a6a0b6a0c6a0db426b4270f27262427242936245a0a590b642664
28742374248024930a9c0c9228972c9530a40aa90ca327a428b326c5261628b8fff4b40d0d06
5522b8fff4b40d0d065523b8fff4b40d0d065524b8fff4b40d0d065528b8fff4b40c0c065522
b8fff4b40c0c065523b8fff4b40c0c065524b8fff4b40c0c06551db8ffde40121e395a082725
0c0a041a202615040b2e1d1ab802aa4022192c0b0b02551f193f194f195f19af19cf19060f19
1f196f19df19041f198f190219bd02550015000002aa0001ffc040140b0b0255100140010210
01d00102000110010201b8ffc0b314163401b8ffc040100e113401012e5c1d6c1d021d1c1507
04b8fff4b40b0b025504b8ffe6b41010065504b8ffe640130f0f0655041c2e0b1f1a011a2419
4013183432b8ffc0402f0f0f025519180f0f025519180d0d025519160c0c0255192010100655
19200f0f065519100c0c065519160d0d065519b8025bb207242ab8ffc0b51c39d02a012ab8ff
e6b40c0c02552ab8ffe8b40f0f02552ab8ffe8b40c0c06552ab8ffeab60d0d06552a1a32b8ff
c04021272a346032c032023f3280320232100101012400180d0d025500100d0d06550020b8ff
f4b40d0d025520b8fff4b41010065520b8fff440190f0f065520240f100b0b02550f160c0c02
550f200d0d02550fb8fffa40200f0f02550f0e0c0c06550f0c0d0d06550f22df00013f004f00
020019313437182b4e10f45d714df42b2b2b2b2b2bed2b2b2b102b2bed724e105d712bf62b2b
2b2b712b4dedf42b2b2b2b2b2b2b2b2bed72003fed2b2b2b3fed7112392f2b2b5d71722be410
fd5d71722be41112391112390111121739313043794040272d1e2305142c2611101210131003
06220d201b000928071b01052d071b011e14201b00210e231b0022230d0c08290a1b01282709
0a062b041b001f101d1b01002b2b103c103c2b103c103c2b012b2b2b2b2a2b818181002b2b2b
2b2b2b2b2b2b5d71015d72715d1337161633323635342726272e023534363736363332161617
072626232206151417161716171e02151406062322263fb20f897b7c78352593c6994f41382a
91537dbd5a11b00c73697c6a16162f1b84bf975669c67dcfd9013d1c6b7265443d2318253249
814e4779281f2b487b6718525c5237231c1d130a2433417c5c5a9f57ac0000020087fe690421
043e0012001e0162408e0c102d103d104b10043f20b020021f20290c231d3215321d421d7020
9020083a173a1b4a174a1b59085b0c5c175c1b6a086b0c69106d176b1bc020d314dd18dd1ad3
1ee414e41ee020ff201623042b102b1535043a1046044a105a10e50beb1dfe100b110e03161c
1c06070106161c0e0b000e1924d00a01100a400a600a800a0420400b0b025520400d0d02550a
b8ffe6400b0f0f02550a180d0d02550ab8fffab40c0c02550ab8ffeeb40b0b06550ab8fff4b4
0f0f06550ab8ffe840230c0c06550a74011333023312250000c001019001a001b001f001041f
013f014f010301b8fffc401d0e0e025501100d0d025501100c0c025501100b0b0255010c0b0b
065501b8fff6b41010065501b8fffc40160f0f0655010c0c0c065501120d0d065501191f4737
18012b4e10f42b2b2b2b2b2b2b2b2b5d71723c4d10fdf4e410fd2b2b2b2b2b2b2b2b5d71ed00
3f3fed3f3fed113912393130005d015d71720071131133153636333216161514020623222627
1103141633323635342623220687a43a926888d06a75df7b5a8f2e11a67678aba77473b1fe69
05bd8a51518cff98a3fefb8b4c3afdfb03a4cdc4cbd5cbcad7000002004affe8041c043e0028
0037022d402c090d092a190d1a2a290d2a2a390d3615371b3a2a492a5d0d5d2a6a0d692a6030
8a0d86299a169b1aa90d1528b8ffe8b40b0b065527b8ffe840190b0b0655a619aa28b619bb28
c419cf28d215dd28084416011eb8fff440110c0c065512120c0c0655050c0c0c065535b8ffe0
40550c0c06551f171f182b2c2a343904392c4904482c5608592b6608692b760c870cc90cf90d
f92b1137340e0104102f243417322114185f296f2902291c2f0e3f0e8f0e9f0eff0e059f0eaf
0eef0e030e0c0f0f02550eb8ffeab4101002550eb8fff44015101006550e0c0d0d06550e060f
0f06550e0e1c0317b802aab61895141c1c0700b8fff4401a0c0c06550045270a321c030b2961
106100060d0d025500252124b8ffecb41010025524b8ffec400b0d0d025524040c0c025524b8
ffe4b40b0b025524b8fff4b40b0b065524b8ffdc400b1010065524060f0f065524b8fffcb40c
0c065524b8025b400e27400026102620263026af260539b8ffc0b40e0e025526b8ffd6b60e0e
0255263139b8ffc0400d1e23343039c03902a039013917b8fff4404110100655172518222f24
bf06cf06021f063f0602060e0f0f0255060c0d0d025506180c0c0255060c0b0b0255060c0b0b
0655060e0d0d065506100c0c065506313810f62b2b2b2b2b2b2b5d71edf4ed2b105d712bf62b
2b5dedf42b2b2b2b2b2b2b2b3cfd2be5e5003fed3fe42b3fedfde41112392f2b2b2b2b2b5d71
ed711112391112393901111217393130005d2b2b2b2b01715d2b2b0071250606232226353436
363736373637363534272623220607273e02333216161716151514161723260306070e021514
16333236373635033c64b96aafbc477348356bda67013345887f791db0186ed08988aa501009
1722bc1c1762c46f5c326d6968a2261d835546ab854e814e140e0d1a24250a6e2d3d59711871
8b4b40614a2e78f0fb853d3801dd281c10284d2f48605b4f3d77000000010050ffe803ed043e
001a015ab1020243545840340e7f0f010f0b01400050007000030004121c0b07181c040b010e
1507080e0e0255070c0d0d0255070c0c0c025507100b0b0255072f2b2b2b2bcdd4c6003fed3f
ed10c45d3210c45d3231301b4047090c011f1c4313431753135317601360179b029b039a0da4
10a41a0c080d190a6a0269036a05750c700d800da60cb509b60ab50c0c160c860ce302030e22
5f0f6f0f7f0f030f01b802aa4079300040005000600070009000a000e000f00009000f0f0b00
0004121c0b07181c040b1c0f010f240e080d0d06550e221b000100240b2b1f01010001010140
0b0b065501401010065501480c0c0655011a0d0d065501491c1524cf07011f073f0702070e0b
0b0655070a1010065507120c0c065507311b34c4182b10f62b2b2b5d71ed10f62b2b2b2b5d72
4b53234b515a58b90001ffc03859ed72f42bed72003fed3fed12392f11392f105de4105de431
30005d71015d7159011706062322001134123633321617072626232206151416333236033cb1
1defaedafef772e989addc1faf197f5a88aaa4846a8e018517b7cf011d010aac010281afa11b
6b6cc3d3d6c282000002004bffe8041e043e0015001d015340171f001c150255035d055d0955
0b65036b056f09650b0815b8ffe4b40d0d065511b8ffe440520d0d06551d1c0d0d06552712d9
05fa14f61a0431123a19311c41124d1a411c51125c19521c61126d1a611c78067815f602f618
100016010f0d171750166016701603161c0f9010a010021010041b1c0a0700ba02aa0001ffc0
b41010025501b8ffc04010101006551001010195131c040b17400db8ffdcb40d0d02550db8ff
eeb40d0d06550db8ffeab40c0c06550db8ffc04009272a34b00d010d1a1fb8ffc0b32526341f
b8ffc040411e2334301f011f163310240740242a341f073f074f070307200b0b025507180c0c
0255071c0d0d0255070e0b0b0655071c0c0c065507160d0d065507191e3437182b4e10f42b2b
2b2b2b2b5d2b4dfde44e10712b2bf6712b2b2b2b4ded003fedfd5d2b2be43fed12392f5d3cfd
713c011112393912393130015d005d2b2b2b0171720117060623220011100033320011140721
16163332360121262726232206035eba2ceeb9e9feef0114dcd5010e01fce80ab285638cfdda
02510c3856897ca9015617a3b4011f0103010c0128fedefef91020afba680195864368a60000
00020086ffe8041f05ba0010001d0180409b01050c0f240535054505053f1fb01f021f1f221c
331c421c701f901f063a133c163c1a4c164c1a5d085d0d580f5d165e1a6a086c0d680f6e166e
1ac01fd90cda17da19e213ec17ec19e31de01fff1f1920052f0f2f1430053f0f40054c0f5005
6605da1df504fa100c10150e040602001b1c0607010a151c0e0b1824d00b01100b400b600b80
0b041f400d0d02550b0c0f0f02550b180d0d02550bb8fff6b40c0c02550bb8fff0b40b0b0655
0bb8fff4b40f0f06550bb8ffe0b40c0c06550bb8fff4402f0d0d06550b7401113300040c0c02
5500040d0d0655003303250202c001019001a001b001f001041f013f014f010301b8fffeb410
10025501b8fffc401d0e0e0255010c0d0d025501100c0c025501120b0b0255010c0b0b065501
b8fff8b41010065501b8fffc40160f0f065501180c0c065501140d0d065501191e4737182b4e
10f42b2b2b2b2b2b2b2b2b2b5d71723c4d10fdf42b2be410fd2b2b2b2b2b2b2b2b5d71ed003f
ed3f3fed3f11391112393130005d015d7172007121231133113633321e021510002322270314
1716333236353426232206012da7b472b162af7140fef2bdbc6b0234559176aca57576ac05ba
fdf58f4f8fca73feeffed69d0196bf558bcdcbd0c6cd000000010024fff2022a0599001700d8
b9000affc0b323263409b8ffc0404123263480190100010c0d0a0103001610092b0f0a06161c
030b0f10220022010d12250c01ff070845094560077007800790070400072007a007b007c007
d0070607b8ffeeb41010025507b8fff4b40f0f025507b8fff2b40e0e025507b8fff8b40d0d02
5507b8fff8b40c0c025507b8fffab41010065507b8fff0400b0f0f065507060c0c065507b8ff
e8b40d0d065507ba026a00180136b166182b10f62b2b2b2b2b2b2b2b2b5d71f4e410ed3cfd3c
10e4f43c003fed3f3cfd3c1139123911333310c93130015d2b2b251706232226263511233533
11371133152311141616333202101a4c3c626c2c8484b3b5b5132b281ea19f103e65a202638c
01076cfe8d8cfd934d2c1a0000010030000004ba05ba00070089400d05021e04030200080706
050409b80273b320040104b80101b7062001022f030103b80101b5010120000100b8ffe8400b
1010025500080f0f025500b8fff2b40c0c025500b8ffe2b40d0d025500b8fffcb40c0c065500
b8fffeb40d0d065500b80273b308b699182b10f62b2b2b2b2b2b5d3c10f45d3c10fde45de610
3c103c003f3f3cfd3c313021112135211521110213fe1d048afe1b050dadadfaf30000000001
0087000003e805ba00140161b90016ffc0b315173403b8ffe0400e0d0d0655250435034503ba
0d0403b8ffe0403a1719341708110c1114030501000f1c0507140b0a0c250940333634ff0901
c0090116400b0b025516401010025509281010025509140e0e025509b8ffec40110d0d025509
040c0c0255091a0b0b025509b8fff6400b0b0b065509141010065509b8fff8400b0d0d065509
0a0f0f065509b8fff6b60c0c0655094e16b8ffc04017343634b016f016027016a016b016ff16
04160214250100b8ffc04010333634f0000100002000d000e0000400b8fffab41010025500b8
fffa40170e0e025500040c0c025500080b0b025500040b0b065500b8fffa40160f0f06550002
0c0c065500020d0d0655004e154750182b10f62b2b2b2b2b2b2b2b5d712b3cfd3c105d712bf4
2b2b2b2b2b2b2b2b2b2b2b2b5d712bed003f3c3fed3f1139113901123931304379400e060e07
250e060c1b010d080f1b01002b012b2b81002b5d2b012b331133113633321616151123113426
23220606151187b47ec076ae4bb4756b508d3c05bafdf2925da49cfd5f02a1877b538e7dfdbb
00020046ffe803df05ba0011001d015540a40a02040d250d340d440d053514351c5702540a52
14531c6702640565096314601cc01fd405d513dd19e513e514ef17eb19e51de01fff1f161f1f
2b1a3c163c1a4b1a701f901f072e02240d2e163a02350d4b02450d4614491c570a560d670de5
06e716fa01f40e100115030e0b100f001b1c0b0711000a151c030b1833010025110f251010d0
11011011401160118011041f400b0b02551f400d0d025511121010025511b8fff440110f0f02
5511060e0e025511180d0d025511b8fff2400b0b0b0655110e1010065511b8ffeeb40c0c0655
11b8fff840420d0d065511741224bf07cf07df07ff07041f073f074f0703071e0b0b02550718
0c0c0255071e0d0d0255070c0b0b0655070c0d0d0655071a0c0c065507191e3450182b4e10f4
2b2b2b2b2b2b5d714dedfd2b2b2b2b2b2b2b2b2b2b5d713c10ed10fd3ce4003fed3f3c3fed3f
3c11391112393130005d01715d00712135062322262635341236333216171133110114163332
36353426232206033865c47fd5756ad48360962fb3fd20ac7576a5a87b78a1869e8cfba39f01
038a5141020efa460212cccac1c6daccc4000001005cffe704eb05d300300215402763036304
730374040425273503391c430349074c1d451f44244627530359075c1d572889130e23b8fff2
b41010025524b8fff2b41010025525b8fff2b41010025526b8fff2b41010025527b8fff2b410
10025523b8fff6b40d10025524b8fff6b40d10025525b8fff6b40d10025526b8fff6b40d1002
5527b8fff640460d100255280d26240224032725360f34234425452f5a20562355256c0b6a0d
6b0e66146518790b7a0d7a0f7d107524732586038a0b890d8a0f8d1085248325920d960f9615
1eb10602435458402d2126121b261a09262901260000291a120432312600650002000d2d791b
891b021b25160d2d1e27250125051605b8fff4400c0c0c0655051e2d091e1e1603003fed3fed
2b1112395d1112391112395d1112395d01111217392fed2fed2fed2fed1b402d25240e0d0b05
211c1d1e1b08070604030206012524220e0d0b06051e1b2d1a400c0c02558f1a011aed16002d
01b8ffc040120c0c02551001200150016001700190010601b801b040132d1e1e1603051e2d09
1b261a4a092600290129b8ffeab40e0e025529b8fff4400d0c0c0255291a32212612012612b8
ffecb40e0e025512b8fff6b40d0d025512b8fff8400f0c0c02551254200001001931635b182b
4e10f45d4de42b2b2bed10ed4e10f62b2b5d4dedf4ed003fed3fed10fd5d2be410fd5d2bf411
1217391117391112393901121739593130005d712b2b2b2b2b2b2b2b2b2b015d7113371e0233
3236363534262726242726263534363633321616170726262322061514171604171616151406
06232224265cb70d5fc87d6faa53505c3bfe6c5169677ef294a3f98605ba0fada9b0a1393801
d958807a86fb9dc7fef39901d7106e8d5742734445672317612b37a3656fc16469cc810e8b8e
815b4f33336b283bb57675cf7374e900000000010083ffe803e004260018014fb9001affc040
0915173402201316340fb8fff040331214342b1301240813160c0113160b06000a111c030b00
3316251817403336341a401010025517281010025517120e0e025517b8ffec400b0d0d025517
040c0c025517b8fff4400b0b0b065517141010065517b8fff8400b0d0d0655170c0f0f065517
b8fff6400d0c0c0655ff1701c01701174e1ab8ffc04015343634b01af01a02701aa01ab01aff
1a041a0c2509b8ffc04010333634f0090100092009d009e0090409b8fff8b41010025509b8ff
f840110e0e025509040c0c0255090a0b0b065509b8fff640160f0f065509020c0c065509020d
0d0655094e194750182b10f62b2b2b2b2b2b2b5d712bed105d712bf65d712b2b2b2b2b2b2b2b
2b2b2b3cfde4003fed3f3f3c39390111123931304379401a04100e0d0f0d0206070806080508
030610040c1b000d08111b00002b012b2a2a81005d012b2b2b21350623222626272635113311
141716163332363635113311033f7cd55ea34f100bb40b116e51518e3bb49cb4486d4f357302
92fdb38d314751538f880239fbda0000000200880000013c05ba0003000700cd405e09360b0b
02554f099009a009b009c009df09f0090700091f09700980099f09b009c009df09e009ff090a
1f09010001070402030906037e0100060506040a0607250500049f04a004b004c004e00406c0
04f0040200042004d004e0040404b8fff8b41010025504b8fffa40170e0e025504040c0c0255
040a0b0b025504140b0b065504b8ffeab41010065504b8fffeb40d0d065504b8fffc400a0c0c
0655044e084750182b10f62b2b2b2b2b2b2b2b5d71723cfd3c003f3f3c3fed01111239391112
39393130015d72712b133533150311331188b4b4b404ebcfcffb150426fbda00000100870000
03e6043e0016017d40130503061302a810b810e303e713f003f6130604b8fff0403c0b0d3479
10019810d018e018ff18042008140e1416121c05070106160d0a0d0e0c0e2418401010025518
400b0b02550b28101002550b140e0e02550bb8ffec40110d0d02550b040c0c02550b220b0b02
550bb8fff4400b0b0b06550b14101006550bb8fff9400b0d0d06550b0a0f0f06550bb8fff640
120c0c06550b40333634ff0b01ff0b010b4e18b8ffc0401a343634b018f018027018a018b018
c01804180302331516250100b8fff6b41111025500b8fffab41010025500b8fffa40170e0e02
5500040c0c0255000a0b0b025500040b0b065500b8fffa40110f0f065500020c0c065500040d
0d065500b8ffc04012333634f0000100002000d000e00004004e1710f65d712b2b2b2b2b2b2b
2b2b2b3cfd3cf43c105d712bf65d712b2b2b2b2b2b2b2b2b2b2b2b2bed3c103c003f3c3f3fed
11390112393130437940160611090a080a070a0306102611060e1b010f0a121b01002b012b2b
2a81015d71002b5d71331133153633321616171615112311342626232206151187a275dd60a1
50100ab42a6b4873a7042697af45704d327dfd7302866e6d4192ccfdbc0000000001000f0000
03f10426001001dcb1020243545840150f010b060402090602060d0a000a0f180f0f02550f2f
2b003f3f3f3f11173931301bb70f12010f22193906b8ffde405019395a0f96049608990e9a0f
c005c006c007cb0f090f4016391a031309150d1a1035013a0b81018e0b082f1257045907590b
580e9701980a980bb702b80cc80bca0ecc10da03d509d10ddb10e50a1212b10602435458400b
0c0012110f180d10065506b8ffe8400e0d1006550f0600020d000a0a0206003f3c3f3c111239
392b2b01111239391b40660606030708090901060609050403030b0f0f100e0d0d010f0f0d10
0b010009020d0b030c100a060f020f0a10c600c60902102500091400000903020dc60d010d25
0c03140c0c030a090903030206100d0d0c0c000a4f120112490d7e0c220a0f6106097e400ab8
011bb74006500680060306b80243400e20037e02224f00010049117cc4182b10f65df4ed1a19
fd5dfd1a18ed10e510f4ede65d003f3c103c103c3f3c103c103c87052e2b5d877dc4872e182b
5d7d10c400111239390f0f8708c4870e10c408c4870e10c4c408c4070e103c3c083c59313001
435c58b40e181d390bb8ffde400b1d390c221739032217390bb8ffdeb2213910b8ffc0400a15
390122213909401c392b2b2b2b2b2b2b2b595d71002b5d2b2b015d5933010133171617363737
330101230327010f0184fe99e1a32e1c2c25b3d7fe91018bddda3afee9022801fef947304233
fbfe0cfdce014a59fe5d0002009e000004fd05ba000d001800b2402c65116b14024b104b145b
105b14040b0c1e0f0e0e0017181e02010200081226080a0d0d025508100b0b065508b8fff440
1b0c0c0655081a201a01201a011a180d200120000100201010025500b8fff6b40f0f025500b8
fff6b40d0d025500b8fffa400b0c0c0255000c0b0b065500b8fffab40c0c065500b8fff0400a
0d0d0655005d193b5c182b10f62b2b2b2b2b2b2b5d3cfd3c4e10715df62b2b2b4ded003f3f3c
fd3c12392f3cfd3c3130015d005d33112132171e021514022121111121323635342627262321
9e0229924d6c9259eefec9fe88017bbc9e5d4c3184fe8905ba0e1265b66dbbfefdfdac03018c
7f5c83150d000000000100960000042a05ba0005006d400c010204031e05000820040104b802
a7400f070203200120000100201010025500b8fff6b40f0f025500b8fff6b40d0d025500b8ff
fab40c0c025500b8fff6b40c0c065500b8fff8400a0d0d0655005d063b5c182b10f62b2b2b2b
2b2b5d3cfd3c10e65d003f3cfd3c3f313033113311211596c202d205bafaf3ad000000010083
0000013705ba000300e3b605360b0b025505b8ffc0b337383405b8ffc0b334353405b8ffc0b3
30313405b8ffc0b322253405b8ffc040251517340f051f059f05df05044f05df05f005031f05
70058005ff05040100000a0203250100b8ffc0b337383400b8ffc040153335349f0001c000f0
000200002000d000e0000400b8fff8b41010025500b8fffa401d0e0e025500040c0c0255000a
0b0b025500140b0b065500081010065500b8fffeb40d0d065500b8ffffb40c0c065500b8fffc
400a0c0c0655004e044750182b10f62b2b2b2b2b2b2b2b2b5d71722b2b3cfd3c003f3f313001
5d71722b2b2b2b2b2b3311331183b405bafa460000020042fe5103ea043e001e002a016f4060
0b0b05142c0b25144c0b451406091d191d2c0b26142c23390b36144a0b46145607580b680bfa
0af5150e2e232c273e233e274c27902ca02c07362136293f2c460b4621452954215429690763
216329602c802cda27e821ee23ef271117160615b802b1b4281c130701b802aa401020003000
600070008000c000d0000700b8027d4032051c1c0f0a45221c0c0a16153325330a251818d017
011017401760178017042c400b0c02552c400d0d025517121010025517b8fff440110f0f0255
17060e0e025517160d0d025517b8ffea400b0b0b065517121010065517b8ffeeb40c0c065517
b8fffc404a0d0d065517740f012500221f24bf0fcf0fdf0fff0f041f0f3f0f4f0f030f200b0b
02550f1a0c0c02550f220d0d02550f1c0b0b06550f0c0d0d06550f1a0c0c06550f192b2c7421
3450182b2b4ef42b2b2b2b2b2b5d714dedf4ed10fd2b2b2b2b2b2b2b2b2b2b5d713c10fde4f6
3c003fede43fedfd5de43fede43f3c3130015d71005d71171716171633323637362706232202
3534123633321735331114060623222613141633323635342623220666af0b3243747d88180e
0176b0dbf06ed18dbc7aa665dba0beea99a67d7ca8ad7a78a8581a512532645a37b08b013cdd
9801018c9880fc6af8cf78ab032ad1c0bfccc3c6c3000001007cfe51026005d30010003d400a
270f0100101207081010b80133b3009f0e08b801334011079f0e5e0003100320030303ac119d
8c182b10f65dfdf6ed10f6ed003f3c3f3c3130015d0126021134373637330607060706151001
01df95ce4d5abc8179273d232b012bfe51bc01f8010eeedafdfbd0598a96bbbdfe1ffe200001
007cfe51026005d300100065400c2802281002090a1001001209b80133b30a9f0301b80133b4
009f035e0eb8fff0b4101002550eb8fff8b40f0f02550eb8ffe4b40d0d02550eb8ffec400f0a
0a02550f0e1f0e020eac129d8c182b10f65d2b2b2b2bfdf6ed10f6ed003f3c3f3c3130015d13
23001134272627262733161716151002fd81012b2b223d277a81bc5a4dcffe5101e001e1bcb9
968a5ad2fbfddaeefef2fe0800000001008700000626043e002301c7b9000dfff4b40d0d0655
08b8fff4b40d0d065509b8ffd8404d0b0d342504e404e409e117e52005d505f6200217082023
09181b20090303231e1c06151c0b0b06070106231a19100ad025019025a025022517171a0e25
90110111041010025511180f0f025511b8ffec400b0e0e025511140c0c025511b8ffe840170b
0b025511020b0b0655110c1010065511060f0f065511b8fffab40c0c065511b8fff8b40d0d06
5511b8015d400c1825901b011b180f0f02551bb8ffec400b0e0e02551b140c0c02551bb8ffee
40110b0b02551b040b0b06551b0a101006551bb8fffe400b0d0d06551b0c0f0f06551bb8fffc
b40c0c06551bb8015d4016000233232501d000019000a000021f003f004f000300b8fffe401d
0e0e025500100d0d025500100c0c0255000c0b0b025500160b0b065500b8fffcb41010065500
b8fff440140f0f0655000a0c0c0655000e0d0d065500192425b80178b3214750182b2b4ef42b
2b2b2b2b2b2b2b2b5d71723c4dfde410f42b2b2b2b2b2b2b2b2b5dedf42b2b2b2b2b2b2b2b2b
2b5dfd4e456544e67172003f3c3c3c3f3f3c4d10ed10ed11173901111239123931304379400e
0c141326140c111b01120d151b01002b012b2b81015d005d2b2b2b3311331536363332161736
3332161511231134262623220615112311342623220606151187a132a66a76971f7eca9eaab3
235c3e7094b458644c813a0426954e5f6258baafb6fd27029d6c5f3a95a4fd9702b27878509a
91fdd900000100bf0000018105ba000300ccb5010200080205b8ffc0b3383d3405b8ffc0b333
343405b8ffc0b32d303405b8ffc0b328293405b8ffc0b323253405b8ffc0b31d1e3405b8ffc0
b3181a3405b8ffc0402a0d103420059005af050303200100008f00a000b000042f0040005000
df00f000051220008f0090000305b8ffc0400b0d0d025500181010025500b8ffecb40f0f0255
00b8ffeeb40d0d025500b8fff640100c0c025500200b0b065500a204d659182b10f62b2b2b2b
2b2b5d435c58b2800001015d5971723cfd5d2b2b2b2b2b2b2b2b3c003f3f313033113311bfc2
05bafa460001009c0000051f05ba0009017db1120bb8ffc0400a13153408180c16025503b8ff
e840210c1602550802030320070814070708020703030809040202090708040320060605b8ff
ecb40f0f025505b8fff2400b0d0d025505120c0c025505b8fff7401a0b0b0655055d200b0120
0b500b600b700b800b050b0809200100b8ffc0400d13153420000100201010025500b8fff6b4
0f0f025500b8fff6b40d0d025500b8fffa400b0c0c025500040b0b065500b8fff7b40c0c0655
00b8fff8400a0d0d0655005d0a3b59182b10f62b2b2b2b2b2b2b5d2b3cfd3c105d71f42b2b2b
2b3c10fd3c003f3c3f3c1239390111393987042e2b877dc4b10602435458b90003ffe0b70c11
3408200c1134002b2b5931302b2b012b435c58b40840463903b8ffc0b646390840323903b8ff
c0b632390722193902b8ffdeb619390722323902b8ffdeb632390722233902b8ffde400b2339
070e1439070e133902b8fff4b61339070e1d3902b8fff4b61d39070e153902b8fff8b115392b
2b2b2b2b2b2b012b2b2b2b2b2b002b2b2b2b59331133011133112301119cc70302bac7fcfe05
bafb81047ffa460480fb800000000001ffe1fe69048afeeb0003001a400c013f00021a050019
044341182b4e10e410e6002f4ded3130033521151f04a9fe69828200000200a1000005ad05ba
0018002201fc4021120b0e0112361c5a1f66086d1f0409100d0d065508100d0d065507100d0d
065524b8ffc0b40c0c02550db8fff4b40c0c02550cb8fff4b40c0c02550bb8fff4b40c0c0255
12b8ffe2b3121a3412b8fff0b322273411b8ffe2b31d273410b8ffe2b31d27340fb8ffe2b31d
273412b8ffd8b31d263411b8ffe2b3121a3410b8ffe2b3121a340fb8ffe24049121a34250e4a
1c4a20530b5c1c6d1c7209780e790f850a880f970da90fb80fe80ee70f100e0c0c20110f1411
110f110f0c09121b02211a160a061211100d0c0518090916171a191e17b8ffc040190b0b0655
17170021221e0201020018180f0f0e081e260e9c06b8ffe8b40f0f025506b8fff6b40d0d0255
06b8ffe040220c0c025506060d0d0655065d2024702480240324221820012000010020101002
5500b8fff6b40f0f025500b8fff6b40d0d025500b8fffa400b0c0c025500060b0b065500b8ff
f7b40c0c065500b8fff8400a0d0d0655005d233ba8182b4e10f42b2b2b2b2b2b2b5d3c4dfd3c
105df62b2b2b2b19e418ed003f3c103c103c3f3cfd3c12392f2bfd3c103c392f121739011117
39870e2e2b057d10c43130015d2b2b2b2b2b2b2b2b2b2b2b2b2b002b2b2b5d435c58400a0840
0f390f103a11123a2b2b2b590171435c58b9000effde401a193911221939122219390e401c39
1022143910221f39102215392b2b2b2b2b2b2b5933112132161615140607161716171323032e
02272623231111213236363534262321a1028ac4cc7acad34d28554cfff4c2556e572d214be1
01a185964e97a3fe3005ba4fc8799cd61d25244e75fe710131848c380b07fd75033337794768
8600000100a2000004e805ba000b0095401506051e080807070003041e0201020a091e0b0008
07b8ffc0401d1012340754034a200a200d020a1a0d0409200120000100201010025500b8fff6
b40f0f025500b8fff6b40d0d025500b8fffab40c0c025500b8fffab40c0c065500b8fff0400a
0d0d0655005d0c3b5b182b4e10f42b2b2b2b2b2b5d3c4dfd3c4e10f65d4df4e42b003f3cfd3c
3f3cfd3c12392f3c10fd3c3130331121152111211521112115a20424fc9e032bfcd5038405ba
adfe3facfe0dad0000020058ff8e05ee05d400150028016840955f269f260219183715020b1c
041f04231b1c141f1423062a052d172b263b053c173a264c054c1749265d05552358266f057b
037a058c038c0595009a03a400ab03d500d516e500e517e5181a1c052b002a053b05045d0592
189626d5260425162a26341639264918491c451f45234b265608581155155a1c5a1d561f5720
5722690566156b267b268e1c8e26db18dc26190b180115b8ffd4b21b3900b8ffd440381b3904
1814182a053a0504020316280307282618160500062103131a0502282618160005241e1e0f03
0208241e07091a2613180f0f025513b8ffeeb40d0d025513b8ffe8b40c0c025513b8fff0b40b
0b065513b8fff4b40d0d065513b8fff440250c0c0655134a021a202a802a022a2126200b010b
180b0b06550b060c0c06550b1929635c182b4e10f42b2b5d4ded4e105df64df42b2b2b2b2b2b
ed003fed3f3fed11173912390111123912173900113310c910c95d3130012b2b5d5d0072715d
015d717225161707262706232224023534122433320412151402251617361134022623220011
1000333237262704f58772399e9da3c5c7febcafb00145c9cb0146ab6efde6a86dab79e991d9
fee2011bdc685c5b659d5d2b87397b5bc0015cdad90164bac1fea5dab5fedf8d2f5d9c0139b2
010a93fed7fed9fee2fece273b19000100a1ffe7052205ba001400d9400a260f58045808c908
0416b8ffc0401613153434043b0846044a08760fa605e80f070c000211b802bbb40609142602
b8ffecb40f0f025502b8fff2400b0d0d025502100c0c025502b8ffe0401c0b0b0655025d2016
01201650160260167016801603160d26200a010ab8ffc0400a1315340a20101002550ab8fff6
b40f0f02550ab8fff6b40d0d02550ab8fffa400b0c0c02550a040b0b06550ab8fff7b40c0c06
550ab8fff8400a0d0d06550a5d153b59182b4e10f42b2b2b2b2b2b2b2b5ded4d105d5d71f62b
2b2b2b4ded003fed3f3c3130015d2b005d013311140204232224023511331114161633323611
0460c264fefbd4cefefa70c247ad7dd6b605bafcb1ddfefca38e010de9034ffcb2bfb562c201
14000002009e0000055a05ba000f001d00e5402f201f0143081c1d1e02010211101e0f000817
262009011f400d0d0255092010100255090a0f0f025509180d0d025509b8fff440150c0c0655
091a1f1d10200120000100201010025500b8fff6b40f0f025500b8fff6b40d0d025500b8fffa
b40c0c025500b8fff7b40c0c065500b8fff8400a0d0d0655005d1e3b5c182b10f62b2b2b2b2b
2b5d3cfd3c10f62b2b2b2b2b5ded003f3cfd3c3f3cfd3c313043794036031b07080608050804
08040619181a1802060b0a0c0a0d0a030615161416131603061b03172101120e17210118081c
2101160a1121002b2b012b2b2a2a2a2a81015d3311213217161716121514020e022325213236
373636353426272623219e01f9ab5a7e5974734e7a91cd85feb1013991a531454d976c4eadfe
cc05ba151d4c62fecfc4a7fefea96132ad363145e9a6e6f72a1e0002fffd0000055905ba0007
000e0167b6010e0f10025502b8fff2b40f10025502b8fff8b40d0d065502b8fff440590c0c06
55090c0c0c0655050c0c0c06552f10301067086809601088039010c905c606c010f0100b0805
590156025010680bb010f30cf30df30e09040c040d040e030b0a090504040c0d0e080607070c
09050408060c07010000b8fff8400f0c0c02550020070c1407070c020303b8fff840150c0c02
550320040c1404040c091e0505081e060306b80270400900080ce94002010202ba010b000101
0b40120c2000650703525004cf04df040390040104b80101400b500cc007df0c03900c010cb8
010140100f07cf07027f0780070207930fd6d7182b10f45d7119f45d71f45d7118ed10ed1a19
10eded00183f3c1aed3fe43c10ed3c10ed87052e2b2b7d10c4872e182b2b7d10c40111123939
1139398710c4c40ec4c4870510c4c40ec4c43130014bb00b534bb01e515a58b4040f030807ba
fff00000fff838383838590172715d2b2b2b2b2b2b2301330123032103132103262706070302
33d10258ddabfd9ba1d901f19946221c3305bafa4601bcfe44025a0196b9778d8b0000000001
0066ffe7057605d3001d00d3b563026a1d0201b8ffe8b40b0b065500b8ffe8405f0b0b065520
00320d63007000741d8000841d90009a05ab03a50db903b40dc70dd000e41df31d110e121d11
1d1d032a0628112a1c201f470d56145715561968056b1d7b128b129a03990e9a1ca801a402a8
11d50e130014001a1014101a0402b8ffdeb2283901b8ffc0402d2839100f0001041b131e0c03
1b1e040910260f4a0026200101011a1f1726200801080c0b0b065508191e635c182b4e10f42b
5d4ded4e10f65d4dedf4ed003fed3fed1117393130012b2b5d5d71005d2b2b01720117060423
2224023534122433320417072626232206021514121633323604b4c23dfec3e5edfed79baf01
43c2dc012c3bbf33c293a9e35c6de686a3e2020231effbc1016ed2e50155b1e0cb2da092a2fe
ef91bbfee98abc000000000100960000055205ba000b01fe401e0322373908093a270a350636
0a470a57038603d70307760ad903d90a0306b8fff440180d0d025528058c048a05aa04ea0805
0a04013504d6040209b8ffe04009122134032012213403b8ffdeb30c391209b8ffe0b3122134
08b8ffe0b312213404b8ffe0b31d213404b8ffc0b312163408b8ffde403d1939080925253d08
0919193d060607090a09080a0503040420050a1405050a090808200706140707060a0a000502
040102070b0800080a03020b010004b8023a400f300501a005b005c005e00504054a08b8023a
400b30070120078007b0070307b80286400c0b2020000100201010025500b8fff6b40f0f0255
00b8fff6b40d0d025500b8fffab40c0c025500b8fffab40c0c065500b8fff2400a0d0d065500
5d0c3ba8182b10f42b2b2b2b2b2b5dedfd5d71edf45d71ed103c103c3c3c003f3c3c3c3f3c3c
3c12392f87052e2b0e7d10c487052e182b047d10c40708103c083c014bb018534bb01b515a58
b90004ffd83859b10602435458b90004fff0b30c113403b8fff040170c113406100e11340810
0e103409100e11340a100d1034002b2b2b2b2b2b593130012b2b2b2b2b2b2b435c5840110922
1939082c1939042c193904221b3905b8ffdeb616390422163906b8ffde400b12390822143904
40143908b8ffdeb52539044015392b2b2b2b2b2b2b2b2b2b2b59002b2b2b0171725d2b00715d
2b2b33113311012101012101071196c202d80107fd990282ff00fdf6f005bafd2902d7fdaefc
9802e6eafe040000000000020003000000000014000100000000003400040020000000040004
00010000f026ffff0000f000ffff100000010000000000060058000000000027000000010002
0003000400050006000700080009000a000b000c000d000e000f001000110012001300140015
0016001700180019001a001b001c001d001e001f002000210022002300240025002605ba0019
05ba001a05a70019042600180000ffe70000ffe80000ffe7fe69ffe805ba0019fe69ffe802ea
000000b8000000b80000000000a800ad016900ad00bf00c201f0001800af00b900b400c80017
0044009c007c009400870006005a00c80089005200520005004400940119ffb4002f00a10003
00a100cd00170057007e00ba00160118ffe9007f008503d300870085000d002200410050006f
008d014cff75005c00df04830037004c006e00700180ff58ff8eff92ffa400a500b903c8fffd
000b001a0063006300cdffee05d8ffdc002d005c0095009900df019209b500400057008000b9
039d0072009a035d0401ff67fffa00030021007700cd0004004d00cd01c0022b004c006500e7
0118017c034305d8ffa3ffb0ffc40003001c005d0068009a00ba013501470221055cff4dffcd
0016002d00780080009900b200b600b600b800bd00da010c05f0ffa4fff00019002c0049007f
00b400ce01c003fefd81fe3f000000050018002900390049006f00be00c700d0012301c1026f
050c05320540057affd4001400310055005700a700b400e601f7027e027e027f03c60446ff42
000e0085009100bf00c200c500e1011a012f014f01560229026f029e03720008002c00310031
006400690089009800c700de012b01b6020c02cf03a304ab04fb061dfee0ff0e00060026009b
009d00c1010d011801200173018201d601e30243025f029b02e2039404a904d20761001c005e
006d008d00ab00f7011201380151015b0168017c01870191019901cd01d001e802410254026b
02ef0368037103bd044204420453047304830586058b06e8fe58fec4fed1fef7ff32ff860051
007c008100910095009e00b400b900cf00d900d900df00e20105010b010e010e012001210155
017b017b017e018d01a201a801a901b401d001d001e201e901f201f501fb020002000206021b
0221022202220223027202770294029c02cf02cf02d002ec02f903170322032b0335033c0359
036f037103870390039003b503e1041a04cf04ff053205320596059f05a805ab05c205f0060c
0782080008ccfca3fd2afddefe00fe88fe96feb2feb4ffe100150019001a001c001f003c0051
00610061006a0078009600a500af00d3010c0118011a012a013e014c0151015f016a01710178
01820184019a01a501a801a901ae01bc01cd01d701ef0200020d021c02210222022e02350242
024f024f025e026502710290029202b402d602fa0307030b030f0315032a0347035d03650374
0379039603b003cc03dd03e203f603fc03fc03ff040a041f04220426042b0447045f0475049e
04e704e7055c05cb05e5060a066d068606b806f10736073e07500751075d078f07b607d40860
00b600c300b500b700000000000000000000000001e00381034503b5008e0233041902ce02ce
002d005f0064034d023f000002a80188027d01b402240578063b023b014e00f00426029402c6
029f02f6023b034d014b0153006a0231000000000000061404aa0000003c04c300ed04bc0265
02ce03b50078060c017e02ef060c00b201000239000001c50330042b03cb00da03df010704a1
00db040a011701ed02a70350010b01bd043e05580021039c00ae0371017d00b5024500000afb
088c012b014e01aa00870054013201f803ff0003024e00b4003703e30083006b02d800ed0077
0088009701640467008e0033017c00e700a6029e0329056e062a061501c90269048a021301b4
000204a9000002390124010305140084015d039a06ef02d9007500cf040a00de03ac04bc02cf
02ae034d04f005520168006d007d00860071ff810079055804d2016700030156002504e00094
007c033204210094007f0072005c002f00b6001800ba00b80041034d00720018001f004c016a
01550099009a009a009800b200040078006900140057006e00ce00b4065402b80067050e0165
00e7000004cbfe52005affa60099ff67006eff92002dffd40087ff7c00b800a800e5008f00a8
0185fe7b0070001e00d900de014c054602cf0546ff2d028a02d90253029600b7000000000000
00000000000000000125011800ea00ea00ae0000003e05bb008a04d70053003fff8cffd50015
0028002200990062004a00e4006d00ee00e5004803c00033fe4e02b1ff460370007905df0051
ffa7ff1f010a0068ff6c004f00bc00a507050061072b4043555441403f3e3d3c3b3a39383735
34333231302f2e2d2c2b2a292827262524232221201f1e1d1c1b1a191817161514131211100f
0e0d0c0b0a090807060504030201002c4523466020b02660b004262348482d2c452346236120
b02661b004262348482d2c45234660b0206120b04660b004262348482d2c4523462361b02060
20b02661b02061b004262348482d2c45234660b0406120b06660b004262348482d2c45234623
61b0406020b02661b04061b004262348482d2c0110203c003c2d2c20452320b0cd442320b801
5a51582320b08d44235920b0ed51582320b04d44235920b09051582320b00d44235921212d2c
20204518684420b001602045b04676688a4560442d2c01b10b0a432343650a2d2c00b10a0b43
23430b2d2c00b0172370b101173e01b0172370b10217453ab10200080d2d2c45b01a234445b0
1923442d2c2045b00325456164b050515845441b2121592d2cb00143632362b0002342b00f2b
2d2c2045b0004360442d2c01b00643b00743650a2d2c2069b04061b0008b20b12cc08a8cb810
0062602b0c642364615c58b00361592d2c45b0112bb0172344b0177ae4182d2c45b0112bb017
23442d2cb01243588745b0112bb0172344b0177ae41b038a45186920b01723448a8a8720b0a0
5158b0112bb0172344b0177ae41b21b0177ae45959182d2c2d2cb0022546608a46b040618c48
2d2c4b53205c58b002855958b00185592d2c20b0032545b019234445b01a23444565234520b0
0325606a20b009234223688a6a606120b01a8ab000527921b21a1a40b9ffe0001a45208a5458
2321b03f1b235961441cb114008a5279b31940201945208a54582321b03f1b235961442d2cb1
10114323430b2d2cb10e0f4323430b2d2cb10c0d4323430b2d2cb10c0d432343650b2d2cb10e
0f432343650b2d2cb11011432343650b2d2c4b525845441b2121592d2c0120b003252349b040
60b0206320b000525823b002253823b002256538008a63381b212121212159012d2c4bb06451
584569b00943608a103a1b212121592d2c01b005251023208af500b0016023edec2d2c01b005
251023208af500b0016123edec2d2c01b0062510f500edec2d2c20b001600110203c003c2d2c
20b001610110203c003c2d2cb02b2bb02a2a2d2c00b00743b006430b2d2c3eb02a2a2d2c352d
2c76b8022323701020b802234520b0005058b00161593a2f182d2c21210c6423648bb8400062
2d2c21b08051580c6423648bb82000621bb200402f2b59b002602d2c21b0c051580c6423648b
b81555621bb200802f2b59b002602d2c0c6423648bb84000626023212d2cb4000100000015b0
0826b00826b00826b008260f10161345683ab001162d2cb4000100000015b00826b00826b008
26b008260f1016134568653ab001162d2c4b53234b515a5820458a60441b2121592d2c4b5458
20458a60441b2121592d2c4b53234b515a58381b2121592d2c4b5458381b2121592d2cb01343
58031b02592d2cb0134358021b03592d2c4b54b012435c5a58381b2121592d2cb012435c580c
b00425b00425060c6423646164b807085158b00425b00425012046b01060482046b010604859
0a21211b2121592d2cb012435c580cb00425b00425060c6423646164b807085158b00425b004
25012046b8fff060482046b8fff06048590a21211b2121592d2c4b53234b515a58b03a2b1b21
21592d2c4b53234b515a58b03b2b1b2121592d2c4b53234b515ab012435c5a58381b2121592d
2c0c8a034b54b00426024b545a8a8a0ab012435c5a58381b2121592d2c4b5258b00425b00425
49b00425b00425496120b0005458212043b0005558b00325b00325b8ffc038b8ffc038591bb0
4054582043b0005458b00225b8ffc038591b2043b0005458b00325b00325b8ffc038b8ffc038
1bb00325b8ffc03859595959212121212d2c462346608a8a462320468a608a61b8ff80622320
10238ab902c202c28a70456020b0005058b00161b8ffba8b1bb0468c59b0106068013a2d2cb1
020042b123018851b1400188535a58b910000020885458b202010243604259b12401885158b9
20000040885458b2020202436042b12401885458b2022002436042004b014b5258b202080243
6042591bb940000080885458b202040243604259b94000008063b80100885458b20208024360
4259b94000010063b80200885458b202100243604259b94000020063b80400885458b2024002
43604259595959592d2cb0024354584b53234b515a58381b2121591b21212121592d00000001
000000030000ea930bd45f0f3cf5081b080000000000a2e3272a00000000b9d5b4f6faaffd67
1000080c00000009000100010000000000010000073efe4e00431000faaffe26100000010000
000000000000000000000000002706000100078d00190473004402aa0085040000880400003f
047300870473004a040000500473004b02390000047300860239002404e30030047300870473
00460556005c0473008301c70088047300870400000f0556009e0473009601c7008304730042
02aa007c02aa007c06aa0087023900bf05c7009c0473ffe105c700a1055600a20639005805c7
00a105c7009e0556fffd05c7006605560096000000000000002c0000026c0000043000000538
000007d000000b7800000d3c00001010000011c4000013840000138400001564000016880000
1738000018dc00001a9000001d3c00001edc00001fd000002198000023bc000024c400002550
0000264c0000283c000028bc0000296400002b9400002c7800002e2400002e58000030c40000
31880000337c000034a0000035e800003794000038d000003b080001000000270100003f0076
000700020010002f00560000040d0aff00030002b1540f4122031700ef031700ff0317000300
1f0317002f0317004f0317005f0317008f0317009f03170006000f0317005f0317006f031700
7f031700bf031700f00317000600400317b2923340b80317b28b3340b80317b36a6c3240b803
17b2613340b80317b35c5d3240b80317b357593240b80317b34d513240b80317b344493240b8
0317b23a3340b80317b331343240b80317b32e423240b80317b3272c3240b80317b312253280
b80317b30a0d32c04116031600d00316000200700316000102c4000f0101001f00a0031500b0
031500020306000f0101001f00400312b32426329fbf03040001030203010064001fffc00301
b20d1132410a02ff02ef0012001f02ee02ed0064001fffc002edb30e11329f414a02e200af02
e200bf02e2000302e202e202e102e1007f02e00001001002e0003f02e0009f02e000bf02e000
cf02e000ef02e0000602e002e002df02df02de02de000f02dd002f02dd003f02dd005f02dd00
9f02dd00bf02dd00ef02dd000702dd02dd001002dc0001000002dc0001001002dc003f02dc00
0202dc02dc001002db000102db02db000f02da000102da02daffc002d3b2373932b9ffc002d3
b22b2f32b9ffc002d3b21f2532b9ffc002d3b2171b32b9ffc002d3b2121632b802d2b2f9291f
b802e3b3202b1fa0413002d400b002d40002000002d4001002d4002002d4005002d4006002d4
007002d40006006002d6007002d6008002d6009002d600a002d600b002d60006000002d60010
02d6002002ca002002cc002002d6003002d6004002d6005002d6000802d0b2202b1fb802cfb2
26421f411602ce02c70017001f02cd02c80017001f02cc02c60017001f02cb02c50017001f02
c902c5001e001f02ca02c6b21e1f00410b02c6000002c7001002c6001002c7002f02c5000502
c1b324121fff411102bf0001001f02bf002f02bf003f02bf004f02bf005f02bf008f02bf0006
02bf0222b2641f12410b02bb00ca0800001f02b200e90800001f02a600a20800406a1f402643
4932402043493240263a3d3240203a3d329f209f26024026969932402096993240268e923240
208e92324026848c324020848c3240267a813240207a813240266c763240206c76324026646a
324020646a3240265a5f3240205a5f3240264f543240204f5432b8029eb724271f374f6b0120
410f0277003002770040027700500277000402770277027700f90400001f029bb22a2a1fb802
9a402b292a1f80ba0180bc0180520180a201806501807e01808101803c01805e01802b01801c
01801e0180400180bb0138000100800140b40180400180bb013800010080013940180180ca01
80ad018073018026018025018024018020013740b80221b2493340b80221b2453340b80221b3
41423240b80221b33d3e320f410f0221003f0221007f0221000300bf022100cf022100ff0221
000300400221b320223240b80221b3191e3240b80222b32a3f3240b80221b32e3a326f414802
c3007f02c3008f02c300df02c30004002f02c3006002c300cf02c30003000f02c3003f02c300
5f02c300c002c300ef02c300ff02c3000600df02220001008f02220001000f0222002f022200
3f0222005f0222007f022200ef0222000600bf022100ef02210002006f0221007f022100af02
210003002f0221003f0221004f0221000302c302c30222022202210221401d101c102b104803
8f1c010f1e014f1eff1e023700161600000012110811b8010db6f70df8f70d00094109028e02
8f001d001f0290028f001d001f028fb2f91d1fb80198b226bb1f41150197001e0401001f0139
00260125001f013800730401001f0135001c0801001f0134001c02ab001f0132b21c561fb801
0fb2262c1fba010e001e0401b61ff91ce41fe91cb80201b61fe81cbb1fd720b80401b21fd51c
b802abb61fd41c891fc92fb80801b21fbc26b80101b21fba20b80201b61fb91c381fadcab804
01b21f8126b8019ab21f7e26b8019ab61f7d1c471f6b1cb80401b21f6526b8019ab21f5e73b8
0401400f1f52265a1f481c891f441c621f4073b80801b61f3f1c5e1f3c26b8019ab21f351cb8
0401b61f301cbb1f2b1cb80401b61f2a1c561f291cb80101b21f231eb80401b21f5537b80168
402c07960758074f07360732072c0721071f071d071b071408120810080e080c080a08080806
0804080208000814b8ffe0402b00000100140610000001000604000001000410000001001002
000001000200000001000002010802004a00b013034b024b5342014bb0c063004b6220b0f653
23b8010a515ab005234201b0124b004b5442b0382b4bb807ff52b0372b4bb007505b58b10101
8e59b0382bb00288b801005458b801ffb101018e851bb0124358b900010111858d1bb9000101
28858d5959001816763f183f123e113946443e113946443e113946443e113946443e11394660
443e11394660442b2b2b2b2b2b2b2b2b2b2b182b2b2b2b2b2b2b2b2b2b2b182b1db0964b5358
b0aa1d59b0324b5358b0ff1d594bb09353205c58b901f201f04544b901f101f045445958b903
3e01f2455258b901f2033e4459594bb8015653205c58b9002001f14544b9002601f145445958
b9081e0020455258b90020081e4459594bb8019a53205c58b9002501f24544b9002401f24544
5958b909090025455258b9002509094459594bb8040153205c58b173244544b1242445445958
b917200073455258b9007317204459594bb8040153205c58b1ca254544b1252545445958b916
8000ca455258b900ca16804459594bb03e53205c58b11c1c4544b11e1c45445958b9011a001c
455258b9001c011a4459594bb05653205c58b11c1c4544b12f1c45445958b90189001c455258
b9001c01894459594bb8030153205c58b11c1c4544b11c1c45445958b90de0001c455258b900
1c0de04459592b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b
2b2b2b2b2b2b2b2b2b65422b2b01b33b59635c456523456023456560234560b08b766818b080
622020b163594565234520b003266062636820b003266165b059236544b063234420b13b5c45
65234520b003266062636820b003266165b05c236544b03b2344b1005c455458b15c406544b2
3b403b4523614459b347503437456523456023456560234560b089766818b080622020b13450
4565234520b003266062636820b003266165b050236544b034234420b147374565234520b003
266062636820b003266165b037236544b0472344b10037455458b137406544b2474047452361
4459004b5342014b5058b108004259435c58b108004259b3020b0a124358601b215942161070
3eb0124358b93b21187e1bba040001a8000b2b59b00c2342b00d2342b0124358b92d412d411b
ba04000400000b2b59b00e2342b00f2342b0124358b9187e3b211bba01a80400000b2b59b010
2342b0112342002b7475737500184569444569444569447373737374757374752b2b2b2b7475
2b2b2b2b2b737373737373737373737373737373737373737373737373732b2b2b45b0406144
737400004bb02a534bb03f515a58b1070745b040604459004bb03a534bb03f515a58b10b0b45
b8ffc0604459004bb02e534bb03a515a58b1030345b040604459004bb02e534bb03c515a58b1
090945b8ffc06044592b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b752b2b2b2b2b2b2b435c58
b9008002bbb301401e017400735903b01e4b5402b0124b545ab012435c5a58ba009f02220001
007359002b7473012b01732b2b2b2b2b2b2b2b737373732b002b2b2b2b2b2b00456944734569
4473456944737475456944734569444569444569447374456944456944732b2b2b2b2b732b00
2b732b74752b2b2b2b2b2b2b2b2b2b2b2b2b2b7374752b0000>
] def
FontName currentdict end definefont pop
%%Page: 1 1
%%BeginPageSetup
%%PageBoundingBox: 0 0 196 229
%%EndPageSetup
q
1 g
84.574 223.767 111.258 -223.258 re f
0 g
0.8 w
0 J
0 j
[] 0.0 d
4 M q 1 0 0 -1 0 228.91925 cm
84.574 5.152 111.258 223.258 re S Q
BT
9.6 0 0 9.6 0.084375 2.047373 Tm
/f-0-0 1 Tf
[<010203>-1<04050607>-1<08090a0b07>-1<0509>]TJ
0 22.916667 Td
[<010203>-1<04050607>-1<08090a0c>1<02>-1<06>]TJ
ET
[ 0.8 0.8] 0 d
q 1 0 0 -1 0 228.91925 cm
84.16 205.164 m 195.816 205.164 l S Q
[ 0.8 0.8] 0 d
q 1 0 0 -1 0 228.91925 cm
84.602 56.379 m 195.859 56.379 l S Q
[ 0.8 0.8] 0 d
q 1 0 0 -1 0 228.91925 cm
84.602 116.379 m 195.859 116.379 l S Q
BT
9.6 0 0 9.6 98.925002 8.414549 Tm
/f-0-0 1 Tf
[<0d0e>-1<03>-1<0907>-1<0f0a10>-1<0c>1<03>-1<11>-1<080c>1<11>-1<03>-1<09>]TJ
0.68164 11.25 Td
[<1213>-1<0c>1<080c140a100c03>-1<11080c1103>-1<09>]TJ
0.343913 7.916667 Td
[<0d0e>-1<03>-1<0907>-1<0f0a10>-1<0c>1<07>-1<0804>]TJ
-11.375163 -8.809407 Td
[<10>-1<0c>1<07>-1<08040a>1<15>-1<02>-1<1213>-1<0c>1<09>-1<03>]TJ
ET
0.558281 w
[] 0.0 d
q 1 0 0 -1 0 228.91925 cm
76.48 227.523 m 83.652 227.523 l S Q
81.422 1.396 m 80.305 0.279 l 84.211 1.396 l 80.305 2.513 l 81.422
1.396 l h
81.422 1.396 m f*
0.279141 w
q -1 0 0 1 0 228.91925 cm
-81.422 -227.523 m -80.305 -228.641 l -84.211 -227.523 l -80.305
-226.406 l -81.422 -227.523 l h
-81.422 -227.523 m S Q
0.558281 w
q 1 0 0 -1 0 228.91925 cm
76.48 115.523 m 83.652 115.523 l S Q
81.422 113.396 m 80.305 112.279 l 84.211 113.396 l 80.305 114.513 l
81.422 113.396 l h
81.422 113.396 m f*
0.279141 w
q -1 0 0 1 0 228.91925 cm
-81.422 -115.523 m -80.305 -116.641 l -84.211 -115.523 l -80.305
-114.406 l -81.422 -115.523 l h
-81.422 -115.523 m S Q
0.558281 w
q 1 0 0 -1 0 228.91925 cm
76.332 6.035 m 83.504 6.035 l S Q
81.27 222.884 m 80.152 221.767 l 84.063 222.884 l 80.152 224.001 l
81.27 222.884 l h
81.27 222.884 m f*
0.279141 w
q -1 0 0 1 0 228.91925 cm
-81.27 -6.035 m -80.152 -7.152 l -84.063 -6.035 l -80.152 -4.918 l
-81.27 -6.035 l h
-81.27 -6.035 m S Q
0.8 w
[ 0.8 0.8] 0 d
q 1 0 0 -1 0 228.91925 cm
84.145 181.18 m 195.801 181.18 l S Q
BT
9.6 0 0 9.6 88.22969 31.844237 Tm
/f-0-0 1 Tf
[<0d0e>-1<03>-1<0907>-1<0f0a1602>-1<080717>-1<0a>1<10>-1<0c0203>-1<07>-1<18
09>]TJ
ET
0.558281 w
[] 0.0 d
q 1 0 0 -1 0 228.91925 cm
76.332 206.035 m 83.504 206.035 l S Q
81.27 22.884 m 80.152 21.767 l 84.063 22.884 l 80.152 24.001 l 81.27
22.884 l h
81.27 22.884 m f*
0.279141 w
q -1 0 0 1 0 228.91925 cm
-81.27 -206.035 m -80.152 -207.152 l -84.063 -206.035 l -80.152
-204.918 l -81.27 -206.035 l h
-81.27 -206.035 m S Q
BT
9.6 0 0 9.6 -0.310938 25.150499 Tm
/f-0-0 1 Tf
[<080e0d>-1<0e0f>-1<1610>-1<19>-1<1a>]TJ
0.0843099 2.006672 Td
[<10>-1<0c>1<07>-1<08040a>1<16>-1<121b>-1<12>-1<0c>]TJ
ET
0.558281 w
q 1 0 0 -1 0 228.91925 cm
76.332 182.035 m 83.504 182.035 l S Q
81.27 46.884 m 80.152 45.767 l 84.063 46.884 l 80.152 48.001 l 81.27
46.884 l h
81.27 46.884 m f*
0.279141 w
q -1 0 0 1 0 228.91925 cm
-81.27 -182.035 m -80.152 -183.152 l -84.063 -182.035 l -80.152
-180.918 l -81.27 -182.035 l h
-81.27 -182.035 m S Q
0.8 w
[ 0.8 0.8] 0 d
q 1 0 0 -1 0 228.91925 cm
84.543 97.18 m 195.801 97.18 l S Q
[ 0.8 0.8] 0 d
q 1 0 0 -1 0 228.91925 cm
84.543 77.18 m 195.801 77.18 l S Q
BT
9.6 0 0 9.6 102.637498 156.583295 Tm
/f-0-0 1 Tf
[<09140c080c140a>1<10>-1<0c0311>-1<080c>1<11>-1<03>-1<09>]TJ
-1.601887 -1.938639 Td
[<1c1d0d1e>-1<1f20>-1<21221c1f20>-1<23>-1<1e10>-1<0d>-1<24>-1<25>]TJ
10.675781 0 Td
<26>Tj
ET
Q
showpage
%%Trailer
count op_count sub {pop} repeat
countdictstack dict_count sub {end} repeat
cairo_eps_state restore
%%EOF

Binary file not shown.

Before

Width:  |  Height:  |  Size: 20 KiB

View File

@ -1,280 +0,0 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<svg
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://web.resource.org/cc/"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
xmlns:xlink="http://www.w3.org/1999/xlink"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
width="250"
height="300"
id="svg2160"
sodipodi:version="0.32"
inkscape:version="0.45.1"
version="1.0"
sodipodi:docbase="D:\Progetti\ChibiOS-RT\docs\img"
sodipodi:docname="workspace.svg"
inkscape:output_extension="org.inkscape.output.svg.inkscape"
inkscape:export-filename="D:\Progetti\ChibiOS-RT\docs\img\workspace.png"
inkscape:export-xdpi="90"
inkscape:export-ydpi="90">
<defs
id="defs2162">
<marker
inkscape:stockid="Arrow1Mend"
orient="auto"
refY="0"
refX="0"
id="Arrow1Mend"
style="overflow:visible">
<path
id="path3299"
d="M 0,0 L 5,-5 L -12.5,0 L 5,5 L 0,0 z "
style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none"
transform="matrix(-0.4,0,0,-0.4,-4,0)" />
</marker>
<linearGradient
inkscape:collect="always"
id="linearGradient3224">
<stop
style="stop-color:#ffffff;stop-opacity:1;"
offset="0"
id="stop3226" />
<stop
style="stop-color:#000000;stop-opacity:0"
offset="1"
id="stop3228" />
</linearGradient>
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient3224"
id="linearGradient3230"
x1="199.30756"
y1="341.00253"
x2="348.78439"
y2="341.00253"
gradientUnits="userSpaceOnUse" />
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient3224"
id="linearGradient2357"
gradientUnits="userSpaceOnUse"
x1="199.30756"
y1="341.00253"
x2="348.78439"
y2="341.00253" />
</defs>
<sodipodi:namedview
id="base"
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1.0"
inkscape:pageopacity="0.0"
inkscape:pageshadow="2"
inkscape:zoom="1.6725"
inkscape:cx="125"
inkscape:cy="128.25112"
inkscape:document-units="px"
inkscape:current-layer="layer1"
showgrid="true"
width="250px"
height="300px"
gridspacingx="5px"
gridspacingy="5px"
inkscape:grid-points="false"
inkscape:grid-bbox="true"
gridtolerance="10"
inkscape:object-paths="true"
objecttolerance="1"
guidetolerance="1"
inkscape:window-width="993"
inkscape:window-height="871"
inkscape:window-x="352"
inkscape:window-y="69" />
<metadata
id="metadata2165">
<rdf:RDF>
<cc:Work
rdf:about="">
<dc:format>image/svg+xml</dc:format>
<dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
</cc:Work>
</rdf:RDF>
</metadata>
<g
inkscape:label="Livello 1"
inkscape:groupmode="layer"
id="layer1">
<rect
style="fill:#ffffff;stroke:#000000;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
id="rect2196"
width="139.07188"
height="279.0719"
x="110.46406"
y="10.464057" />
<flowRoot
xml:space="preserve"
id="flowRoot3180"
transform="translate(1.8535156,-54.849147)"><flowRegion
id="flowRegion3182"><rect
id="rect3184"
width="97.01046"
height="17.563538"
x="2.9895365"
y="332.43646" /></flowRegion><flowPara
id="flowPara3186">Workspace base</flowPara></flowRoot> <flowRoot
xml:space="preserve"
id="flowRoot3188"
transform="translate(1.8535156,-329.84915)"><flowRegion
id="flowRegion3190"><rect
id="rect3192"
width="97.01046"
height="17.563538"
x="2.9895365"
y="332.43646" /></flowRegion><flowPara
id="flowPara3196">Workspace top</flowPara></flowRoot> <path
style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:1,1;stroke-dashoffset:0;stroke-opacity:1"
d="M 109.94816,260.4823 C 249.5177,260.4823 249.5177,260.4823 249.5177,260.4823"
id="path3243"
inkscape:export-filename="C:\Progetti\ChibiOS\homepage\workspace.png"
inkscape:export-xdpi="90"
inkscape:export-ydpi="90" />
<path
style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;marker-start:none;stroke-miterlimit:4;stroke-dasharray:1, 1;stroke-dashoffset:0;stroke-opacity:1"
d="M 110.5,74.5 C 249.57284,74.5 249.57284,74.5 249.57284,74.5"
id="path3245" />
<path
style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:1, 1;stroke-dashoffset:0;stroke-opacity:1"
d="M 110.5,149.5 C 249.57284,149.5 249.57284,149.5 249.57284,149.5"
id="path3247" />
<flowRoot
xml:space="preserve"
id="flowRoot3249"
transform="translate(125.4043,-62.808117)"><flowRegion
id="flowRegion3251"><rect
id="rect3253"
width="107.01046"
height="12.563538"
x="2.9895365"
y="332.43646" /></flowRegion><flowPara
id="flowPara3255">Thread Structure</flowPara></flowRoot> <flowRoot
xml:space="preserve"
id="flowRoot3257"
transform="translate(133.58398,-197.80812)"><flowRegion
id="flowRegion3259"><rect
id="rect3261"
width="102.01046"
height="17.563538"
x="2.9895365"
y="332.43646" /></flowRegion><flowPara
id="flowPara3263">intctx Structure</flowPara></flowRoot> <flowRoot
xml:space="preserve"
id="flowRoot3265"
transform="translate(137.71094,-292.80812)"><flowRegion
id="flowRegion3267"><rect
id="rect3269"
width="97.01046"
height="17.563538"
x="2.9895365"
y="332.43646" /></flowRegion><flowPara
id="flowPara3273">Thread Stack</flowPara></flowRoot> <flowRoot
xml:space="preserve"
id="flowRoot3277"
transform="translate(1.2089844,-187.09523)"><flowRegion
id="flowRegion3279"><rect
id="rect3281"
width="97.01046"
height="17.563538"
x="2.9895365"
y="332.43646" /></flowRegion><flowPara
id="flowPara3283">Stack Pointer</flowPara></flowRoot> <path
style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.6978516px;stroke-linecap:butt;stroke-linejoin:miter;marker-end:url(#Arrow1Mend);stroke-opacity:1"
d="M 100.34893,288.42983 C 109.31485,288.42983 109.31485,288.42983 109.31485,288.42983"
id="path3487" />
<path
style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.6978516px;stroke-linecap:butt;stroke-linejoin:miter;marker-end:url(#Arrow1Mend);stroke-opacity:1"
d="M 100.34893,148.42983 C 109.31485,148.42983 109.31485,148.42983 109.31485,148.42983"
id="path3489" />
<path
style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.6978516px;stroke-linecap:butt;stroke-linejoin:miter;marker-end:url(#Arrow1Mend);stroke-opacity:1"
d="M 100.16177,11.570166 C 109.12769,11.570166 109.12769,11.570166 109.12769,11.570166"
id="path3491" />
<path
style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:1, 1;stroke-dashoffset:0;stroke-opacity:1"
d="M 109.93046,230.5 C 249.5,230.5 249.5,230.5 249.5,230.5"
id="path2206"
inkscape:export-filename="C:\Progetti\ChibiOS\homepage\workspace.png"
inkscape:export-xdpi="90"
inkscape:export-ydpi="90" />
<flowRoot
xml:space="preserve"
id="flowRoot2208"
transform="translate(112.03516,-92.095227)"><flowRegion
id="flowRegion2210"><rect
id="rect2212"
width="132.01047"
height="17.563538"
x="2.9895365"
y="332.43646" /></flowRegion><flowPara
id="flowPara2214">Thread Local Storage</flowPara></flowRoot> <path
style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.6978516px;stroke-linecap:butt;stroke-linejoin:miter;marker-end:url(#Arrow1Mend);stroke-opacity:1"
d="M 100.16177,261.57017 C 109.12769,261.57017 109.12769,261.57017 109.12769,261.57017"
id="path2216" />
<flowRoot
xml:space="preserve"
id="flowRoot2218"
transform="translate(1.359375,-83.728054)"><flowRegion
id="flowRegion2220"><rect
id="rect2222"
width="117.01046"
height="17.563538"
x="2.9895365"
y="332.43646" /></flowRegion><flowPara
id="flowPara2224">chThdLS()</flowPara></flowRoot> <flowRoot
xml:space="preserve"
id="flowRoot2209"
transform="translate(2.3710937,-107.80812)"><flowRegion
id="flowRegion2211"><rect
id="rect2213"
width="97.01046"
height="17.563538"
x="2.9895365"
y="332.43646" /></flowRegion><flowPara
id="flowPara2215">Stack Limit</flowPara></flowRoot> <path
style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.6978516px;stroke-linecap:butt;stroke-linejoin:miter;marker-end:url(#Arrow1Mend);stroke-opacity:1"
d="M 100.16177,231.57017 C 109.12769,231.57017 109.12769,231.57017 109.12769,231.57017"
id="path2217" />
<path
style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:1, 1;stroke-dashoffset:0;stroke-opacity:1"
d="M 110.42716,125.5 C 249.5,125.5 249.5,125.5 249.5,125.5"
id="path2221" />
<path
style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:1, 1;stroke-dashoffset:0;stroke-opacity:1"
d="M 110.42716,100.5 C 249.5,100.5 249.5,100.5 249.5,100.5"
id="path2223" />
<flowRoot
xml:space="preserve"
id="flowRoot2225"
transform="translate(130.04492,-248.01905)"><flowRegion
id="flowRegion2227"><rect
id="rect2229"
width="102.01046"
height="17.563538"
x="2.9895365"
y="332.43646" /></flowRegion><flowPara
id="flowPara2231">extctx Structure</flowPara></flowRoot> <flowRoot
xml:space="preserve"
id="flowRoot2235"
transform="translate(110.82227,-224.75538)"><flowRegion
id="flowRegion2237"><rect
id="rect2239"
width="137.01047"
height="17.563538"
x="2.9895365"
y="332.43646" /></flowRegion><flowPara
id="flowPara2241">INT_REQUIRED_STACK</flowPara></flowRoot> </g>
</svg>

Before

Width:  |  Height:  |  Size: 11 KiB

View File

@ -1,2 +0,0 @@
#!/bin/bash
rsync -avP -e ssh --delete --exclude=.* ./html/ gdisirio,chibios@web.sourceforge.net:/home/groups/c/ch/chibios/htdocs/docs3/rt

View File

@ -1,409 +0,0 @@
/*
ChibiOS - Copyright (C) 2006..2015 Giovanni Di Sirio.
This file is part of ChibiOS.
ChibiOS is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 3 of the License, or
(at your option) any later version.
ChibiOS is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
/**
* @page concepts Kernel Concepts
* @brief ChibiOS/RT Kernel Concepts
* - @ref naming
* - @ref api_suffixes
* - @ref interrupt_classes
* - @ref system_states
* - @ref scheduling
* - @ref thread_states
* - @ref priority
* - @ref warea
* .
* @section naming Naming Conventions
* ChibiOS/RT APIs are all named following this convention:
* @a ch\<group\>\<action\>\<suffix\>().
* The possible groups are: @a Sys, @a Sch, @a Time, @a VT, @a Thd, @a Sem,
* @a Mtx, @a Cond, @a Evt, @a Msg, @a Reg, @a SequentialStream, @a IO, @a IQ,
* @a OQ, @a Dbg, @a Core, @a Heap, @a Pool.
*
* @section api_suffixes API Name Suffixes
* The suffix can be one of the following:
* - <b>None</b>, APIs without any suffix can be invoked only from the user
* code in the <b>Normal</b> state unless differently specified. See
* @ref system_states.
* - @anchor I-Class <b>"I"</b>, I-Class APIs are invokable only from the
* <b>I-Locked</b> or <b>S-Locked</b> states. See @ref system_states.
* - @anchor S-Class <b>"S"</b>, S-Class APIs are invokable only from the
* <b>S-Locked</b> state. See @ref system_states.
* .
* Examples: @p chThdCreateStatic(), @p chSemSignalI(), @p chIQGetTimeout().
*
* @section interrupt_classes Interrupt Classes
* In ChibiOS/RT there are three logical interrupt classes:
* - <b>Regular Interrupts</b>. Maskable interrupt sources that cannot
* preempt (small parts of) the kernel code and are thus able to invoke
* operating system APIs from within their handlers. The interrupt handlers
* belonging to this class must be written following some rules. See the
* system APIs group and the web article
* <a href="http://chibios.sourceforge.net/dokuwiki/doku.php?id=chibios:howtos:interrupts">
* How to write interrupt handlers</a>.
* - <b>Fast Interrupts</b>. Maskable interrupt sources with the ability
* to preempt the kernel code and thus have a lower latency and are less
* subject to jitter, see the web article
* <a href="http://chibios.sourceforge.net/dokuwiki/doku.php?id=chibios:articles:jitter">
* Response Time and Jitter</a>.
* Such sources are not supported on all the architectures.<br>
* Fast interrupts are not allowed to invoke any operating system API from
* within their handlers. Fast interrupt sources may, however, pend a lower
* priority regular interrupt where access to the operating system is
* possible.
* - <b>Non Maskable Interrupts</b>. Non maskable interrupt sources are
* totally out of the operating system control and have the lowest latency.
* Such sources are not supported on all the architectures.
* .
* The mapping of the above logical classes into physical interrupts priorities
* is, of course, port dependent. See the documentation of the various ports
* for details.
*
* @section system_states System States
* When using ChibiOS/RT the system can be in one of the following logical
* operating states:
* - <b>Init</b>. When the system is in this state all the maskable
* interrupt sources are disabled. In this state it is not possible to use
* any system API except @p chSysInit(). This state is entered after a
* physical reset.
* - <b>Normal</b>. All the interrupt sources are enabled and the system APIs
* are accessible, threads are running.
* - <b>Suspended</b>. In this state the fast interrupt sources are enabled but
* the regular interrupt sources are not. In this state it is not possible
* to use any system API except @p chSysDisable() or @p chSysEnable() in
* order to change state.
* - <b>Disabled</b>. When the system is in this state both the maskable
* regular and fast interrupt sources are disabled. In this state it is not
* possible to use any system API except @p chSysSuspend() or
* @p chSysEnable() in order to change state.
* - <b>Sleep</b>. Architecture-dependent low power mode, the idle thread
* goes in this state and waits for interrupts, after servicing the interrupt
* the Normal state is restored and the scheduler has a chance to reschedule.
* - <b>S-Locked</b>. Kernel locked and regular interrupt sources disabled.
* Fast interrupt sources are enabled. @ref S-Class and @ref I-Class APIs are
* invokable in this state.
* - <b>I-Locked</b>. Kernel locked and regular interrupt sources disabled.
* @ref I-Class APIs are invokable from this state.
* - <b>Serving Regular Interrupt</b>. No system APIs are accessible but it is
* possible to switch to the I-Locked state using @p chSysLockFromIsr() and
* then invoke any @ref I-Class API. Interrupt handlers can be preemptable on
* some architectures thus is important to switch to I-Locked state before
* invoking system APIs.
* - <b>Serving Fast Interrupt</b>. System APIs are not accessible.
* - <b>Serving Non-Maskable Interrupt</b>. System APIs are not accessible.
* - <b>Halted</b>. All interrupt sources are disabled and system stopped into
* an infinite loop. This state can be reached if the debug mode is activated
* <b>and</b> an error is detected <b>or</b> after explicitly invoking
* @p chSysHalt().
* .
* Note that the above states are just <b>Logical States</b> that may have no
* real associated machine state on some architectures. The following diagram
* shows the possible transitions between the states:
*
* @if LATEX_PDF
* @dot
digraph example {
size="5, 7";
rankdir="LR";
node [shape=circle, fontname=Helvetica, fontsize=8, fixedsize="true", width="0.75", height="0.75"];
edge [fontname=Helvetica, fontsize=8];
init [label="Init", style="bold"];
norm [label="Normal", shape=doublecircle];
susp [label="Suspended"];
disab [label="Disabled"];
slock [label="S-Locked"];
ilock [label="I-Locked"];
slock [label="S-Locked"];
sleep [label="Sleep"];
sri [label="SRI"];
init -> norm [label="chSysInit()"];
norm -> slock [label="chSysLock()", constraint=false];
slock -> norm [label="chSysUnlock()"];
norm -> susp [label="chSysSuspend()"];
susp -> disab [label="chSysDisable()"];
norm -> disab [label="chSysDisable()"];
susp -> norm [label="chSysEnable()"];
disab -> norm [label="chSysEnable()"];
disab -> susp [label="chSysSuspend()"];
slock -> ilock [label="Context Switch", dir="both"];
norm -> sri [label="Regular IRQ", style="dotted"];
sri -> norm [label="Regular IRQ return", fontname=Helvetica, fontsize=8];
sri -> ilock [label="chSysLockFromIsr()", constraint=false];
ilock -> sri [label="chSysUnlockFromIsr()", fontsize=8];
norm -> sleep [label="Idle Thread"];
sleep -> sri [label="Regular IRQ", style="dotted"];
}
* @enddot
* @else
* @dot
digraph example {
rankdir="LR";
node [shape=circle, fontname=Helvetica, fontsize=8, fixedsize="true", width="0.75", height="0.75"];
edge [fontname=Helvetica, fontsize=8];
init [label="Init", style="bold"];
norm [label="Normal", shape=doublecircle];
susp [label="Suspended"];
disab [label="Disabled"];
slock [label="S-Locked"];
ilock [label="I-Locked"];
slock [label="S-Locked"];
sleep [label="Sleep"];
sri [label="SRI"];
init -> norm [label="chSysInit()"];
norm -> slock [label="chSysLock()", constraint=false];
slock -> norm [label="chSysUnlock()"];
norm -> susp [label="chSysSuspend()"];
susp -> disab [label="chSysDisable()"];
norm -> disab [label="chSysDisable()"];
susp -> norm [label="chSysEnable()"];
disab -> norm [label="chSysEnable()"];
disab -> susp [label="chSysSuspend()"];
slock -> ilock [label="Context Switch", dir="both"];
norm -> sri [label="Regular IRQ", style="dotted"];
sri -> norm [label="Regular IRQ return", fontname=Helvetica, fontsize=8];
sri -> ilock [label="chSysLockFromIsr()", constraint=false];
ilock -> sri [label="chSysUnlockFromIsr()", fontsize=8];
norm -> sleep [label="Idle Thread"];
sleep -> sri [label="Regular IRQ", style="dotted"];
}
* @enddot
* @endif
* Note, the <b>SFI</b>, <b>Halted</b> and <b>SNMI</b> states were not shown
* because those are reachable from most states:
*
* @dot
digraph example {
size="5, 7";
rankdir="LR";
node [shape=circle, fontname=Helvetica, fontsize=8, fixedsize="true", width="0.75", height="0.75"];
edge [fontname=Helvetica, fontsize=8];
any1 [label="Any State\nexcept *"];
sfi [label="SFI"];
any1 -> sfi [style="dotted", label="Fast IRQ"];
sfi -> any1 [label="Fast IRQ return"];
}
* @enddot
* @dot
digraph example {
size="5, 7";
rankdir="LR";
node [shape=circle, fontname=Helvetica, fontsize=8, fixedsize="true", width="0.75", height="0.75"];
edge [fontname=Helvetica, fontsize=8];
any2 [label="Any State"];
halt [label="Halted"];
SNMI [label="SNMI"];
any2 -> halt [label="chSysHalt()"];
any2 -> SNMI [label="Synchronous NMI"];
any2 -> SNMI [label="Asynchronous NMI", style="dotted"];
SNMI -> any2 [label="NMI return"];
halt -> SNMI [label="Asynchronous NMI", style="dotted"];
SNMI -> halt [label="NMI return"];
}
* @enddot
* @attention * except: <b>Init</b>, <b>Halt</b>, <b>SNMI</b>, <b>Disabled</b>.
*
* @section scheduling Scheduling
* The strategy is very simple the currently ready thread with the highest
* priority is executed. If more than one thread with equal priority are
* eligible for execution then they are executed in a round-robin way, the
* CPU time slice constant is configurable. The ready list is a double linked
* list of threads ordered by priority.<br><br>
* @if LATEX_PDF
* @dot
digraph example {
size="5, 7";
rankdir="LR";
node [shape=square, fontname=Helvetica, fontsize=8,
fixedsize="true", width="0.6", height="0.5"];
edge [fontname=Helvetica, fontsize=8];
subgraph cluster_running {
node [shape=square, fontname=Helvetica, fontsize=8,
fixedsize="true", width="0.6", height="0.5"];
currp [label="'currp'\npointer", style="bold"];
T4 [label="Tuser(4)\nprio=100"];
label = "Currently Running Thread";
penwidth = 0;
}
subgraph cluster_rlist {
node [shape=square, fontname=Helvetica, fontsize=8,
fixedsize="true", width="0.6", height="0.5"];
rh [label="ready list\nheader\nprio=0", style="bold"];
Ti [label="Tidle\nprio=1"];
Tm [label="Tmain\nprio=64"];
T1 [label="Tuser(1)\nprio=32"];
T2 [label="Tuser(2)\nprio=32"];
T3 [label="Tuser(3)\nprio=80"];
label = "Threads Ready for Execution";
penwidth = 0;
}
currp -> T4
rh -> Ti -> T1 -> T2 -> Tm -> T3 -> rh [label="p_next"];
rh -> T3 -> Tm -> T2 -> T1 -> Ti -> rh [label="p_prev"];
}
* @enddot
* @else
* @dot
digraph example {
rankdir="LR";
node [shape=square, fontname=Helvetica, fontsize=8,
fixedsize="true", width="0.6", height="0.5"];
edge [fontname=Helvetica, fontsize=8];
subgraph cluster_running {
node [shape=square, fontname=Helvetica, fontsize=8,
fixedsize="true", width="0.6", height="0.5"];
currp [label="'currp'\npointer", style="bold"];
T4 [label="Tuser(4)\nprio=100"];
label = "Currently Running Thread";
penwidth = 0;
}
subgraph cluster_rlist {
node [shape=square, fontname=Helvetica, fontsize=8,
fixedsize="true", width="0.6", height="0.5"];
rh [label="ready list\nheader\nprio=0", style="bold"];
Ti [label="Tidle\nprio=1"];
Tm [label="Tmain\nprio=64"];
T1 [label="Tuser(1)\nprio=32"];
T2 [label="Tuser(2)\nprio=32"];
T3 [label="Tuser(3)\nprio=80"];
label = "Threads Ready for Execution";
penwidth = 0;
}
currp -> T4
rh -> Ti -> T1 -> T2 -> Tm -> T3 -> rh [label="p_next"];
rh -> T3 -> Tm -> T2 -> T1 -> Ti -> rh [label="p_prev"];
}
* @enddot
* @endif
* <br>
* Note that the currently running thread is not in the ready list, the list
* only contains the threads ready to be executed but still actually waiting.
*
* @section thread_states Thread States
* The image shows how threads can change their state in ChibiOS/RT.<br>
* @if LATEX_PDF
* @dot
digraph example {
rankdir="LR";
node [shape=circle, fontname=Helvetica, fontsize=8, fixedsize="true", width="0.75", height="0.75"];
size="5, 7";
edge [fontname=Helvetica, fontsize=8];
start [label="Start", style="bold"];
run [label="Running"];
ready [label="Ready"];
suspend [label="Suspended"];
sleep [label="Sleeping"];
stop [label="Stop", style="bold"];
start -> suspend [label="\n chThdCreateI()", constraint=false, dir=back];
start -> run [label="chThdCreate()"];
start -> ready [label="chThdCreate()"];
run -> ready [label="Reschedule", dir="both"];
suspend -> run [label="chThdResume()"];
suspend -> ready [label="chThdResume()"];
run -> sleep [label="chSchGoSleepS()"];
sleep -> run [label="chSchWakepuS()"];
sleep -> ready [label="chSchWakepuS()"];
run -> stop [label="chThdExit()"];
}
* @enddot
* @else
* @dot
digraph example {
rankdir="LR";
node [shape=circle, fontname=Helvetica, fontsize=8, fixedsize="true", width="0.75", height="0.75"];
edge [fontname=Helvetica, fontsize=8];
start [label="Start", style="bold"];
run [label="Running"];
ready [label="Ready"];
suspend [label="Suspended"];
sleep [label="Sleeping"];
stop [label="Stop", style="bold"];
start -> suspend [label="\n chThdCreateI()", constraint=false, dir=back];
start -> run [label="chThdCreate()"];
start -> ready [label="chThdCreate()"];
run -> ready [label="Reschedule", dir="both"];
suspend -> run [label="chThdResume()"];
suspend -> ready [label="chThdResume()"];
run -> sleep [label="chSchGoSleepS()"];
sleep -> run [label="chSchWakepuS()"];
sleep -> ready [label="chSchWakepuS()"];
run -> stop [label="chThdExit()"];
}
* @enddot
* @endif
*
* @section priority Priority Levels
* Priorities in ChibiOS/RT are a contiguous numerical range but the initial
* and final values are not enforced.<br>
* The following table describes the various priority boundaries (from lowest
* to highest):
* - @p IDLEPRIO, this is the lowest priority level and is reserved for the
* idle thread, no other threads should share this priority level. This is
* the lowest numerical value of the priorities space.
* - @p LOWPRIO, the lowest priority level that can be assigned to an user
* thread.
* - @p NORMALPRIO, this is the central priority level for user threads. It is
* advisable to assign priorities to threads as values relative to
* @p NORMALPRIO, as example NORMALPRIO-1 or NORMALPRIO+4, this ensures the
* portability of code should the numerical range change in future
* implementations.
* - @p HIGHPRIO, the highest priority level that can be assigned to an user
* thread.
* - @p ABSPRO, absolute maximum software priority level, it can be higher than
* @p HIGHPRIO but the numerical values above @p HIGHPRIO up to @p ABSPRIO
* (inclusive) are reserved. This is the highest numerical value of the
* priorities space.
* .
* @section warea Thread Working Area
* Each thread has its own stack, a Thread structure and some preemption
* areas. All the structures are allocated into a "Thread Working Area",
* a thread private heap, usually statically declared in your code.
* Threads do not use any memory outside the allocated working area
* except when accessing static shared data.<br><br>
* @if LATEX_PDF
* @image latex workspace.eps
* @else
* @image html workspace.png
* @endif
* <br>
* Note that the preemption area is only present when the thread is not
* running (switched out), the context switching is done by pushing the
* registers on the stack of the switched-out thread and popping the registers
* of the switched-in thread from its stack.
* The preemption area can be divided in up to three structures:
* - External Context.
* - Interrupt Stack.
* - Internal Context.
* .
* See the port documentation for details, the area may change on
* the various ports and some structures may not be present (or be zero-sized).
*/

View File

@ -1,63 +0,0 @@
/*
ChibiOS - Copyright (C) 2006..2015 Giovanni Di Sirio.
This file is part of ChibiOS.
ChibiOS is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 3 of the License, or
(at your option) any later version.
ChibiOS is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
/**
* @mainpage Introduction
* @author Giovanni Di Sirio (gdisirio@users.sourceforge.net).
*
* <h2>Chibi ?</h2>
* I didn't want a serious name for this project. It is the Japanese word for
* small as in small child. So ChibiOS/RT
* @htmlonly (<span class="t_nihongo_kanji" xml:lang="ja" lang="ja">&#12385;&#12403;</span>OS/RT) @endhtmlonly
* means small Real Time Operating System.
* Source <a href="http://en.wikipedia.org/wiki/Chibi" target="_blank">Wikipedia</a>.
*
* <h2>Features</h2>
* - Free software, GPL3 licensed. Stable releases include a exception clause
* to the GPL.
* - Designed for realtime applications.
* - Easily portable.
* - Preemptive scheduling.
* - 128 priority levels. Multiple threads at the same priority level allowed.
* - Round robin scheduling for threads at the same priority level.
* - Offers threads, virtual timers, semaphores, mutexes, condvars,
* event flags, messages, mailboxes, I/O queues.
* - No static setup at compile time, there is no need to configure a maximum
* number of all the above objects.
* - PC simulator target included, the development can be done on a PC
* under Linux or Windows.<br>
* Timers, I/O channels and other HW resources are simulated in a guest OS
* process and the application code does not need to be aware of it.
* - No *need* for a memory allocator, all the kernel structures are static
* and declaratively allocated.
* - Optional, thread safe, Heap Allocator subsystem.
* - Optional, thread safe, Memory Pools Allocator subsystem.
* - Blocking and non blocking I/O channels with timeout and events generation
* capability.
* - Minimal system requirements: about 6KiB ROM with all options enabled and
* speed optimizations on. The size can shrink under 2KiB by disabling the
* the unused subsystems and optimizing for size.
* - Almost totally written in C with little ASM code required for ports.
* - Compatible with ChibiOS/HAL.
* .
* <h2>Related pages</h2>
* - @subpage concepts
* - @subpage testsuite
* .
*/

View File

@ -1,115 +0,0 @@
/*
ChibiOS - Copyright (C) 2006..2015 Giovanni Di Sirio
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
*/
/**
* @file osal.c
* @brief OSAL module code.
*
* @addtogroup OSAL
* @{
*/
#include "osal.h"
/*===========================================================================*/
/* Module local definitions. */
/*===========================================================================*/
/*===========================================================================*/
/* Module exported variables. */
/*===========================================================================*/
/*===========================================================================*/
/* Module local types. */
/*===========================================================================*/
/*===========================================================================*/
/* Module local variables. */
/*===========================================================================*/
/*===========================================================================*/
/* Module local functions. */
/*===========================================================================*/
/*===========================================================================*/
/* Module exported functions. */
/*===========================================================================*/
/**
* @brief Dequeues and wakes up one thread from the queue, if any.
*
* @param[in] tqp pointer to the threads queue object
* @param[in] msg the message code
*
* @iclass
*/
void osalThreadDequeueNextI(threads_queue_t *tqp, msg_t msg) {
semaphore_t *sp = &tqp->sem;
if (chSemGetCounterI(&tqp->sem) < (cnt_t)0) {
thread_t *tp = nil.threads;
while (true) {
/* Is this thread waiting on this semaphore?*/
if (tp->u1.semp == sp) {
sp->cnt++;
chDbgAssert(NIL_THD_IS_WTSEM(tp), "not waiting");
(void) chSchReadyI(tp, msg);
return;
}
tp++;
chDbgAssert(tp < &nil.threads[NIL_CFG_NUM_THREADS],
"pointer out of range");
}
}
}
/**
* @brief Dequeues and wakes up all threads from the queue.
*
* @param[in] tqp pointer to the threads queue object
* @param[in] msg the message code
*
* @iclass
*/
void osalThreadDequeueAllI(threads_queue_t *tqp, msg_t msg) {
semaphore_t *sp = &tqp->sem;
thread_t *tp;
cnt_t cnt;
cnt = sp->cnt;
sp->cnt = (cnt_t)0;
tp = nil.threads;
while (cnt < (cnt_t)0) {
chDbgAssert(tp < &nil.threads[NIL_CFG_NUM_THREADS],
"pointer out of range");
/* Is this thread waiting on this semaphore?*/
if (tp->u1.semp == sp) {
chDbgAssert(NIL_THD_IS_WTSEM(tp), "not waiting");
cnt++;
(void) chSchReadyI(tp, msg);
}
tp++;
}
}
/** @} */

View File

@ -1,920 +0,0 @@
/*
ChibiOS - Copyright (C) 2006..2015 Giovanni Di Sirio
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
*/
/**
* @file osal.h
* @brief OSAL module header.
*
* @addtogroup OSAL
* @{
*/
#ifndef _OSAL_H_
#define _OSAL_H_
#include <stddef.h>
#include <stdint.h>
#include <stdbool.h>
#include "nil.h"
#if defined(__SPC5_HAL__)
#include "platform.h"
#endif
/*===========================================================================*/
/* Module constants. */
/*===========================================================================*/
/**
* @name Common constants
* @{
*/
#if !defined(FALSE) || defined(__DOXYGEN__)
#define FALSE 0
#endif
#if !defined(TRUE) || defined(__DOXYGEN__)
#define TRUE (!FALSE)
#endif
#define OSAL_SUCCESS FALSE
#define OSAL_FAILED TRUE
/** @} */
#if 0
/**
* @name Messages
* @{
*/
#define MSG_OK RDY_OK
#define MSG_RESET RDY_RESET
#define MSG_TIMEOUT RDY_TIMEOUT
/** @} */
#endif
#if 0
/**
* @name Special time constants
* @{
*/
#define TIME_IMMEDIATE ((systime_t)0)
#define TIME_INFINITE ((systime_t)-1)
/** @} */
#endif
/**
* @name Systick modes.
* @{
*/
#define OSAL_ST_MODE_NONE 0
#define OSAL_ST_MODE_PERIODIC 1
#define OSAL_ST_MODE_FREERUNNING 2
/** @} */
/**
* @name Systick parameters.
* @{
*/
/**
* @brief Size in bits of the @p systick_t type.
*/
#define OSAL_ST_RESOLUTION NIL_CFG_ST_RESOLUTION
/**
* @brief Required systick frequency or resolution.
*/
#define OSAL_ST_FREQUENCY NIL_CFG_ST_FREQUENCY
/**
* @brief Systick mode required by the underlying OS.
*/
#if (NIL_CFG_ST_TIMEDELTA == 0) || defined(__DOXYGEN__)
#define OSAL_ST_MODE OSAL_ST_MODE_PERIODIC
#else
#define OSAL_ST_MODE OSAL_ST_MODE_FREERUNNING
#endif
/** @} */
/*===========================================================================*/
/* Module pre-compile time settings. */
/*===========================================================================*/
/*===========================================================================*/
/* Derived constants and error checks. */
/*===========================================================================*/
#if NIL_CFG_USE_EVENTS == FALSE
#error "OSAL requires NIL_CFG_USE_EVENTS=TRUE"
#endif
#if !(OSAL_ST_MODE == OSAL_ST_MODE_NONE) && \
!(OSAL_ST_MODE == OSAL_ST_MODE_PERIODIC) && \
!(OSAL_ST_MODE == OSAL_ST_MODE_FREERUNNING)
#error "invalid OSAL_ST_MODE setting in osal.h"
#endif
#if (OSAL_ST_RESOLUTION != 16) && (OSAL_ST_RESOLUTION != 32)
#error "invalid OSAL_ST_RESOLUTION, must be 16 or 32"
#endif
/*===========================================================================*/
/* Module data structures and types. */
/*===========================================================================*/
#if 0
/**
* @brief Type of a system status word.
*/
typedef uint32_t syssts_t;
#endif
#if 0
/**
* @brief Type of a message.
*/
typedef int32_t msg_t;
#endif
#if 0
/**
* @brief Type of system time counter.
*/
typedef uint32_t systime_t;
#endif
#if 0
/**
* @brief Type of realtime counter.
*/
typedef uint32_t rtcnt_t;
#endif
#if 0
/**
* @brief Type of a thread reference.
*/
typedef thread_t * thread_reference_t;
#endif
/**
* @brief Type of an event flags object.
* @note The content of this structure is not part of the API and should
* not be relied upon. Implementers may define this structure in
* an entirely different way.
* @note Retrieval and clearing of the flags are not defined in this
* API and are implementation-dependent.
*/
typedef struct event_source event_source_t;
/**
* @brief Type of an event source callback.
* @note This type is not part of the OSAL API and is provided
* exclusively as an example and for convenience.
*/
typedef void (*eventcallback_t)(event_source_t *p);
/**
* @brief Type of an event flags mask.
*/
typedef uint32_t eventflags_t;
/**
* @brief Events source object.
* @note The content of this structure is not part of the API and should
* not be relied upon. Implementers may define this structure in
* an entirely different way.
* @note Retrieval and clearing of the flags are not defined in this
* API and are implementation-dependent.
*/
struct event_source {
volatile eventflags_t flags; /**< @brief Stored event flags. */
eventcallback_t cb; /**< @brief Event source callback. */
void *param; /**< @brief User defined field. */
};
/**
* @brief Type of a mutex.
* @note If the OS does not support mutexes or there is no OS then them
* mechanism can be simulated.
*/
typedef semaphore_t mutex_t;
/**
* @brief Type of a thread queue.
* @details A thread queue is a queue of sleeping threads, queued threads
* can be dequeued one at time or all together.
* @note In this implementation it is implemented as a single reference
* because there are no real threads.
*/
typedef struct {
semaphore_t sem;
} threads_queue_t;
/*===========================================================================*/
/* Module macros. */
/*===========================================================================*/
/**
* @name Debug related macros
* @{
*/
/**
* @brief Condition assertion.
* @details If the condition check fails then the OSAL panics with a
* message and halts.
* @note The condition is tested only if the @p OSAL_ENABLE_ASSERTIONS
* switch is enabled.
* @note The remark string is not currently used except for putting a
* comment in the code about the assertion.
*
* @param[in] c the condition to be verified to be true
* @param[in] remark a remark string
*
* @api
*/
#define osalDbgAssert(c, remark) chDbgAssert(c, remark)
/**
* @brief Function parameters check.
* @details If the condition check fails then the OSAL panics and halts.
* @note The condition is tested only if the @p OSAL_ENABLE_CHECKS switch
* is enabled.
*
* @param[in] c the condition to be verified to be true
*
* @api
*/
#define osalDbgCheck(c) chDbgAssert(c, "parameter check")
/**
* @brief I-Class state check.
* @note Not implemented in this simplified OSAL.
*/
#define osalDbgCheckClassI() /*chDbgCheckClassI()*/
/**
* @brief S-Class state check.
* @note Not implemented in this simplified OSAL.
*/
#define osalDbgCheckClassS() /*chDbgCheckClassS()*/
/** @} */
/**
* @name IRQ service routines wrappers
* @{
*/
/**
* @brief Priority level verification macro.
*/
#define OSAL_IRQ_IS_VALID_PRIORITY(n) CH_IRQ_IS_VALID_KERNEL_PRIORITY(n)
/**
* @brief IRQ prologue code.
* @details This macro must be inserted at the start of all IRQ handlers.
*/
#define OSAL_IRQ_PROLOGUE() CH_IRQ_PROLOGUE()
/**
* @brief IRQ epilogue code.
* @details This macro must be inserted at the end of all IRQ handlers.
*/
#define OSAL_IRQ_EPILOGUE() CH_IRQ_EPILOGUE()
/**
* @brief IRQ handler function declaration.
* @details This macro hides the details of an ISR function declaration.
*
* @param[in] id a vector name as defined in @p vectors.s
*/
#define OSAL_IRQ_HANDLER(id) CH_IRQ_HANDLER(id)
/** @} */
/**
* @name Time conversion utilities
* @{
*/
/**
* @brief Seconds to system ticks.
* @details Converts from seconds to system ticks number.
* @note The result is rounded upward to the next tick boundary.
*
* @param[in] sec number of seconds
* @return The number of ticks.
*
* @api
*/
#define OSAL_S2ST(sec) S2ST(sec)
/**
* @brief Milliseconds to system ticks.
* @details Converts from milliseconds to system ticks number.
* @note The result is rounded upward to the next tick boundary.
*
* @param[in] msec number of milliseconds
* @return The number of ticks.
*
* @api
*/
#define OSAL_MS2ST(msec) MS2ST(msec)
/**
* @brief Microseconds to system ticks.
* @details Converts from microseconds to system ticks number.
* @note The result is rounded upward to the next tick boundary.
*
* @param[in] usec number of microseconds
* @return The number of ticks.
*
* @api
*/
#define OSAL_US2ST(usec) US2ST(usec)
/** @} */
/**
* @name Time conversion utilities for the realtime counter
* @{
*/
/**
* @brief Seconds to realtime counter.
* @details Converts from seconds to realtime counter cycles.
* @note The macro assumes that @p freq >= @p 1.
*
* @param[in] freq clock frequency, in Hz, of the realtime counter
* @param[in] sec number of seconds
* @return The number of cycles.
*
* @api
*/
#define OSAL_S2RTC(freq, sec) S2RTC(freq, sec)
/**
* @brief Milliseconds to realtime counter.
* @details Converts from milliseconds to realtime counter cycles.
* @note The result is rounded upward to the next millisecond boundary.
* @note The macro assumes that @p freq >= @p 1000.
*
* @param[in] freq clock frequency, in Hz, of the realtime counter
* @param[in] msec number of milliseconds
* @return The number of cycles.
*
* @api
*/
#define OSAL_MS2RTC(freq, msec) MS2RTC(freq, msec)
/**
* @brief Microseconds to realtime counter.
* @details Converts from microseconds to realtime counter cycles.
* @note The result is rounded upward to the next microsecond boundary.
* @note The macro assumes that @p freq >= @p 1000000.
*
* @param[in] freq clock frequency, in Hz, of the realtime counter
* @param[in] usec number of microseconds
* @return The number of cycles.
*
* @api
*/
#define OSAL_US2RTC(freq, usec) US2RTC(freq, usec)
/** @} */
/**
* @name Sleep macros using absolute time
* @{
*/
/**
* @brief Delays the invoking thread for the specified number of seconds.
* @note The specified time is rounded up to a value allowed by the real
* system tick clock.
* @note The maximum specifiable value is implementation dependent.
*
* @param[in] sec time in seconds, must be different from zero
*
* @api
*/
#define osalThreadSleepSeconds(sec) osalThreadSleep(OSAL_S2ST(sec))
/**
* @brief Delays the invoking thread for the specified number of
* milliseconds.
* @note The specified time is rounded up to a value allowed by the real
* system tick clock.
* @note The maximum specifiable value is implementation dependent.
*
* @param[in] msec time in milliseconds, must be different from zero
*
* @api
*/
#define osalThreadSleepMilliseconds(msec) osalThreadSleep(OSAL_MS2ST(msec))
/**
* @brief Delays the invoking thread for the specified number of
* microseconds.
* @note The specified time is rounded up to a value allowed by the real
* system tick clock.
* @note The maximum specifiable value is implementation dependent.
*
* @param[in] usec time in microseconds, must be different from zero
*
* @api
*/
#define osalThreadSleepMicroseconds(usec) osalThreadSleep(OSAL_US2ST(usec))
/** @} */
/*===========================================================================*/
/* External declarations. */
/*===========================================================================*/
#ifdef __cplusplus
extern "C" {
#endif
void osalThreadDequeueNextI(threads_queue_t *tqp, msg_t msg);
void osalThreadDequeueAllI(threads_queue_t *tqp, msg_t msg);
#ifdef __cplusplus
}
#endif
/*===========================================================================*/
/* Module inline functions. */
/*===========================================================================*/
/**
* @brief OSAL module initialization.
*
* @api
*/
static inline void osalInit(void) {
}
/**
* @brief System halt with error message.
*
* @param[in] reason the halt message pointer
*
* @api
*/
static inline void osalSysHalt(const char *reason) {
chSysHalt(reason);
}
/**
* @brief Disables interrupts globally.
*
* @special
*/
static inline void osalSysDisable(void) {
chSysDisable();
}
/**
* @brief Enables interrupts globally.
*
* @special
*/
static inline void osalSysEnable(void) {
chSysEnable();
}
/**
* @brief Enters a critical zone from thread context.
* @note This function cannot be used for reentrant critical zones.
*
* @special
*/
static inline void osalSysLock(void) {
chSysLock();
}
/**
* @brief Leaves a critical zone from thread context.
* @note This function cannot be used for reentrant critical zones.
*
* @special
*/
static inline void osalSysUnlock(void) {
chSysUnlock();
}
/**
* @brief Enters a critical zone from ISR context.
* @note This function cannot be used for reentrant critical zones.
*
* @special
*/
static inline void osalSysLockFromISR(void) {
chSysLockFromISR();
}
/**
* @brief Leaves a critical zone from ISR context.
* @note This function cannot be used for reentrant critical zones.
*
* @special
*/
static inline void osalSysUnlockFromISR(void) {
chSysUnlockFromISR();
}
/**
* @brief Returns the execution status and enters a critical zone.
* @details This functions enters into a critical zone and can be called
* from any context. Because its flexibility it is less efficient
* than @p chSysLock() which is preferable when the calling context
* is known.
* @post The system is in a critical zone.
*
* @return The previous system status, the encoding of this
* status word is architecture-dependent and opaque.
*
* @xclass
*/
static inline syssts_t osalSysGetStatusAndLockX(void) {
return chSysGetStatusAndLockX();
}
/**
* @brief Restores the specified execution status and leaves a critical zone.
* @note A call to @p chSchRescheduleS() is automatically performed
* if exiting the critical zone and if not in ISR context.
*
* @param[in] sts the system status to be restored.
*
* @xclass
*/
static inline void osalSysRestoreStatusX(syssts_t sts) {
chSysRestoreStatusX(sts);
}
/**
* @brief Polled delay.
* @note The real delay is always few cycles in excess of the specified
* value.
*
* @param[in] cycles number of cycles
*
* @xclass
*/
#if (PORT_SUPPORTS_RT == TRUE) || defined(__DOXYGEN__)
static inline void osalSysPolledDelayX(rtcnt_t cycles) {
chSysPolledDelayX(cycles);
}
#endif
/**
* @brief Systick callback for the underlying OS.
* @note This callback is only defined if the OSAL requires such a
* service from the HAL.
*/
#if (OSAL_ST_MODE != OSAL_ST_MODE_NONE) || defined(__DOXYGEN__)
static inline void osalOsTimerHandlerI(void) {
chSysTimerHandlerI();
}
#endif
/**
* @brief Checks if a reschedule is required and performs it.
* @note I-Class functions invoked from thread context must not reschedule
* by themselves, an explicit reschedule using this function is
* required in this scenario.
* @note Not implemented in this simplified OSAL.
*
* @sclass
*/
static inline void osalOsRescheduleS(void) {
chSchRescheduleS();
}
/**
* @brief Current system time.
* @details Returns the number of system ticks since the @p osalInit()
* invocation.
* @note The counter can reach its maximum and then restart from zero.
* @note This function can be called from any context but its atomicity
* is not guaranteed on architectures whose word size is less than
* @p systime_t size.
*
* @return The system time in ticks.
*
* @xclass
*/
static inline systime_t osalOsGetSystemTimeX(void) {
return chVTGetSystemTimeX();
}
/**
* @brief Checks if the specified time is within the specified time window.
* @note When start==end then the function returns always true because the
* whole time range is specified.
* @note This function can be called from any context.
*
* @param[in] time the time to be verified
* @param[in] start the start of the time window (inclusive)
* @param[in] end the end of the time window (non inclusive)
* @retval true current time within the specified time window.
* @retval false current time not within the specified time window.
*
* @xclass
*/
static inline bool osalOsIsTimeWithinX(systime_t time,
systime_t start,
systime_t end) {
return chVTIsTimeWithinX(time, start, end);
}
/**
* @brief Suspends the invoking thread for the specified time.
*
* @param[in] time the delay in system ticks, the special values are
* handled as follow:
* - @a TIME_INFINITE is allowed but interpreted as a
* normal time specification.
* - @a TIME_IMMEDIATE this value is not allowed.
* .
*
* @sclass
*/
static inline void osalThreadSleepS(systime_t time) {
chThdSleepS(time);
}
/**
* @brief Suspends the invoking thread for the specified time.
*
* @param[in] time the delay in system ticks, the special values are
* handled as follow:
* - @a TIME_INFINITE is allowed but interpreted as a
* normal time specification.
* - @a TIME_IMMEDIATE this value is not allowed.
* .
*
* @api
*/
static inline void osalThreadSleep(systime_t time) {
chThdSleep(time);
}
/**
* @brief Sends the current thread sleeping and sets a reference variable.
* @note This function must reschedule, it can only be called from thread
* context.
*
* @param[in] trp a pointer to a thread reference object
* @return The wake up message.
*
* @sclass
*/
static inline msg_t osalThreadSuspendS(thread_reference_t *trp) {
return chThdSuspendTimeoutS(trp, TIME_INFINITE);
}
/**
* @brief Sends the current thread sleeping and sets a reference variable.
* @note This function must reschedule, it can only be called from thread
* context.
*
* @param[in] trp a pointer to a thread reference object
* @param[in] timeout the timeout in system ticks, the special values are
* handled as follow:
* - @a TIME_INFINITE the thread enters an infinite sleep
* state.
* - @a TIME_IMMEDIATE the thread is not enqueued and
* the function returns @p MSG_TIMEOUT as if a timeout
* occurred.
* .
* @return The wake up message.
* @retval MSG_TIMEOUT if the operation timed out.
*
* @sclass
*/
static inline msg_t osalThreadSuspendTimeoutS(thread_reference_t *trp,
systime_t timeout) {
return chThdSuspendTimeoutS(trp, timeout);
}
/**
* @brief Wakes up a thread waiting on a thread reference object.
* @note This function must not reschedule because it can be called from
* ISR context.
*
* @param[in] trp a pointer to a thread reference object
* @param[in] msg the message code
*
* @iclass
*/
static inline void osalThreadResumeI(thread_reference_t *trp, msg_t msg) {
chThdResumeI(trp, msg);
}
/**
* @brief Wakes up a thread waiting on a thread reference object.
* @note This function must reschedule, it can only be called from thread
* context.
*
* @param[in] trp a pointer to a thread reference object
* @param[in] msg the message code
*
* @iclass
*/
static inline void osalThreadResumeS(thread_reference_t *trp, msg_t msg) {
chThdResumeI(trp, msg);
chSchRescheduleS();
}
/**
* @brief Initializes a threads queue object.
*
* @param[out] tqp pointer to the threads queue object
*
* @init
*/
static inline void osalThreadQueueObjectInit(threads_queue_t *tqp) {
chSemObjectInit(&tqp->sem, (cnt_t)0);
}
/**
* @brief Enqueues the caller thread.
* @details The caller thread is enqueued and put to sleep until it is
* dequeued or the specified timeouts expires.
*
* @param[in] tqp pointer to the threads queue object
* @param[in] time the timeout in system ticks, the special values are
* handled as follow:
* - @a TIME_INFINITE the thread enters an infinite sleep
* state.
* - @a TIME_IMMEDIATE the thread is not enqueued and
* the function returns @p MSG_TIMEOUT as if a timeout
* occurred.
* .
* @return The message from @p osalQueueWakeupOneI() or
* @p osalQueueWakeupAllI() functions.
* @retval MSG_TIMEOUT if the thread has not been dequeued within the
* specified timeout or if the function has been
* invoked with @p TIME_IMMEDIATE as timeout
* specification.
*
* @sclass
*/
static inline msg_t osalThreadEnqueueTimeoutS(threads_queue_t *tqp,
systime_t time) {
return chSemWaitTimeoutS(&tqp->sem, time);
}
/**
* @brief Initializes an event flags object.
*
* @param[out] esp pointer to the event flags object
*
* @init
*/
static inline void osalEventObjectInit(event_source_t *esp) {
osalDbgCheck(esp != NULL);
esp->flags = 0;
esp->cb = NULL;
esp->param = NULL;
}
/**
* @brief Add flags to an event source object.
*
* @param[in] esp pointer to the event flags object
* @param[in] flags flags to be ORed to the flags mask
*
* @iclass
*/
static inline void osalEventBroadcastFlagsI(event_source_t *esp,
eventflags_t flags) {
osalDbgCheck(esp != NULL);
esp->flags |= flags;
if (esp->cb != NULL) {
esp->cb(esp);
}
}
/**
* @brief Add flags to an event source object.
*
* @param[in] esp pointer to the event flags object
* @param[in] flags flags to be ORed to the flags mask
*
* @iclass
*/
static inline void osalEventBroadcastFlags(event_source_t *esp,
eventflags_t flags) {
osalDbgCheck(esp != NULL);
chSysLock();
osalEventBroadcastFlagsI(esp, flags);
chSchRescheduleS();
chSysUnlock();
}
/**
* @brief Event callback setup.
* @note The callback is invoked from ISR context and can
* only invoke I-Class functions. The callback is meant
* to wakeup the task that will handle the event by
* calling @p osalEventGetAndClearFlagsI().
*
* @param[in] esp pointer to the event flags object
* @param[in] cb pointer to the callback function
* @param[in] param parameter to be passed to the callback function
*
* @api
*/
static inline void osalEventSetCallback(event_source_t *esp,
eventcallback_t cb,
void *param) {
osalDbgCheck(esp != NULL);
esp->cb = cb;
esp->param = param;
}
/**
* @brief Initializes s @p mutex_t object.
*
* @param[out] mp pointer to the @p mutex_t object
*
* @init
*/
static inline void osalMutexObjectInit(mutex_t *mp) {
chSemObjectInit((semaphore_t *)mp, (cnt_t)1);
}
/**
* @brief Locks the specified mutex.
* @post The mutex is locked and inserted in the per-thread stack of owned
* mutexes.
*
* @param[in,out] mp pointer to the @p mutex_t object
*
* @api
*/
static inline void osalMutexLock(mutex_t *mp) {
(void) chSemWait((semaphore_t *)mp);
}
/**
* @brief Unlocks the specified mutex.
* @note The HAL guarantees to release mutex in reverse lock order. The
* mutex being unlocked is guaranteed to be the last locked mutex
* by the invoking thread.
* The implementation can rely on this behavior and eventually
* ignore the @p mp parameter which is supplied in order to support
* those OSes not supporting a stack of the owned mutexes.
*
* @param[in,out] mp pointer to the @p mutex_t object
*
* @api
*/
static inline void osalMutexUnlock(mutex_t *mp) {
chSemSignal((semaphore_t *)mp);
}
#endif /* _OSAL_H_ */
/** @} */

View File

@ -1,5 +0,0 @@
# OSAL files.
OSALSRC += ${CHIBIOS}/os/hal/osal/nil/osal.c
# Required include directories
OSALINC += ${CHIBIOS}/os/hal/osal/nil

View File

@ -1,50 +0,0 @@
/*
ChibiOS - Copyright (C) 2006..2015 Giovanni Di Sirio.
This file is part of ChibiOS.
ChibiOS is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 3 of the License, or
(at your option) any later version.
ChibiOS is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
/**
* @defgroup NIL NIL Kernel
* @details The kernel is the portable part of ChibiOS/NIL, this section
* documents the various kernel subsystems.
*/
/**
* @defgroup NIL_CONFIG Configuration
* @ingroup NIL
*/
/**
* @defgroup NIL_TYPES Kernel Types
* @ingroup NIL
*/
/**
* @defgroup NIL_KERNEL API
* @ingroup NIL
*/
/**
* @defgroup NIL_CORE Port Layer
* @ingroup NIL
*/
/**
* @defgroup NIL_TIMER Timer Interface
* @ingroup NIL
*/

File diff suppressed because it is too large Load Diff

View File

@ -1,5 +0,0 @@
# List of all the ChibiOS/NIL kernel files.
KERNSRC = ${CHIBIOS}/os/nil/src/nil.c
# Required include directories
KERNINC = ${CHIBIOS}/os/nil/include

View File

@ -1,8 +0,0 @@
# List of the ChibiOS/NIL ARMv6M generic port files.
PORTSRC = $(CHIBIOS)/os/nil/ports/ARMCMx/nilcore.c \
$(CHIBIOS)/os/nil/ports/ARMCMx/nilcore_v6m.c
PORTASM = $(CHIBIOS)/os/nil/ports/ARMCMx/compilers/GCC/nilcoreasm_v6m.s
PORTINC = $(CHIBIOS)/os/nil/ports/ARMCMx \
$(CHIBIOS)/os/nil/ports/ARMCMx/compilers/GCC

View File

@ -1,8 +0,0 @@
# List of the ChibiOS/NIL ARMv7M generic port files.
PORTSRC = $(CHIBIOS)/os/nil/ports/ARMCMx/nilcore.c \
$(CHIBIOS)/os/nil/ports/ARMCMx/nilcore_v7m.c
PORTASM = $(CHIBIOS)/os/nil/ports/ARMCMx/compilers/GCC/nilcoreasm_v7m.s
PORTINC = $(CHIBIOS)/os/nil/ports/ARMCMx \
$(CHIBIOS)/os/nil/ports/ARMCMx/compilers/GCC

View File

@ -1,124 +0,0 @@
/*
ChibiOS - Copyright (C) 2006..2015 Giovanni Di Sirio.
This file is part of ChibiOS.
ChibiOS is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 3 of the License, or
(at your option) any later version.
ChibiOS is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
/**
* @file ARMCMx/compilers/GCC/nilcoreasm_v6m.s
* @brief ARMv6-M architecture port low level code.
*
* @addtogroup ARMCMx_GCC_CORE
* @{
*/
#if !defined(FALSE) || defined(__DOXYGEN__)
#define FALSE 0
#endif
#if !defined(TRUE) || defined(__DOXYGEN__)
#define TRUE 1
#endif
#define _FROM_ASM_
#include "nilconf.h"
#include "nilcore.h"
#if !defined(__DOXYGEN__)
.set CONTEXT_OFFSET, 0
.set SCB_ICSR, 0xE000ED04
.set ICSR_PENDSVSET, 0x10000000
.set ICSR_NMIPENDSET, 0x80000000
.cpu cortex-m0
.fpu softvfp
.thumb
.text
/*--------------------------------------------------------------------------*
* Performs a context switch between two threads.
*--------------------------------------------------------------------------*/
.thumb_func
.globl _port_switch
_port_switch:
push {r4, r5, r6, r7, lr}
mov r4, r8
mov r5, r9
mov r6, r10
mov r7, r11
push {r4, r5, r6, r7}
mov r3, sp
str r3, [r1, #CONTEXT_OFFSET]
ldr r3, [r0, #CONTEXT_OFFSET]
mov sp, r3
pop {r4, r5, r6, r7}
mov r8, r4
mov r9, r5
mov r10, r6
mov r11, r7
pop {r4, r5, r6, r7, pc}
/*--------------------------------------------------------------------------*
* Start a thread by invoking its work function.
*
* Threads execution starts here, the code leaves the system critical zone
* and then jumps into the thread function passed in register R4. The
* register R5 contains the thread parameter. The function chThdExit() is
* called on thread function return.
*--------------------------------------------------------------------------*/
.thumb_func
.globl _port_thread_start
_port_thread_start:
cpsie i
mov r0, r5
blx r4
mov r3, #0
bl chSysHalt
/*--------------------------------------------------------------------------*
* Post-IRQ switch code.
*
* Exception handlers return here for context switching.
*--------------------------------------------------------------------------*/
.thumb_func
.globl _port_switch_from_isr
_port_switch_from_isr:
bl chSchRescheduleS
.globl _port_exit_from_isr
_port_exit_from_isr:
ldr r2, .L2
ldr r3, .L3
str r3, [r2, #0]
#if CORTEX_ALTERNATE_SWITCH
cpsie i
#endif
.L1: b .L1
.align 2
.L2: .word SCB_ICSR
#if CORTEX_ALTERNATE_SWITCH
.L3: .word ICSR_PENDSVSET
#else
.L3: .word ICSR_NMIPENDSET
#endif
#endif /* !defined(__DOXYGEN__) */
/** @} */

View File

@ -1,130 +0,0 @@
/*
ChibiOS - Copyright (C) 2006..2015 Giovanni Di Sirio.
This file is part of ChibiOS.
ChibiOS is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 3 of the License, or
(at your option) any later version.
ChibiOS is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
/**
* @file ARMCMx/compilers/GCC/nilcoreasm_v7m.s
* @brief ARMv7-M architecture port low level code.
*
* @addtogroup ARMCMx_GCC_CORE
* @{
*/
#if !defined(FALSE) || defined(__DOXYGEN__)
#define FALSE 0
#endif
#if !defined(TRUE) || defined(__DOXYGEN__)
#define TRUE 1
#endif
#define _FROM_ASM_
#include "nilconf.h"
#include "nilcore.h"
#if !defined(__DOXYGEN__)
.set CONTEXT_OFFSET, 0
.set SCB_ICSR, 0xE000ED04
.set ICSR_PENDSVSET, 0x10000000
.syntax unified
.cpu cortex-m4
#if CORTEX_USE_FPU
.fpu fpv4-sp-d16
#else
.fpu softvfp
#endif
.thumb
.text
/*--------------------------------------------------------------------------*
* Performs a context switch between two threads.
*--------------------------------------------------------------------------*/
.thumb_func
.globl _port_switch
_port_switch:
push {r4, r5, r6, r7, r8, r9, r10, r11, lr}
#if CORTEX_USE_FPU
vpush {s16-s31}
#endif
str sp, [r1, #CONTEXT_OFFSET]
#if (CORTEX_SIMPLIFIED_PRIORITY == FALSE) && \
((CORTEX_MODEL == 3) || (CORTEX_MODEL == 4))
/* Workaround for ARM errata 752419, only applied if
condition exists for it to be triggered.*/
ldr r3, [r0, #CONTEXT_OFFSET]
mov sp, r3
#else
ldr sp, [r0, #CONTEXT_OFFSET]
#endif
#if CORTEX_USE_FPU
vpop {s16-s31}
#endif
pop {r4, r5, r6, r7, r8, r9, r10, r11, pc}
/*--------------------------------------------------------------------------*
* Start a thread by invoking its work function.
*
* Threads execution starts here, the code leaves the system critical zone
* and then jumps into the thread function passed in register R4. The
* register R5 contains the thread parameter. The function chThdExit() is
* called on thread function return.
*--------------------------------------------------------------------------*/
.thumb_func
.globl _port_thread_start
_port_thread_start:
#if !CORTEX_SIMPLIFIED_PRIORITY
movs r3, #0
msr BASEPRI, r3
#else /* CORTEX_SIMPLIFIED_PRIORITY */
cpsie i
#endif /* CORTEX_SIMPLIFIED_PRIORITY */
mov r0, r5
blx r4
mov r3, #0
bl chSysHalt
/*--------------------------------------------------------------------------*
* Post-IRQ switch code.
*
* Exception handlers return here for context switching.
*--------------------------------------------------------------------------*/
.thumb_func
.globl _port_switch_from_isr
_port_switch_from_isr:
bl chSchRescheduleS
.globl _port_exit_from_isr
_port_exit_from_isr:
#if CORTEX_SIMPLIFIED_PRIORITY
movw r3, #:lower16:SCB_ICSR
movt r3, #:upper16:SCB_ICSR
mov r2, ICSR_PENDSVSET
str r2, [r3, #0]
cpsie i
#else /* !CORTEX_SIMPLIFIED_PRIORITY */
svc #0
#endif /* !CORTEX_SIMPLIFIED_PRIORITY */
.L1: b .L1
#endif /* !defined(__DOXYGEN__) */
/** @} */

View File

@ -1,96 +0,0 @@
/*
ChibiOS - Copyright (C) 2006..2015 Giovanni Di Sirio.
This file is part of ChibiOS.
ChibiOS is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 3 of the License, or
(at your option) any later version.
ChibiOS is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
/**
* @file ARMCMx/compilers/GCC/niltypes.h
* @brief ARM Cortex-Mx port system types.
*
* @addtogroup ARMCMx_GCC_CORE
* @{
*/
#ifndef _NILTYPES_H_
#define _NILTYPES_H_
#include <stddef.h>
#include <stdint.h>
#include <stdbool.h>
/**
* @name Common constants
*/
/**
* @brief Generic 'false' boolean constant.
*/
#if !defined(FALSE) || defined(__DOXYGEN__)
#define FALSE 0
#endif
/**
* @brief Generic 'true' boolean constant.
*/
#if !defined(TRUE) || defined(__DOXYGEN__)
#define TRUE 1
#endif
/** @} */
typedef uint32_t syssts_t; /**< System status word. */
typedef uint32_t rtcnt_t; /**< Realtime counter. */
typedef uint8_t tstate_t; /**< Thread state. */
typedef int32_t msg_t; /**< Inter-thread message. */
typedef uint32_t eventmask_t; /**< Mask of event identifiers. */
typedef int32_t cnt_t; /**< Generic signed counter. */
typedef uint32_t ucnt_t; /**< Generic unsigned counter. */
/**
* @brief Type of system time.
*/
#if (NIL_CFG_ST_RESOLUTION == 32) || defined(__DOXYGEN__)
typedef uint32_t systime_t;
#else
typedef uint16_t systime_t;
#endif
/**
* @brief ROM constant modifier.
* @note It is set to use the "const" keyword in this port.
*/
#define ROMCONST const
/**
* @brief Makes functions not inlineable.
* @note If the compiler does not support such attribute then the
* realtime counter precision could be degraded.
*/
#define NOINLINE __attribute__((noinline))
/**
* @brief Optimized thread function declaration macro.
*/
#define PORT_THD_FUNCTION(tname, arg) \
__attribute__((noreturn)) void tname(void *arg)
/**
* @brief Packed variable specifier.
*/
#define PACKED_VAR __attribute__((packed))
#endif /* _NILTYPES_H_ */
/** @} */

View File

@ -1,54 +0,0 @@
/*
ChibiOS - Copyright (C) 2006..2015 Giovanni Di Sirio.
This file is part of ChibiOS.
ChibiOS is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 3 of the License, or
(at your option) any later version.
ChibiOS is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
/**
* @file ARMCMx/nilcore.c
* @brief ARM Cortex-Mx port code.
*
* @addtogroup ARMCMx_CORE
* @{
*/
#include "nil.h"
/*===========================================================================*/
/* Module local definitions. */
/*===========================================================================*/
/*===========================================================================*/
/* Module exported variables. */
/*===========================================================================*/
/*===========================================================================*/
/* Module local types. */
/*===========================================================================*/
/*===========================================================================*/
/* Module local variables. */
/*===========================================================================*/
/*===========================================================================*/
/* Module local functions. */
/*===========================================================================*/
/*===========================================================================*/
/* Module exported functions. */
/*===========================================================================*/
/** @} */

View File

@ -1,204 +0,0 @@
/*
ChibiOS - Copyright (C) 2006..2015 Giovanni Di Sirio.
This file is part of ChibiOS.
ChibiOS is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 3 of the License, or
(at your option) any later version.
ChibiOS is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
/**
* @file ARMCMx/nilcore.h
* @brief ARM Cortex-Mx port macros and structures.
*
* @addtogroup ARMCMx_CORE
* @{
*/
#ifndef _NILCORE_H_
#define _NILCORE_H_
/*===========================================================================*/
/* Module constants. */
/*===========================================================================*/
/**
* @name Architecture and Compiler
* @{
*/
/**
* @brief Macro defining a generic ARM architecture.
*/
#define PORT_ARCHITECTURE_ARM
/* The following code is not processed when the file is included from an
asm module because those intrinsic macros are not necessarily defined
by the assembler too.*/
#if !defined(_FROM_ASM_)
/**
* @brief Compiler name and version.
*/
#if defined(__GNUC__) || defined(__DOXYGEN__)
#define PORT_COMPILER_NAME "GCC " __VERSION__
#elif defined(__ICCARM__)
#define PORT_COMPILER_NAME "IAR"
#elif defined(__CC_ARM)
#define PORT_COMPILER_NAME "RVCT"
#else
#error "unsupported compiler"
#endif
#endif /* !defined(_FROM_ASM_) */
/** @} */
/* Inclusion of the Cortex-Mx implementation specific parameters.*/
#include "cmparams.h"
/*===========================================================================*/
/* Module pre-compile time settings. */
/*===========================================================================*/
/**
* @brief Enables an alternative timer implementation.
* @details Usually the port uses a timer interface defined in the file
* @p nilcore_timer.h, if this option is enabled then the file
* @p nilcore_timer_alt.h is included instead.
*/
#if !defined(PORT_USE_ALT_TIMER)
#define PORT_USE_ALT_TIMER FALSE
#endif
/*===========================================================================*/
/* Derived constants and error checks. */
/*===========================================================================*/
/*===========================================================================*/
/* Module data structures and types. */
/*===========================================================================*/
/* The following code is not processed when the file is included from an
asm module.*/
#if !defined(_FROM_ASM_)
/**
* @brief Type of a generic ARM register.
*/
typedef void *regarm_t;
/**
* @brief Type of stack and memory alignment enforcement.
* @note In this architecture the stack alignment is enforced to 64 bits,
* 32 bits alignment is supported by hardware but deprecated by ARM,
* the implementation choice is to not offer the option.
*/
typedef uint64_t stkalign_t;
/* The following declarations are there just for Doxygen documentation, the
real declarations are inside the sub-headers being specific for the
sub-architectures.*/
#if defined(__DOXYGEN__)
/**
* @brief Interrupt saved context.
* @details This structure represents the stack frame saved during a
* preemption-capable interrupt handler.
* @note It is implemented to match the Cortex-Mx exception context.
*/
struct port_extctx {};
/**
* @brief System saved context.
* @details This structure represents the inner stack frame during a context
* switch.
*/
struct port_intctx {};
#endif /* defined(__DOXYGEN__) */
#endif /* !defined(_FROM_ASM_) */
/*===========================================================================*/
/* Module macros. */
/*===========================================================================*/
/**
* @brief Total priority levels.
*/
#define CORTEX_PRIORITY_LEVELS (1U << CORTEX_PRIORITY_BITS)
/**
* @brief Minimum priority level.
* @details This minimum priority level is calculated from the number of
* priority bits supported by the specific Cortex-Mx implementation.
*/
#define CORTEX_MINIMUM_PRIORITY (CORTEX_PRIORITY_LEVELS - 1)
/**
* @brief Maximum priority level.
* @details The maximum allowed priority level is always zero.
*/
#define CORTEX_MAXIMUM_PRIORITY 0U
/**
* @brief Priority level to priority mask conversion macro.
*/
#define CORTEX_PRIO_MASK(n) \
((n) << (8U - (unsigned)CORTEX_PRIORITY_BITS))
/**
* @brief Priority level verification macro.
*/
#define PORT_IRQ_IS_VALID_PRIORITY(n) \
(((n) >= 0U) && ((n) < CORTEX_PRIORITY_LEVELS))
/**
* @brief Priority level verification macro.
*/
#define PORT_IRQ_IS_VALID_KERNEL_PRIORITY(n) \
(((n) >= CORTEX_MAX_KERNEL_PRIORITY) && ((n) < CORTEX_PRIORITY_LEVELS))
/*===========================================================================*/
/* External declarations. */
/*===========================================================================*/
/*===========================================================================*/
/* Module inline functions. */
/*===========================================================================*/
/* Includes the sub-architecture-specific part.*/
#if (CORTEX_MODEL == 0) || (CORTEX_MODEL == 1)
#include "nilcore_v6m.h"
#elif (CORTEX_MODEL == 3) || (CORTEX_MODEL == 4) || (CORTEX_MODEL == 7)
#include "nilcore_v7m.h"
#else
#error "unknown Cortex-M variant"
#endif
#if !defined(_FROM_ASM_)
#if NIL_CFG_ST_TIMEDELTA > 0
#if PORT_USE_ALT_TIMER == FALSE
#include "nilcore_timer.h"
#else /* PORT_USE_ALT_TIMER != FALSE */
#include "nilcore_timer_alt.h"
#endif /* PORT_USE_ALT_TIMER != FALSE */
#endif /* NIL_CFG_ST_TIMEDELTA > 0 */
#endif /* !defined(_FROM_ASM_) */
#endif /* _NILCORE_H_ */
/** @} */

View File

@ -1,124 +0,0 @@
/*
ChibiOS - Copyright (C) 2006..2015 Giovanni Di Sirio.
This file is part of ChibiOS.
ChibiOS is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 3 of the License, or
(at your option) any later version.
ChibiOS is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
/**
* @file ARMCMx/nilcore_timer.h
* @brief System timer header file.
*
* @addtogroup ARMCMx_TIMER
* @{
*/
#ifndef _NILCORE_TIMER_H_
#define _NILCORE_TIMER_H_
/* This is the only header in the HAL designed to be include-able alone.*/
#include "st.h"
/*===========================================================================*/
/* Module constants. */
/*===========================================================================*/
/*===========================================================================*/
/* Module pre-compile time settings. */
/*===========================================================================*/
/*===========================================================================*/
/* Derived constants and error checks. */
/*===========================================================================*/
/*===========================================================================*/
/* Module data structures and types. */
/*===========================================================================*/
/*===========================================================================*/
/* Module macros. */
/*===========================================================================*/
/*===========================================================================*/
/* External declarations. */
/*===========================================================================*/
/*===========================================================================*/
/* Module inline functions. */
/*===========================================================================*/
/**
* @brief Starts the alarm.
* @note Makes sure that no spurious alarms are triggered after
* this call.
*
* @param[in] time the time to be set for the first alarm
*
* @notapi
*/
static inline void port_timer_start_alarm(systime_t time) {
stStartAlarm(time);
}
/**
* @brief Stops the alarm interrupt.
*
* @notapi
*/
static inline void port_timer_stop_alarm(void) {
stStopAlarm();
}
/**
* @brief Sets the alarm time.
*
* @param[in] time the time to be set for the next alarm
*
* @notapi
*/
static inline void port_timer_set_alarm(systime_t time) {
stSetAlarm(time);
}
/**
* @brief Returns the system time.
*
* @return The system time.
*
* @notapi
*/
static inline systime_t port_timer_get_time(void) {
return stGetCounter();
}
/**
* @brief Returns the current alarm time.
*
* @return The currently set alarm time.
*
* @notapi
*/
static inline systime_t port_timer_get_alarm(void) {
return stGetAlarm();
}
#endif /* _NILCORE_TIMER_H_ */
/** @} */

View File

@ -1,147 +0,0 @@
/*
ChibiOS - Copyright (C) 2006..2015 Giovanni Di Sirio.
This file is part of ChibiOS.
ChibiOS is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 3 of the License, or
(at your option) any later version.
ChibiOS is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
/**
* @file nilcore_v6m.c
* @brief ARMv6-M architecture port code.
*
* @addtogroup ARMCMx_V6M_CORE
* @{
*/
#include "nil.h"
/*===========================================================================*/
/* Module local definitions. */
/*===========================================================================*/
/*===========================================================================*/
/* Module exported variables. */
/*===========================================================================*/
/*===========================================================================*/
/* Module local types. */
/*===========================================================================*/
/*===========================================================================*/
/* Module local variables. */
/*===========================================================================*/
/*===========================================================================*/
/* Module local functions. */
/*===========================================================================*/
/*===========================================================================*/
/* Module interrupt handlers. */
/*===========================================================================*/
#if (CORTEX_ALTERNATE_SWITCH == FALSE) || defined(__DOXYGEN__)
/**
* @brief NMI vector.
* @details The NMI vector is used for exception mode re-entering after a
* context switch.
*/
/*lint -save -e9075 [8.4] All symbols are invoked from asm context.*/
void NMI_Handler(void) {
/*lint -restore*/
/* The port_extctx structure is pointed by the PSP register.*/
struct port_extctx *ctxp = (struct port_extctx *)__get_PSP();
/* Discarding the current exception context and positioning the stack to
point to the real one.*/
ctxp++;
/* Writing back the modified PSP value.*/
__set_PSP((uint32_t)ctxp);
/* Restoring the normal interrupts status.*/
port_unlock_from_isr();
}
#endif /* !CORTEX_ALTERNATE_SWITCH */
#if (CORTEX_ALTERNATE_SWITCH == TRUE) || defined(__DOXYGEN__)
/**
* @brief PendSV vector.
* @details The PendSV vector is used for exception mode re-entering after a
* context switch.
*/
/*lint -save -e9075 [8.4] All symbols are invoked from asm context.*/
void PendSV_Handler(void) {
/*lint -restore*/
/* The port_extctx structure is pointed by the PSP register.*/
struct port_extctx *ctxp = (struct port_extctx *)__get_PSP();
/* Discarding the current exception context and positioning the stack to
point to the real one.*/
ctxp++;
/* Writing back the modified PSP value.*/
__set_PSP((uint32_t)ctxp);
}
#endif /* CORTEX_ALTERNATE_SWITCH */
/*===========================================================================*/
/* Module exported functions. */
/*===========================================================================*/
/**
* @brief IRQ epilogue code.
*
* @param[in] lr value of the @p LR register on ISR entry
*/
void _port_irq_epilogue(regarm_t lr) {
if (lr != (regarm_t)0xFFFFFFF1U) {
struct port_extctx *ctxp;
port_lock_from_isr();
/* The extctx structure is pointed by the PSP register.*/
ctxp = (struct port_extctx *)__get_PSP();
/* Adding an artificial exception return context, there is no need to
populate it fully.*/
ctxp--;
/* Writing back the modified PSP value.*/
__set_PSP((uint32_t)ctxp);
/* Setting up a fake XPSR register value.*/
ctxp->xpsr = (regarm_t)0x01000000;
/* The exit sequence is different depending on if a preemption is
required or not.*/
if (chSchIsRescRequiredI()) {
/* Preemption is required we need to enforce a context switch.*/
ctxp->pc = (regarm_t)_port_switch_from_isr;
}
else {
/* Preemption not required, we just need to exit the exception
atomically.*/
ctxp->pc = (regarm_t)_port_exit_from_isr;
}
/* Note, returning without unlocking is intentional, this is done in
order to keep the rest of the context switch atomic.*/
}
}
/** @} */

View File

@ -1,406 +0,0 @@
/*
ChibiOS - Copyright (C) 2006..2015 Giovanni Di Sirio.
This file is part of ChibiOS.
ChibiOS is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 3 of the License, or
(at your option) any later version.
ChibiOS is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
/**
* @file chcore_v6m.h
* @brief ARMv6-M architecture port macros and structures.
*
* @addtogroup ARMCMx_V6M_CORE
* @{
*/
#ifndef _CHCORE_V6M_H_
#define _CHCORE_V6M_H_
/*===========================================================================*/
/* Module constants. */
/*===========================================================================*/
/**
* @brief This port does not support a realtime counter.
*/
#define PORT_SUPPORTS_RT FALSE
/**
* @brief PendSV priority level.
* @note This priority is enforced to be equal to @p 0,
* this handler always has the highest priority that cannot preempt
* the kernel.
*/
#define CORTEX_PRIORITY_PENDSV 0
/*===========================================================================*/
/* Module pre-compile time settings. */
/*===========================================================================*/
/**
* @brief Stack size for the system idle thread.
* @details This size depends on the idle thread implementation, usually
* the idle thread should take no more space than those reserved
* by @p PORT_INT_REQUIRED_STACK.
* @note In this port it is set to 16 because the idle thread does have
* a stack frame when compiling without optimizations. You may
* reduce this value to zero when compiling with optimizations.
*/
#if !defined(PORT_IDLE_THREAD_STACK_SIZE)
#define PORT_IDLE_THREAD_STACK_SIZE 16
#endif
/**
* @brief Per-thread stack overhead for interrupts servicing.
* @details This constant is used in the calculation of the correct working
* area size.
* @note In this port this value is conservatively set to 32 because the
* function @p chSchDoReschedule() can have a stack frame, especially
* with compiler optimizations disabled. The value can be reduced
* when compiler optimizations are enabled.
*/
#if !defined(PORT_INT_REQUIRED_STACK)
#define PORT_INT_REQUIRED_STACK 32
#endif
/**
* @brief Enables the use of the WFI instruction in the idle thread loop.
*/
#if !defined(CORTEX_ENABLE_WFI_IDLE)
#define CORTEX_ENABLE_WFI_IDLE FALSE
#endif
/**
* @brief Alternate preemption method.
* @details Activating this option will make the Kernel use the PendSV
* handler for preemption instead of the NMI handler.
*/
#ifndef CORTEX_ALTERNATE_SWITCH
#define CORTEX_ALTERNATE_SWITCH FALSE
#endif
/*===========================================================================*/
/* Derived constants and error checks. */
/*===========================================================================*/
/**
* @name Architecture and Compiler
* @{
*/
#if ((CORTEX_MODEL == 0) && !defined(__CORE_CM0PLUS_H_DEPENDANT)) || \
defined(__DOXYGEN__)
/**
* @brief Macro defining the specific ARM architecture.
*/
#define PORT_ARCHITECTURE_ARM_v6M
/**
* @brief Name of the implemented architecture.
*/
#define PORT_ARCHITECTURE_NAME "ARMv6-M"
/**
* @brief Name of the architecture variant.
*/
#define PORT_CORE_VARIANT_NAME "Cortex-M0"
#elif (CORTEX_MODEL == 0) && defined(__CORE_CM0PLUS_H_DEPENDANT)
#define PORT_ARCHITECTURE_ARM_v6M
#define PORT_ARCHITECTURE_NAME "ARMv6-M"
#define PORT_CORE_VARIANT_NAME "Cortex-M0+"
#endif
/**
* @brief Port-specific information string.
*/
#if (CORTEX_ALTERNATE_SWITCH == FALSE) || defined(__DOXYGEN__)
#define PORT_INFO "Preemption through NMI"
#else
#define PORT_INFO "Preemption through PendSV"
#endif
/** @} */
/**
* @brief Maximum usable priority for normal ISRs.
*/
#if (CORTEX_ALTERNATE_SWITCH == TRUE) || defined(__DOXYGEN__)
#define CORTEX_MAX_KERNEL_PRIORITY 1
#else
#define CORTEX_MAX_KERNEL_PRIORITY 0
#endif
/*===========================================================================*/
/* Module data structures and types. */
/*===========================================================================*/
#if !defined(_FROM_ASM_)
/* The documentation of the following declarations is in chconf.h in order
to not have duplicated structure names into the documentation.*/
#if !defined(__DOXYGEN__)
struct port_extctx {
regarm_t r0;
regarm_t r1;
regarm_t r2;
regarm_t r3;
regarm_t r12;
regarm_t lr_thd;
regarm_t pc;
regarm_t xpsr;
};
struct port_intctx {
regarm_t r8;
regarm_t r9;
regarm_t r10;
regarm_t r11;
regarm_t r4;
regarm_t r5;
regarm_t r6;
regarm_t r7;
regarm_t lr;
};
#endif /* !defined(__DOXYGEN__) */
/*===========================================================================*/
/* Module macros. */
/*===========================================================================*/
/**
* @brief Platform dependent thread stack setup.
* @details This code usually setup the context switching frame represented
* by an @p port_intctx structure.
*/
#define PORT_SETUP_CONTEXT(tp, wend, pf, arg) { \
(tp)->ctxp = (struct port_intctx *)((uint8_t *)(wend) - \
sizeof(struct port_intctx)); \
(tp)->ctxp->r4 = (regarm_t)(pf); \
(tp)->ctxp->r5 = (regarm_t)(arg); \
(tp)->ctxp->lr = (regarm_t)_port_thread_start; \
}
/**
* @brief Computes the thread working area global size.
* @note There is no need to perform alignments in this macro.
*/
#define PORT_WA_SIZE(n) (sizeof(struct port_intctx) + \
sizeof(struct port_extctx) + \
((size_t)(n)) + ((size_t)(PORT_INT_REQUIRED_STACK)))
/**
* @brief IRQ prologue code.
* @details This macro must be inserted at the start of all IRQ handlers
* enabled to invoke system APIs.
*/
#if defined(__GNUC__) || defined(__DOXYGEN__)
#define PORT_IRQ_PROLOGUE() \
regarm_t _saved_lr = (regarm_t)__builtin_return_address(0)
#elif defined(__ICCARM__)
#define PORT_IRQ_PROLOGUE() \
regarm_t _saved_lr = (regarm_t)__get_LR()
#elif defined(__CC_ARM)
#define PORT_IRQ_PROLOGUE() \
regarm_t _saved_lr = (regarm_t)__return_address()
#endif
/**
* @brief IRQ epilogue code.
* @details This macro must be inserted at the end of all IRQ handlers
* enabled to invoke system APIs.
*/
#define PORT_IRQ_EPILOGUE() _port_irq_epilogue(_saved_lr)
/**
* @brief IRQ handler function declaration.
* @note @p id can be a function name or a vector number depending on the
* port implementation.
*/
#define PORT_IRQ_HANDLER(id) void id(void)
/**
* @brief Fast IRQ handler function declaration.
* @note @p id can be a function name or a vector number depending on the
* port implementation.
*/
#define PORT_FAST_IRQ_HANDLER(id) void id(void)
/**
* @brief Performs a context switch between two threads.
* @details This is the most critical code in any port, this function
* is responsible for the context switch between 2 threads.
* @note The implementation of this code affects <b>directly</b> the context
* switch performance so optimize here as much as you can.
*
* @param[in] ntp the thread to be switched in
* @param[in] otp the thread to be switched out
*/
#if (NIL_CFG_ENABLE_STACK_CHECK == FALSE) || defined(__DOXYGEN__)
#define port_switch(ntp, otp) _port_switch(ntp, otp)
#else
#define port_switch(ntp, otp) { \
struct port_intctx *r13 = (struct port_intctx *)__get_PSP(); \
if ((stkalign_t *)(r13 - 1) < (otp)->stklim) { \
chSysHalt("stack overflow"); \
} \
_port_switch(ntp, otp); \
}
#endif
/*===========================================================================*/
/* External declarations. */
/*===========================================================================*/
#ifdef __cplusplus
extern "C" {
#endif
void _port_irq_epilogue(regarm_t lr);
void _port_switch_from_isr(void);
void _port_exit_from_isr(void);
void _port_switch(thread_t *ntp, thread_t *otp);
void _port_thread_start(void);
#ifdef __cplusplus
}
#endif
/*===========================================================================*/
/* Module inline functions. */
/*===========================================================================*/
/**
* @brief Port-related initialization code.
*/
static inline void port_init(void) {
NVIC_SetPriority(PendSV_IRQn, CORTEX_PRIORITY_PENDSV);
}
/**
* @brief Returns a word encoding the current interrupts status.
*
* @return The interrupts status.
*/
static inline syssts_t port_get_irq_status(void) {
return (syssts_t)__get_PRIMASK();
}
/**
* @brief Checks the interrupt status.
*
* @param[in] sts the interrupt status word
*
* @return The interrupt status.
* @retvel false the word specified a disabled interrupts status.
* @retvel true the word specified an enabled interrupts status.
*/
static inline bool port_irq_enabled(syssts_t sts) {
return (sts & (syssts_t)1) == (syssts_t)0;
}
/**
* @brief Determines the current execution context.
*
* @return The execution context.
* @retval false not running in ISR mode.
* @retval true running in ISR mode.
*/
static inline bool port_is_isr_context(void) {
return (bool)((__get_IPSR() & 0x1FFU) != 0U);
}
/**
* @brief Kernel-lock action.
* @details In this port this function disables interrupts globally.
*/
static inline void port_lock(void) {
__disable_irq();
}
/**
* @brief Kernel-unlock action.
* @details In this port this function enables interrupts globally.
*/
static inline void port_unlock(void) {
__enable_irq();
}
/**
* @brief Kernel-lock action from an interrupt handler.
* @details In this port this function disables interrupts globally.
* @note Same as @p port_lock() in this port.
*/
static inline void port_lock_from_isr(void) {
port_lock();
}
/**
* @brief Kernel-unlock action from an interrupt handler.
* @details In this port this function enables interrupts globally.
* @note Same as @p port_lock() in this port.
*/
static inline void port_unlock_from_isr(void) {
port_unlock();
}
/**
* @brief Disables all the interrupt sources.
*/
static inline void port_disable(void) {
__disable_irq();
}
/**
* @brief Disables the interrupt sources below kernel-level priority.
*/
static inline void port_suspend(void) {
__disable_irq();
}
/**
* @brief Enables all the interrupt sources.
*/
static inline void port_enable(void) {
__enable_irq();
}
/**
* @brief Enters an architecture-dependent IRQ-waiting mode.
* @details The function is meant to return when an interrupt becomes pending.
* The simplest implementation is an empty function or macro but this
* would not take advantage of architecture-specific power saving
* modes.
* @note Implemented as an inlined @p WFI instruction.
*/
static inline void port_wait_for_interrupt(void) {
#if CORTEX_ENABLE_WFI_IDLE == TRUE
__WFI();
#endif
}
#endif /* _FROM_ASM_ */
#endif /* _CHCORE_V6M_H_ */
/** @} */

View File

@ -1,165 +0,0 @@
/*
ChibiOS - Copyright (C) 2006..2015 Giovanni Di Sirio.
This file is part of ChibiOS.
ChibiOS is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 3 of the License, or
(at your option) any later version.
ChibiOS is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
/**
* @file nilcore_v7m.c
* @brief ARMv7-M architecture port code.
*
* @addtogroup ARMCMx_V7M_CORE
* @{
*/
#include "nil.h"
/*===========================================================================*/
/* Module local definitions. */
/*===========================================================================*/
/*===========================================================================*/
/* Module exported variables. */
/*===========================================================================*/
/*===========================================================================*/
/* Module local types. */
/*===========================================================================*/
/*===========================================================================*/
/* Module local variables. */
/*===========================================================================*/
/*===========================================================================*/
/* Module local functions. */
/*===========================================================================*/
/*===========================================================================*/
/* Module interrupt handlers. */
/*===========================================================================*/
#if (CORTEX_SIMPLIFIED_PRIORITY == FALSE) || defined(__DOXYGEN__)
/**
* @brief SVC vector.
* @details The SVC vector is used for exception mode re-entering after a
* context switch.
* @note The PendSV vector is only used in advanced kernel mode.
*/
/*lint -save -e9075 [8.4] All symbols are invoked from asm context.*/
void SVC_Handler(void) {
/*lint -restore*/
struct port_extctx *ctxp;
#if CORTEX_USE_FPU == TRUE
/* Enforcing unstacking of the FP part of the context.*/
FPU->FPCCR &= ~FPU_FPCCR_LSPACT_Msk;
#endif
/* The port_extctx structure is pointed by the PSP register.*/
ctxp = (struct port_extctx *)__get_PSP();
/* Discarding the current exception context and positioning the stack to
point to the real one.*/
ctxp++;
/* Restoring real position of the original stack frame.*/
__set_PSP((uint32_t)ctxp);
/* Restoring the normal interrupts status.*/
port_unlock_from_isr();
}
#endif /* CORTEX_SIMPLIFIED_PRIORITY == FALSE */
#if (CORTEX_SIMPLIFIED_PRIORITY == TRUE) || defined(__DOXYGEN__)
/**
* @brief PendSV vector.
* @details The PendSV vector is used for exception mode re-entering after a
* context switch.
* @note The PendSV vector is only used in compact kernel mode.
*/
/*lint -save -e9075 [8.4] All symbols are invoked from asm context.*/
void PendSV_Handler(void) {
/*lint -restore*/
struct port_extctx *ctxp;
#if CORTEX_USE_FPU == TRUE
/* Enforcing unstacking of the FP part of the context.*/
FPU->FPCCR &= ~FPU_FPCCR_LSPACT_Msk;
#endif
/* The port_extctx structure is pointed by the PSP register.*/
ctxp = (struct port_extctx *)__get_PSP();
/* Discarding the current exception context and positioning the stack to
point to the real one.*/
ctxp++;
/* Writing back the modified PSP value.*/
__set_PSP((uint32_t)ctxp);
}
#endif /* CORTEX_SIMPLIFIED_PRIORITY == TRUE */
/*===========================================================================*/
/* Module exported functions. */
/*===========================================================================*/
/**
* @brief Exception exit redirection to _port_switch_from_isr().
*/
void _port_irq_epilogue(void) {
port_lock_from_isr();
if ((SCB->ICSR & SCB_ICSR_RETTOBASE_Msk) != 0U) {
struct port_extctx *ctxp;
#if CORTEX_USE_FPU == TRUE
/* Enforcing a lazy FPU state save by accessing the FPCSR register.*/
(void) __get_FPSCR();
#endif
/* The port_extctx structure is pointed by the PSP register.*/
ctxp = (struct port_extctx *)__get_PSP();
/* Adding an artificial exception return context, there is no need to
populate it fully.*/
ctxp--;
/* Setting up a fake XPSR register value.*/
ctxp->xpsr = (regarm_t)0x01000000;
/* Writing back the modified PSP value.*/
__set_PSP((uint32_t)ctxp);
/* The exit sequence is different depending on if a preemption is
required or not.*/
if (chSchIsRescRequiredI()) {
/* Preemption is required we need to enforce a context switch.*/
ctxp->pc = (regarm_t)_port_switch_from_isr;
}
else {
/* Preemption not required, we just need to exit the exception
atomically.*/
ctxp->pc = (regarm_t)_port_exit_from_isr;
}
/* Note, returning without unlocking is intentional, this is done in
order to keep the rest of the context switch atomic.*/
return;
}
port_unlock_from_isr();
}
/** @} */

View File

@ -1,576 +0,0 @@
/*
ChibiOS - Copyright (C) 2006..2015 Giovanni Di Sirio.
This file is part of ChibiOS.
ChibiOS is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 3 of the License, or
(at your option) any later version.
ChibiOS is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
/**
* @file chcore_v7m.h
* @brief ARMv7-M architecture port macros and structures.
*
* @addtogroup ARMCMx_V7M_CORE
* @{
*/
#ifndef _NILCORE_V7M_H_
#define _NILCORE_V7M_H_
/*===========================================================================*/
/* Module constants. */
/*===========================================================================*/
/**
* @brief This port supports a realtime counter.
*/
#define PORT_SUPPORTS_RT TRUE
/**
* @brief Disabled value for BASEPRI register.
*/
#define CORTEX_BASEPRI_DISABLED 0U
/*===========================================================================*/
/* Module pre-compile time settings. */
/*===========================================================================*/
/**
* @brief Stack size for the system idle thread.
* @details This size depends on the idle thread implementation, usually
* the idle thread should take no more space than those reserved
* by @p PORT_INT_REQUIRED_STACK.
* @note In this port it is set to 16 because the idle thread does have
* a stack frame when compiling without optimizations. You may
* reduce this value to zero when compiling with optimizations.
*/
#if !defined(PORT_IDLE_THREAD_STACK_SIZE) || defined(__DOXYGEN__)
#define PORT_IDLE_THREAD_STACK_SIZE 16
#endif
/**
* @brief Per-thread stack overhead for interrupts servicing.
* @details This constant is used in the calculation of the correct working
* area size.
* @note In this port this value is conservatively set to 32 because the
* function @p chSchDoReschedule() can have a stack frame, especially
* with compiler optimizations disabled. The value can be reduced
* when compiler optimizations are enabled.
*/
#if !defined(PORT_INT_REQUIRED_STACK) || defined(__DOXYGEN__)
#define PORT_INT_REQUIRED_STACK 32
#endif
/**
* @brief Enables the use of the WFI instruction in the idle thread loop.
*/
#if !defined(CORTEX_ENABLE_WFI_IDLE)
#define CORTEX_ENABLE_WFI_IDLE FALSE
#endif
/**
* @brief FPU support in context switch.
* @details Activating this option activates the FPU support in the kernel.
*/
#if !defined(CORTEX_USE_FPU)
#define CORTEX_USE_FPU CORTEX_HAS_FPU
#elif (CORTEX_USE_FPU == TRUE) && (CORTEX_HAS_FPU == FALSE)
/* This setting requires an FPU presence check in case it is externally
redefined.*/
#error "the selected core does not have an FPU"
#endif
/**
* @brief Simplified priority handling flag.
* @details Activating this option makes the Kernel work in compact mode.
* In compact mode interrupts are disabled globally instead of
* raising the priority mask to some intermediate level.
*/
#if !defined(CORTEX_SIMPLIFIED_PRIORITY)
#define CORTEX_SIMPLIFIED_PRIORITY FALSE
#endif
/**
* @brief SVCALL handler priority.
* @note The default SVCALL handler priority is defaulted to
* @p CORTEX_MAXIMUM_PRIORITY+1, this reserves the
* @p CORTEX_MAXIMUM_PRIORITY priority level as fast interrupts
* priority level.
*/
#if !defined(CORTEX_PRIORITY_SVCALL)
#define CORTEX_PRIORITY_SVCALL (CORTEX_MAXIMUM_PRIORITY + 1U)
#elif !PORT_IRQ_IS_VALID_PRIORITY(CORTEX_PRIORITY_SVCALL)
/* If it is externally redefined then better perform a validity check on it.*/
#error "invalid priority level specified for CORTEX_PRIORITY_SVCALL"
#endif
/**
* @brief NVIC VTOR initialization expression.
*/
#if !defined(CORTEX_VTOR_INIT) || defined(__DOXYGEN__)
#define CORTEX_VTOR_INIT 0x00000000U
#endif
/**
* @brief NVIC PRIGROUP initialization expression.
* @details The default assigns all available priority bits as preemption
* priority with no sub-priority.
*/
#if !defined(CORTEX_PRIGROUP_INIT) || defined(__DOXYGEN__)
#define CORTEX_PRIGROUP_INIT (7 - CORTEX_PRIORITY_BITS)
#endif
/*===========================================================================*/
/* Derived constants and error checks. */
/*===========================================================================*/
/**
* @name Architecture and Compiler
* @{
*/
#if (CORTEX_MODEL == 3) || defined(__DOXYGEN__)
/**
* @brief Macro defining the specific ARM architecture.
*/
#define PORT_ARCHITECTURE_ARM_v7M
/**
* @brief Name of the implemented architecture.
*/
#define PORT_ARCHITECTURE_NAME "ARMv7-M"
/**
* @brief Name of the architecture variant.
*/
#define PORT_CORE_VARIANT_NAME "Cortex-M3"
#elif (CORTEX_MODEL == 4)
#define PORT_ARCHITECTURE_ARM_v7ME
#define PORT_ARCHITECTURE_NAME "ARMv7E-M"
#if CORTEX_USE_FPU
#define PORT_CORE_VARIANT_NAME "Cortex-M4F"
#else
#define PORT_CORE_VARIANT_NAME "Cortex-M4"
#endif
#elif (CORTEX_MODEL == 7)
#define PORT_ARCHITECTURE_ARM_v7ME
#define PORT_ARCHITECTURE_NAME "ARMv7E-M"
#if CORTEX_USE_FPU
#define PORT_CORE_VARIANT_NAME "Cortex-M7F"
#else
#define PORT_CORE_VARIANT_NAME "Cortex-M7"
#endif
#endif
/**
* @brief Port-specific information string.
*/
#if (CORTEX_SIMPLIFIED_PRIORITY == FALSE) || defined(__DOXYGEN__)
#define PORT_INFO "Advanced kernel mode"
#else
#define PORT_INFO "Compact kernel mode"
#endif
/** @} */
#if (CORTEX_SIMPLIFIED_PRIORITY == FALSE) || defined(__DOXYGEN__)
/**
* @brief Maximum usable priority for normal ISRs.
*/
#define CORTEX_MAX_KERNEL_PRIORITY (CORTEX_PRIORITY_SVCALL + 1U)
/**
* @brief BASEPRI level within kernel lock.
*/
#define CORTEX_BASEPRI_KERNEL \
CORTEX_PRIO_MASK(CORTEX_MAX_KERNEL_PRIORITY)
#else
#define CORTEX_MAX_KERNEL_PRIORITY 0U
#endif
/**
* @brief PendSV priority level.
* @note This priority is enforced to be equal to
* @p CORTEX_MAX_KERNEL_PRIORITY, this handler always have the
* highest priority that cannot preempt the kernel.
*/
#define CORTEX_PRIORITY_PENDSV CORTEX_MAX_KERNEL_PRIORITY
/*===========================================================================*/
/* Module data structures and types. */
/*===========================================================================*/
/* The following code is not processed when the file is included from an
asm module.*/
#if !defined(_FROM_ASM_)
/* The documentation of the following declarations is in chconf.h in order
to not have duplicated structure names into the documentation.*/
#if !defined(__DOXYGEN__)
struct port_extctx {
regarm_t r0;
regarm_t r1;
regarm_t r2;
regarm_t r3;
regarm_t r12;
regarm_t lr_thd;
regarm_t pc;
regarm_t xpsr;
#if CORTEX_USE_FPU
regarm_t s0;
regarm_t s1;
regarm_t s2;
regarm_t s3;
regarm_t s4;
regarm_t s5;
regarm_t s6;
regarm_t s7;
regarm_t s8;
regarm_t s9;
regarm_t s10;
regarm_t s11;
regarm_t s12;
regarm_t s13;
regarm_t s14;
regarm_t s15;
regarm_t fpscr;
regarm_t reserved;
#endif /* CORTEX_USE_FPU */
};
struct port_intctx {
#if CORTEX_USE_FPU
regarm_t s16;
regarm_t s17;
regarm_t s18;
regarm_t s19;
regarm_t s20;
regarm_t s21;
regarm_t s22;
regarm_t s23;
regarm_t s24;
regarm_t s25;
regarm_t s26;
regarm_t s27;
regarm_t s28;
regarm_t s29;
regarm_t s30;
regarm_t s31;
#endif /* CORTEX_USE_FPU */
regarm_t r4;
regarm_t r5;
regarm_t r6;
regarm_t r7;
regarm_t r8;
regarm_t r9;
regarm_t r10;
regarm_t r11;
regarm_t lr;
};
#endif /* !defined(__DOXYGEN__) */
/*===========================================================================*/
/* Module macros. */
/*===========================================================================*/
/**
* @brief Platform dependent part of the @p chThdCreateI() API.
* @details This code usually setup the context switching frame represented
* by an @p port_intctx structure.
*/
#define PORT_SETUP_CONTEXT(tp, wend, pf, arg) { \
(tp)->ctxp = (struct port_intctx *)((uint8_t *)(wend) - \
sizeof(struct port_intctx)); \
(tp)->ctxp->r4 = (regarm_t)(pf); \
(tp)->ctxp->r5 = (regarm_t)(arg); \
(tp)->ctxp->lr = (regarm_t)_port_thread_start; \
}
/**
* @brief Computes the thread working area global size.
* @note There is no need to perform alignments in this macro.
*/
#define PORT_WA_SIZE(n) (sizeof(struct port_intctx) + \
sizeof(struct port_extctx) + \
((size_t)(n)) + ((size_t)(PORT_INT_REQUIRED_STACK)))
/**
* @brief IRQ prologue code.
* @details This macro must be inserted at the start of all IRQ handlers
* enabled to invoke system APIs.
*/
#define PORT_IRQ_PROLOGUE()
/**
* @brief IRQ epilogue code.
* @details This macro must be inserted at the end of all IRQ handlers
* enabled to invoke system APIs.
*/
#define PORT_IRQ_EPILOGUE() _port_irq_epilogue()
/**
* @brief IRQ handler function declaration.
* @note @p id can be a function name or a vector number depending on the
* port implementation.
*/
#define PORT_IRQ_HANDLER(id) void id(void)
/**
* @brief Fast IRQ handler function declaration.
* @note @p id can be a function name or a vector number depending on the
* port implementation.
*/
#define PORT_FAST_IRQ_HANDLER(id) void id(void)
/**
* @brief Performs a context switch between two threads.
* @details This is the most critical code in any port, this function
* is responsible for the context switch between 2 threads.
* @note The implementation of this code affects <b>directly</b> the context
* switch performance so optimize here as much as you can.
*
* @param[in] ntp the thread to be switched in
* @param[in] otp the thread to be switched out
*/
#if (NIL_CFG_ENABLE_STACK_CHECK == FALSE) || defined(__DOXYGEN__)
#define port_switch(ntp, otp) _port_switch(ntp, otp)
#else
#define port_switch(ntp, otp) { \
struct port_intctx *r13 = (struct port_intctx *)__get_PSP(); \
if ((stkalign_t *)(r13 - 1) < (otp)->stklim) { \
chSysHalt("stack overflow"); \
} \
_port_switch(ntp, otp); \
}
#endif
/*===========================================================================*/
/* External declarations. */
/*===========================================================================*/
#ifdef __cplusplus
extern "C" {
#endif
void _port_irq_epilogue(void);
void _port_switch(thread_t *ntp, thread_t *otp);
void _port_thread_start(void);
void _port_switch_from_isr(void);
void _port_exit_from_isr(void);
#ifdef __cplusplus
}
#endif
/*===========================================================================*/
/* Module inline functions. */
/*===========================================================================*/
/**
* @brief Port-related initialization code.
*/
static inline void port_init(void) {
/* Initialization of the vector table and priority related settings.*/
SCB->VTOR = CORTEX_VTOR_INIT;
/* Initializing priority grouping.*/
NVIC_SetPriorityGrouping(CORTEX_PRIGROUP_INIT);
/* DWT cycle counter enable.*/
CoreDebug->DEMCR |= CoreDebug_DEMCR_TRCENA_Msk;
#if CORTEX_MODEL == 7
DWT->LAR = 0xC5ACCE55U;
#endif
DWT->CTRL |= DWT_CTRL_CYCCNTENA_Msk;
/* Initialization of the system vectors used by the port.*/
#if CORTEX_SIMPLIFIED_PRIORITY == FALSE
NVIC_SetPriority(SVCall_IRQn, CORTEX_PRIORITY_SVCALL);
#endif
NVIC_SetPriority(PendSV_IRQn, CORTEX_PRIORITY_PENDSV);
}
/**
* @brief Returns a word encoding the current interrupts status.
*
* @return The interrupts status.
*/
static inline syssts_t port_get_irq_status(void) {
syssts_t sts;
#if CORTEX_SIMPLIFIED_PRIORITY == FALSE
sts = (syssts_t)__get_BASEPRI();
#else /* CORTEX_SIMPLIFIED_PRIORITY */
sts = (syssts_t)__get_PRIMASK();
#endif /* CORTEX_SIMPLIFIED_PRIORITY */
return sts;
}
/**
* @brief Checks the interrupt status.
*
* @param[in] sts the interrupt status word
*
* @return The interrupt status.
* @retvel false the word specified a disabled interrupts status.
* @retvel true the word specified an enabled interrupts status.
*/
static inline bool port_irq_enabled(syssts_t sts) {
#if CORTEX_SIMPLIFIED_PRIORITY == FALSE
return sts == (syssts_t)CORTEX_BASEPRI_DISABLED;
#else /* CORTEX_SIMPLIFIED_PRIORITY */
return (sts & (syssts_t)1) == (syssts_t)0;
#endif /* CORTEX_SIMPLIFIED_PRIORITY */
}
/**
* @brief Determines the current execution context.
*
* @return The execution context.
* @retval false not running in ISR mode.
* @retval true running in ISR mode.
*/
static inline bool port_is_isr_context(void) {
return (bool)((__get_IPSR() & 0x1FFU) != 0U);
}
/**
* @brief Kernel-lock action.
* @details In this port this function raises the base priority to kernel
* level.
*/
static inline void port_lock(void) {
#if CORTEX_SIMPLIFIED_PRIORITY == FALSE
#if defined(__CM7_REV)
#if __CM7_REV == 0
__disable_irq();
#endif
#endif
__set_BASEPRI(CORTEX_BASEPRI_KERNEL);
#if defined(__CM7_REV)
#if __CM7_REV == 0
__enable_irq();
#endif
#endif
#else /* CORTEX_SIMPLIFIED_PRIORITY */
__disable_irq();
#endif /* CORTEX_SIMPLIFIED_PRIORITY */
}
/**
* @brief Kernel-unlock action.
* @details In this port this function lowers the base priority to user
* level.
*/
static inline void port_unlock(void) {
#if CORTEX_SIMPLIFIED_PRIORITY == FALSE
__set_BASEPRI(CORTEX_BASEPRI_DISABLED);
#else /* CORTEX_SIMPLIFIED_PRIORITY */
__enable_irq();
#endif /* CORTEX_SIMPLIFIED_PRIORITY */
}
/**
* @brief Kernel-lock action from an interrupt handler.
* @details In this port this function raises the base priority to kernel
* level.
* @note Same as @p port_lock() in this port.
*/
static inline void port_lock_from_isr(void) {
port_lock();
}
/**
* @brief Kernel-unlock action from an interrupt handler.
* @details In this port this function lowers the base priority to user
* level.
* @note Same as @p port_unlock() in this port.
*/
static inline void port_unlock_from_isr(void) {
port_unlock();
}
/**
* @brief Disables all the interrupt sources.
* @note In this port it disables all the interrupt sources by raising
* the priority mask to level 0.
*/
static inline void port_disable(void) {
__disable_irq();
}
/**
* @brief Disables the interrupt sources below kernel-level priority.
* @note Interrupt sources above kernel level remains enabled.
* @note In this port it raises/lowers the base priority to kernel level.
*/
static inline void port_suspend(void) {
#if (CORTEX_SIMPLIFIED_PRIORITY == FALSE) || defined(__DOXYGEN__)
__set_BASEPRI(CORTEX_BASEPRI_KERNEL);
__enable_irq();
#else
__disable_irq();
#endif
}
/**
* @brief Enables all the interrupt sources.
* @note In this port it lowers the base priority to user level.
*/
static inline void port_enable(void) {
#if (CORTEX_SIMPLIFIED_PRIORITY == FALSE) || defined(__DOXYGEN__)
__set_BASEPRI(CORTEX_BASEPRI_DISABLED);
#endif
__enable_irq();
}
/**
* @brief Enters an architecture-dependent IRQ-waiting mode.
* @details The function is meant to return when an interrupt becomes pending.
* The simplest implementation is an empty function or macro but this
* would not take advantage of architecture-specific power saving
* modes.
* @note Implemented as an inlined @p WFI instruction.
*/
static inline void port_wait_for_interrupt(void) {
#if CORTEX_ENABLE_WFI_IDLE == TRUE
__WFI();
#endif
}
/**
* @brief Returns the current value of the realtime counter.
*
* @return The realtime counter value.
*/
static inline rtcnt_t port_rt_get_counter_value(void) {
return DWT->CYCCNT;
}
#endif /* !defined(_FROM_ASM_) */
#endif /* _NILCORE_V7M_H_ */
/** @} */

View File

@ -1,7 +0,0 @@
# List of the ChibiOS/RT AVR port files.
PORTSRC = ${CHIBIOS}/os/nil/ports/AVR/nilcore.c
PORTASM =
PORTINC = ${CHIBIOS}/os/nil/ports/AVR \
${CHIBIOS}/os/nil/ports/AVR/compilers/GCC

View File

@ -1,96 +0,0 @@
/*
ChibiOS - Copyright (C) 2006..2015 Giovanni Di Sirio.
This file is part of ChibiOS.
ChibiOS is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 3 of the License, or
(at your option) any later version.
ChibiOS is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
/**
* @file AVR/compilers/GCC/niltypes.h
* @brief AVR port system types.
*
* @addtogroup AVR_CORE
* @{
*/
#ifndef _NILTYPES_H_
#define _NILTYPES_H_
#include <stddef.h>
#include <stdint.h>
#include <stdbool.h>
/**
* @name Common constants
*/
/**
* @brief Generic 'false' boolean constant.
*/
#if !defined(FALSE) || defined(__DOXYGEN__)
#define FALSE 0
#endif
/**
* @brief Generic 'true' boolean constant.
*/
#if !defined(TRUE) || defined(__DOXYGEN__)
#define TRUE (!FALSE)
#endif
/** @} */
typedef uint8_t syssts_t; /**< System status word. */
typedef uint16_t rtcnt_t; /**< Realtime counter. */
typedef uint8_t tstate_t; /**< Thread state. */
typedef int16_t msg_t; /**< Inter-thread message. */
typedef uint8_t eventmask_t; /**< Mask of event identifiers. */
typedef int8_t cnt_t; /**< Generic signed counter. */
typedef uint8_t ucnt_t; /**< Generic unsigned counter. */
/**
* @brief Type of system time.
*/
#if (NIL_CFG_ST_RESOLUTION == 32) || defined(__DOXYGEN__)
typedef uint32_t systime_t;
#else
typedef uint16_t systime_t;
#endif
/**
* @brief ROM constant modifier.
* @note It is set to use the "const" keyword in this port.
*/
#define ROMCONST const
/**
* @brief Makes functions not inlineable.
* @note If the compiler does not support such attribute then the
* realtime counter precision could be degraded.
*/
#define NOINLINE __attribute__((noinline))
/**
* @brief Optimized thread function declaration macro.
*/
#define PORT_THD_FUNCTION(tname, arg) \
__attribute__((noreturn)) void tname(void *arg)
/**
* @brief Packed variable specifier.
*/
#define PACKED_VAR __attribute__((packed))
#endif /* _NILTYPES_H_ */
/** @} */

View File

@ -1,137 +0,0 @@
/*
ChibiOS - Copyright (C) 2006..2015 Giovanni Di Sirio.
This file is part of ChibiOS.
ChibiOS is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 3 of the License, or
(at your option) any later version.
ChibiOS is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
/**
* @file AVR/nilcore.c
* @brief AVR port code.
*
* @addtogroup AVR_CORE
* @{
*/
#include "nil.h"
/*===========================================================================*/
/* Module local definitions. */
/*===========================================================================*/
/*===========================================================================*/
/* Module exported variables. */
/*===========================================================================*/
/*===========================================================================*/
/* Module local types. */
/*===========================================================================*/
/*===========================================================================*/
/* Module local variables. */
/*===========================================================================*/
/*===========================================================================*/
/* Module local functions. */
/*===========================================================================*/
/*===========================================================================*/
/* Module exported functions. */
/*===========================================================================*/
/**
* @brief Performs a context switch between two threads.
* @details This is the most critical code in any port, this function
* is responsible for the context switch between 2 threads.
* @note The implementation of this code affects <b>directly</b> the context
* switch performance so optimize here as much as you can.
* @note The function is declared as a weak symbol, it is possible to
* redefine it in your application code.
*
* @param[in] ntp the thread to be switched in
* @param[in] otp the thread to be switched out
*/
#if !defined(__DOXYGEN__)
__attribute__((naked, weak))
#endif
void _port_switch(thread_t *ntp, thread_t *otp) {
asm volatile ("push r2");
asm volatile ("push r3");
asm volatile ("push r4");
asm volatile ("push r5");
asm volatile ("push r6");
asm volatile ("push r7");
asm volatile ("push r8");
asm volatile ("push r9");
asm volatile ("push r10");
asm volatile ("push r11");
asm volatile ("push r12");
asm volatile ("push r13");
asm volatile ("push r14");
asm volatile ("push r15");
asm volatile ("push r16");
asm volatile ("push r17");
asm volatile ("push r28");
asm volatile ("push r29");
asm volatile ("movw r30, r22");
asm volatile ("in r0, 0x3d");
asm volatile ("std Z+0, r0");
asm volatile ("in r0, 0x3e");
asm volatile ("std Z+1, r0");
asm volatile ("movw r30, r24");
asm volatile ("ldd r0, Z+0");
asm volatile ("out 0x3d, r0");
asm volatile ("ldd r0, Z+1");
asm volatile ("out 0x3e, r0");
asm volatile ("pop r29");
asm volatile ("pop r28");
asm volatile ("pop r17");
asm volatile ("pop r16");
asm volatile ("pop r15");
asm volatile ("pop r14");
asm volatile ("pop r13");
asm volatile ("pop r12");
asm volatile ("pop r11");
asm volatile ("pop r10");
asm volatile ("pop r9");
asm volatile ("pop r8");
asm volatile ("pop r7");
asm volatile ("pop r6");
asm volatile ("pop r5");
asm volatile ("pop r4");
asm volatile ("pop r3");
asm volatile ("pop r2");
asm volatile ("ret");
}
/**
* @brief Start a thread by invoking its work function.
* @details If the work function returns @p chThdExit() is automatically
* invoked.
*/
void _port_thread_start(void) {
chSysUnlock();
asm volatile ("movw r24, r4");
asm volatile ("movw r30, r2");
asm volatile ("icall");
chSysHalt(0);
}
/** @} */

View File

@ -1,418 +0,0 @@
/*
ChibiOS - Copyright (C) 2006..2015 Giovanni Di Sirio.
This file is part of ChibiOS.
ChibiOS is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 3 of the License, or
(at your option) any later version.
ChibiOS is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
/**
* @file AVR/nilcore.h
* @brief AVR port macros and structures.
*
* @addtogroup AVR_CORE
* @{
*/
#ifndef _NILCORE_H_
#define _NILCORE_H_
#include <avr/io.h>
#include <avr/interrupt.h>
/*===========================================================================*/
/* Module constants. */
/*===========================================================================*/
/**
* @name Architecture and Compiler
* @{
*/
/**
* @brief Macro defining the port architecture.
*/
#define PORT_ARCHITECTURE_AVR
/**
* @brief Name of the implemented architecture.
*/
#define PORT_ARCHITECTURE_NAME "AVR"
/**
* @brief Name of the architecture variant.
*/
#define PORT_CORE_VARIANT_NAME "MegaAVR"
/**
* @brief Compiler name and version.
*/
#if defined(__GNUC__) || defined(__DOXYGEN__)
#define PORT_COMPILER_NAME "GCC " __VERSION__
#else
#error "unsupported compiler"
#endif
/**
* @brief Port-specific information string.
*/
#define PORT_INFO "16 bits code addressing"
/**
* @brief This port supports a realtime counter.
*/
#define PORT_SUPPORTS_RT FALSE
/** @} */
/*===========================================================================*/
/* Module pre-compile time settings. */
/*===========================================================================*/
/**
* @brief Stack size for the system idle thread.
* @details This size depends on the idle thread implementation, usually
* the idle thread should take no more space than those reserved
* by @p PORT_INT_REQUIRED_STACK.
* @note In this port it is set to 8.
*/
#if !defined(PORT_IDLE_THREAD_STACK_SIZE) || defined(__DOXYGEN__)
#define PORT_IDLE_THREAD_STACK_SIZE 8
#endif
/**
* @brief Per-thread stack overhead for interrupts servicing.
* @details This constant is used in the calculation of the correct working
* area size.
* @note In this port the default is 32 bytes per thread.
*/
#if !defined(PORT_INT_REQUIRED_STACK) || defined(__DOXYGEN__)
#define PORT_INT_REQUIRED_STACK 32
#endif
/**
* @brief Enables an alternative timer implementation.
* @details Usually the port uses a timer interface defined in the file
* @p nilcore_timer.h, if this option is enabled then the file
* @p nilcore_timer_alt.h is included instead.
*/
#if !defined(PORT_USE_ALT_TIMER)
#define PORT_USE_ALT_TIMER FALSE
#endif
/*===========================================================================*/
/* Derived constants and error checks. */
/*===========================================================================*/
/*===========================================================================*/
/* Module data structures and types. */
/*===========================================================================*/
/* The following code is not processed when the file is included from an
asm module.*/
#if !defined(_FROM_ASM_)
/**
* @brief Type of stack and memory alignment enforcement.
*/
typedef uint8_t stkalign_t;
/**
* @brief System saved context.
* @details This structure represents the inner stack frame during a context
* switching.
*/
struct port_intctx {
uint8_t _next;
uint8_t r29;
uint8_t r28;
uint8_t r17;
uint8_t r16;
uint8_t r15;
uint8_t r14;
uint8_t r13;
uint8_t r12;
uint8_t r11;
uint8_t r10;
uint8_t r9;
uint8_t r8;
uint8_t r7;
uint8_t r6;
uint8_t r5;
uint8_t r4;
uint8_t r3;
uint8_t r2;
#ifdef __AVR_3_BYTE_PC__
uint8_t pcx;
#endif
uint8_t pcl;
uint8_t pch;
};
#endif /* !defined(_FROM_ASM_) */
/*===========================================================================*/
/* Module macros. */
/*===========================================================================*/
/**
* @brief Platform dependent thread stack setup.
* @details This code usually setup the context switching frame represented
* by an @p port_intctx structure.
*/
#ifdef __AVR_3_BYTE_PC__
#define PORT_SETUP_CONTEXT(tp, wend, pf, arg) { \
(tp)->ctxp = (struct port_intctx*)(((uint8_t *)(wend)) - \
sizeof(struct port_intctx)); \
(tp)->ctxp->r2 = (int)pf; \
(tp)->ctxp->r3 = (int)pf >> 8; \
(tp)->ctxp->r4 = (int)arg; \
(tp)->ctxp->r5 = (int)arg >> 8; \
(tp)->ctxp->pcx = (int)0; \
(tp)->ctxp->pcl = (int)_port_thread_start >> 8; \
(tp)->ctxp->pch = (int)_port_thread_start; \
}
#else /* __AVR_3_BYTE_PC__ */
#define PORT_SETUP_CONTEXT(tp, wend, pf, arg) { \
(tp)->ctxp = (struct port_intctx*)(((uint8_t *)(wend)) - \
sizeof(struct port_intctx)); \
(tp)->ctxp->r2 = (int)pf; \
(tp)->ctxp->r3 = (int)pf >> 8; \
(tp)->ctxp->r4 = (int)arg; \
(tp)->ctxp->r5 = (int)arg >> 8; \
(tp)->ctxp->pcl = (int)_port_thread_start >> 8; \
(tp)->ctxp->pch = (int)_port_thread_start; \
}
#endif /* __AVR_3_BYTE_PC__ */
/**
* @brief Computes the thread working area global size.
* @note There is no need to perform alignments in this macro.
*/
#define PORT_WA_SIZE(n) ((sizeof(struct port_intctx) - 1) + \
(n) + (PORT_INT_REQUIRED_STACK))
/**
* @brief IRQ prologue code.
* @details This macro must be inserted at the start of all IRQ handlers
* enabled to invoke system APIs.
* @note This code tricks the compiler to save all the specified registers
* by "touching" them.
*/
#define PORT_IRQ_PROLOGUE() { \
asm ("" : : : "r18", "r19", "r20", "r21", "r22", "r23", "r24", \
"r25", "r26", "r27", "r30", "r31"); \
}
/**
* @brief IRQ epilogue code.
* @details This macro must be inserted at the end of all IRQ handlers
* enabled to invoke system APIs.
*/
#define PORT_IRQ_EPILOGUE() chSchRescheduleS()
/**
* @brief IRQ handler function declaration.
* @note @p id can be a function name or a vector number depending on the
* port implementation.
*/
#define PORT_IRQ_HANDLER(id) ISR(id)
/**
* @brief Fast IRQ handler function declaration.
* @note @p id can be a function name or a vector number depending on the
* port implementation.
*/
#define PORT_FAST_IRQ_HANDLER(id) ISR(id)
/**
* @brief Performs a context switch between two threads.
* @details This is the most critical code in any port, this function
* is responsible for the context switch between 2 threads.
* @note The implementation of this code affects <b>directly</b> the context
* switch performance so optimize here as much as you can.
*
* @param[in] ntp the thread to be switched in
* @param[in] otp the thread to be switched out
*/
#define port_switch(ntp, otp) _port_switch(ntp, otp)
/*===========================================================================*/
/* External declarations. */
/*===========================================================================*/
/* The following code is not processed when the file is included from an
asm module.*/
#if !defined(_FROM_ASM_)
#ifdef __cplusplus
extern "C" {
#endif
void _port_irq_epilogue(void);
void _port_switch(thread_t *ntp, thread_t *otp);
void _port_thread_start(void);
#ifdef __cplusplus
}
#endif
#endif /* !defined(_FROM_ASM_) */
/*===========================================================================*/
/* Module inline functions. */
/*===========================================================================*/
/* The following code is not processed when the file is included from an
asm module.*/
#if !defined(_FROM_ASM_)
/**
* @brief Port-related initialization code.
*/
static inline void port_init(void) {
}
/**
* @brief Returns a word encoding the current interrupts status.
*
* @return The interrupts status.
*/
static inline syssts_t port_get_irq_status(void) {
return 0;
}
/**
* @brief Checks the interrupt status.
*
* @param[in] sts the interrupt status word
*
* @return The interrupt status.
* @retvel false the word specified a disabled interrupts status.
* @retvel true the word specified an enabled interrupts status.
*/
static inline bool port_irq_enabled(syssts_t sts) {
return false;
}
/**
* @brief Determines the current execution context.
*
* @return The execution context.
* @retval false not running in ISR mode.
* @retval true running in ISR mode.
*/
static inline bool port_is_isr_context(void) {
return false;
}
/**
* @brief Kernel-lock action.
*/
static inline void port_lock(void) {
asm volatile ("cli" : : : "memory");
}
/**
* @brief Kernel-unlock action.
*/
static inline void port_unlock(void) {
asm volatile ("sei" : : : "memory");
}
/**
* @brief Kernel-lock action from an interrupt handler.
* @note This function is empty in this port.
*/
static inline void port_lock_from_isr(void) {
}
/**
* @brief Kernel-unlock action from an interrupt handler.
* @note This function is empty in this port.
*/
static inline void port_unlock_from_isr(void) {
}
/**
* @brief Disables all the interrupt sources.
*/
static inline void port_disable(void) {
asm volatile ("cli" : : : "memory");
}
/**
* @brief Disables the interrupt sources below kernel-level priority.
*/
static inline void port_suspend(void) {
asm volatile ("cli" : : : "memory");
}
/**
* @brief Enables all the interrupt sources.
*/
static inline void port_enable(void) {
asm volatile ("sei" : : : "memory");
}
/**
* @brief Enters an architecture-dependent IRQ-waiting mode.
* @details The function is meant to return when an interrupt becomes pending.
* The simplest implementation is an empty function or macro but this
* would not take advantage of architecture-specific power saving
* modes.
*/
static inline void port_wait_for_interrupt(void) {
asm volatile ("sleep" : : : "memory");
}
/**
* @brief Returns the current value of the realtime counter.
*
* @return The realtime counter value.
*/
static inline rtcnt_t port_rt_get_counter_value(void) {
return 0;
}
#endif /* !defined(_FROM_ASM_) */
/*===========================================================================*/
/* Module late inclusions. */
/*===========================================================================*/
#if !defined(_FROM_ASM_)
#if NIL_CFG_ST_TIMEDELTA > 0
#if !PORT_USE_ALT_TIMER
#include "nilcore_timer.h"
#else /* PORT_USE_ALT_TIMER */
#include "nilcore_timer_alt.h"
#endif /* PORT_USE_ALT_TIMER */
#endif /* NIL_CFG_ST_TIMEDELTA > 0 */
#endif /* !defined(_FROM_ASM_) */
#endif /* _NILCORE_H_ */
/** @} */

View File

@ -1,124 +0,0 @@
/*
ChibiOS - Copyright (C) 2006..2015 Giovanni Di Sirio.
This file is part of ChibiOS.
ChibiOS is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 3 of the License, or
(at your option) any later version.
ChibiOS is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
/**
* @file AVR/nilcore_timer.h
* @brief System timer header file.
*
* @addtogroup AVR_TIMER
* @{
*/
#ifndef _NILCORE_TIMER_H_
#define _NILCORE_TIMER_H_
/* This is the only header in the HAL designed to be include-able alone.*/
#include "st.h"
/*===========================================================================*/
/* Module constants. */
/*===========================================================================*/
/*===========================================================================*/
/* Module pre-compile time settings. */
/*===========================================================================*/
/*===========================================================================*/
/* Derived constants and error checks. */
/*===========================================================================*/
/*===========================================================================*/
/* Module data structures and types. */
/*===========================================================================*/
/*===========================================================================*/
/* Module macros. */
/*===========================================================================*/
/*===========================================================================*/
/* External declarations. */
/*===========================================================================*/
/*===========================================================================*/
/* Module inline functions. */
/*===========================================================================*/
/**
* @brief Starts the alarm.
* @note Makes sure that no spurious alarms are triggered after
* this call.
*
* @param[in] time the time to be set for the first alarm
*
* @notapi
*/
static inline void port_timer_start_alarm(systime_t time) {
stStartAlarm(time);
}
/**
* @brief Stops the alarm interrupt.
*
* @notapi
*/
static inline void port_timer_stop_alarm(void) {
stStopAlarm();
}
/**
* @brief Sets the alarm time.
*
* @param[in] time the time to be set for the next alarm
*
* @notapi
*/
static inline void port_timer_set_alarm(systime_t time) {
stSetAlarm(time);
}
/**
* @brief Returns the system time.
*
* @return The system time.
*
* @notapi
*/
static inline systime_t port_timer_get_time(void) {
return stGetCounter();
}
/**
* @brief Returns the current alarm time.
*
* @return The currently set alarm time.
*
* @notapi
*/
static inline systime_t port_timer_get_alarm(void) {
return stGetAlarm();
}
#endif /* _NILCORE_TIMER_H_ */
/** @} */

View File

@ -1,832 +0,0 @@
/*
ChibiOS - Copyright (C) 2006..2015 Giovanni Di Sirio.
This file is part of ChibiOS.
ChibiOS is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 3 of the License, or
(at your option) any later version.
ChibiOS is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
/**
* @file nil.c
* @brief Nil RTOS main source file.
*
* @addtogroup NIL_KERNEL
* @{
*/
#include "nil.h"
/*===========================================================================*/
/* Module local definitions. */
/*===========================================================================*/
/*===========================================================================*/
/* Module exported variables. */
/*===========================================================================*/
/**
* @brief System data structures.
*/
nil_system_t nil;
/*===========================================================================*/
/* Module local variables. */
/*===========================================================================*/
/*===========================================================================*/
/* Module local functions. */
/*===========================================================================*/
/*===========================================================================*/
/* Module interrupt handlers. */
/*===========================================================================*/
/*===========================================================================*/
/* Module exported functions. */
/*===========================================================================*/
/**
* @brief Initializes the kernel.
* @details Initializes the kernel structures, the current instructions flow
* becomes the idle thread upon return. The idle thread must not
* invoke any kernel primitive able to change state to not runnable.
* @note This function assumes that the @p nil global variable has been
* zeroed by the runtime environment. If this is not the case then
* make sure to clear it before calling this function.
*
* @special
*/
void chSysInit(void) {
thread_t *tp;
const thread_config_t *tcp;
/* Port layer initialization.*/
port_init();
/* System initialization hook.*/
NIL_CFG_SYSTEM_INIT_HOOK();
/* Iterates through the list of defined threads.*/
tp = &nil.threads[0];
tcp = nil_thd_configs;
while (tp < &nil.threads[NIL_CFG_NUM_THREADS]) {
#if NIL_CFG_ENABLE_STACK_CHECK
tp->stklim = (stkalign_t *)tcp->wbase;
#endif
/* Port dependent thread initialization.*/
PORT_SETUP_CONTEXT(tp, tcp->wend, tcp->funcp, tcp->arg);
/* Initialization hook.*/
NIL_CFG_THREAD_EXT_INIT_HOOK(tp);
tp++;
tcp++;
}
#if NIL_CFG_ENABLE_STACK_CHECK
/* The idle thread is a special case because its stack is set up by the
runtime environment.*/
tp->stklim = THD_IDLE_BASE;
#endif
/* Runs the highest priority thread, the current one becomes the idle
thread.*/
nil.current = nil.next = nil.threads;
port_switch(nil.current, tp);
/* Interrupts enabled for the idle thread.*/
chSysEnable();
}
/**
* @brief Halts the system.
* @details This function is invoked by the operating system when an
* unrecoverable error is detected, for example because a programming
* error in the application code that triggers an assertion while
* in debug mode.
* @note Can be invoked from any system state.
*
* @param[in] reason pointer to an error string
*
* @special
*/
void chSysHalt(const char *reason) {
port_disable();
#if NIL_DBG_ENABLED
nil.dbg_panic_msg = reason;
#else
(void)reason;
#endif
NIL_CFG_SYSTEM_HALT_HOOK(reason);
/* Harmless infinite loop.*/
while (true) {
}
}
/**
* @brief Time management handler.
* @note This handler has to be invoked by a periodic ISR in order to
* reschedule the waiting threads.
*
* @iclass
*/
void chSysTimerHandlerI(void) {
#if NIL_CFG_ST_TIMEDELTA == 0
thread_t *tp = &nil.threads[0];
nil.systime++;
do {
/* Is the thread in a wait state with timeout?.*/
if (tp->timeout > (systime_t)0) {
chDbgAssert(!NIL_THD_IS_READY(tp), "is ready");
/* Did the timer reach zero?*/
if (--tp->timeout == (systime_t)0) {
/* Timeout on semaphores requires a special handling because the
semaphore counter must be incremented.*/
/*lint -save -e9013 [15.7] There is no else because it is not needed.*/
if (NIL_THD_IS_WTSEM(tp)) {
tp->u1.semp->cnt++;
}
else if (NIL_THD_IS_SUSP(tp)) {
*tp->u1.trp = NULL;
}
/*lint -restore*/
(void) chSchReadyI(tp, MSG_TIMEOUT);
}
}
/* Lock released in order to give a preemption chance on those
architectures supporting IRQ preemption.*/
chSysUnlockFromISR();
tp++;
chSysLockFromISR();
} while (tp < &nil.threads[NIL_CFG_NUM_THREADS]);
#else
thread_t *tp = &nil.threads[0];
systime_t next = (systime_t)0;
chDbgAssert(nil.nexttime == port_timer_get_alarm(), "time mismatch");
do {
/* Is the thread in a wait state with timeout?.*/
if (tp->timeout > (systime_t)0) {
chDbgAssert(!NIL_THD_IS_READY(tp), "is ready");
chDbgAssert(tp->timeout >= (nil.nexttime - nil.lasttime), "skipped one");
tp->timeout -= nil.nexttime - nil.lasttime;
if (tp->timeout == (systime_t)0) {
/* Timeout on semaphores requires a special handling because the
semaphore counter must be incremented.*/
/*lint -save -e9013 [15.7] There is no else because it is not needed.*/
if (NIL_THD_IS_WTSEM(tp)) {
tp->u1.semp->cnt++;
}
else if (NIL_THD_IS_SUSP(tp)) {
*tp->u1.trp = NULL;
}
/*lint -restore*/
(void) chSchReadyI(tp, MSG_TIMEOUT);
}
else {
if (tp->timeout <= (systime_t)(next - (systime_t)1)) {
next = tp->timeout;
}
}
}
/* Lock released in order to give a preemption chance on those
architectures supporting IRQ preemption.*/
chSysUnlockFromISR();
tp++;
chSysLockFromISR();
} while (tp < &nil.threads[NIL_CFG_NUM_THREADS]);
nil.lasttime = nil.nexttime;
if (next > (systime_t)0) {
nil.nexttime += next;
port_timer_set_alarm(nil.nexttime);
}
else {
/* No tick event needed.*/
port_timer_stop_alarm();
}
#endif
}
/**
* @brief Unconditionally enters the kernel lock state.
* @note Can be called without previous knowledge of the current lock state.
* The final state is "s-locked".
*
* @special
*/
void chSysUnconditionalLock(void) {
if (port_irq_enabled(port_get_irq_status())) {
chSysLock();
}
}
/**
* @brief Unconditionally leaves the kernel lock state.
* @note Can be called without previous knowledge of the current lock state.
* The final state is "normal".
*
* @special
*/
void chSysUnconditionalUnlock(void) {
if (!port_irq_enabled(port_get_irq_status())) {
chSysUnlock();
}
}
/**
* @brief Returns the execution status and enters a critical zone.
* @details This functions enters into a critical zone and can be called
* from any context. Because its flexibility it is less efficient
* than @p chSysLock() which is preferable when the calling context
* is known.
* @post The system is in a critical zone.
*
* @return The previous system status, the encoding of this
* status word is architecture-dependent and opaque.
*
* @xclass
*/
syssts_t chSysGetStatusAndLockX(void) {
syssts_t sts = port_get_irq_status();
if (port_irq_enabled(sts)) {
if (port_is_isr_context()) {
chSysLockFromISR();
}
else {
chSysLock();
}
}
return sts;
}
/**
* @brief Restores the specified execution status and leaves a critical zone.
* @note A call to @p chSchRescheduleS() is automatically performed
* if exiting the critical zone and if not in ISR context.
*
* @param[in] sts the system status to be restored.
*
* @xclass
*/
void chSysRestoreStatusX(syssts_t sts) {
if (port_irq_enabled(sts)) {
if (port_is_isr_context()) {
chSysUnlockFromISR();
}
else {
chSchRescheduleS();
chSysUnlock();
}
}
}
#if (PORT_SUPPORTS_RT == TRUE) || defined(__DOXYGEN__)
/**
* @brief Realtime window test.
* @details This function verifies if the current realtime counter value
* lies within the specified range or not. The test takes care
* of the realtime counter wrapping to zero on overflow.
* @note When start==end then the function returns always true because the
* whole time range is specified.
* @note This function is only available if the port layer supports the
* option @p PORT_SUPPORTS_RT.
*
* @param[in] cnt the counter value to be tested
* @param[in] start the start of the time window (inclusive)
* @param[in] end the end of the time window (non inclusive)
* @retval true current time within the specified time window.
* @retval false current time not within the specified time window.
*
* @xclass
*/
bool chSysIsCounterWithinX(rtcnt_t cnt, rtcnt_t start, rtcnt_t end) {
return (bool)((cnt - start) < (end - start));
}
/**
* @brief Polled delay.
* @note The real delay is always few cycles in excess of the specified
* value.
* @note This function is only available if the port layer supports the
* option @p PORT_SUPPORTS_RT.
*
* @param[in] cycles number of cycles
*
* @xclass
*/
void chSysPolledDelayX(rtcnt_t cycles) {
rtcnt_t start = chSysGetRealtimeCounterX();
rtcnt_t end = start + cycles;
while (chSysIsCounterWithinX(chSysGetRealtimeCounterX(), start, end)) {
}
}
#endif /* PORT_SUPPORTS_RT == TRUE */
/**
* @brief Makes the specified thread ready for execution.
*
* @param[in] tp pointer to the @p thread_t object
* @param[in] msg the wakeup message
*
* @return The same reference passed as parameter.
*/
thread_t *chSchReadyI(thread_t *tp, msg_t msg) {
chDbgAssert((tp >= nil.threads) &&
(tp < &nil.threads[NIL_CFG_NUM_THREADS]),
"pointer out of range");
chDbgAssert(!NIL_THD_IS_READY(tp), "already ready");
chDbgAssert(nil.next <= nil.current, "priority ordering");
tp->u1.msg = msg;
tp->state = NIL_STATE_READY;
tp->timeout = (systime_t)0;
if (tp < nil.next) {
nil.next = tp;
}
return tp;
}
/**
* @brief Reschedules if needed.
*
* @sclass
*/
void chSchRescheduleS(void) {
if (chSchIsRescRequiredI()) {
thread_t *otp = nil.current;
nil.current = nil.next;
if (otp == &nil.threads[NIL_CFG_NUM_THREADS]) {
NIL_CFG_IDLE_LEAVE_HOOK();
}
port_switch(nil.next, otp);
}
}
/**
* @brief Puts the current thread to sleep into the specified state with
* timeout specification.
* @details The thread goes into a sleeping state, if it is not awakened
* explicitly within the specified system time then it is forcibly
* awakened with a @p NIL_MSG_TMO low level message.
*
* @param[in] newstate the new thread state or a semaphore pointer
* @param[in] timeout the number of ticks before the operation timeouts.
* the following special values are allowed:
* - @a TIME_INFINITE no timeout.
* .
* @return The wakeup message.
* @retval NIL_MSG_TMO if a timeout occurred.
*
* @sclass
*/
msg_t chSchGoSleepTimeoutS(tstate_t newstate, systime_t timeout) {
thread_t *ntp, *otp = nil.current;
chDbgAssert(otp != &nil.threads[NIL_CFG_NUM_THREADS],
"idle cannot sleep");
/* Storing the wait object for the current thread.*/
otp->state = newstate;
#if NIL_CFG_ST_TIMEDELTA > 0
if (timeout != TIME_INFINITE) {
systime_t abstime;
/* TIMEDELTA makes sure to have enough time to reprogram the timer
before the free-running timer counter reaches the selected timeout.*/
if (timeout < (systime_t)NIL_CFG_ST_TIMEDELTA) {
timeout = (systime_t)NIL_CFG_ST_TIMEDELTA;
}
/* Absolute time of the timeout event.*/
abstime = chVTGetSystemTimeX() + timeout;
if (nil.lasttime == nil.nexttime) {
/* Special case, first thread asking for a timeout.*/
port_timer_start_alarm(abstime);
nil.nexttime = abstime;
}
else {
/* Special case, there are already other threads with a timeout
activated, evaluating the order.*/
if (chVTIsTimeWithinX(abstime, nil.lasttime, nil.nexttime)) {
port_timer_set_alarm(abstime);
nil.nexttime = abstime;
}
}
/* Timeout settings.*/
otp->timeout = abstime - nil.lasttime;
}
#else
/* Timeout settings.*/
otp->timeout = timeout;
#endif
/* Scanning the whole threads array.*/
ntp = nil.threads;
while (true) {
/* Is this thread ready to execute?*/
if (NIL_THD_IS_READY(ntp)) {
nil.current = nil.next = ntp;
if (ntp == &nil.threads[NIL_CFG_NUM_THREADS]) {
NIL_CFG_IDLE_ENTER_HOOK();
}
port_switch(ntp, otp);
return nil.current->u1.msg;
}
/* Points to the next thread in lowering priority order.*/
ntp++;
chDbgAssert(ntp <= &nil.threads[NIL_CFG_NUM_THREADS],
"pointer out of range");
}
}
/**
* @brief Sends the current thread sleeping and sets a reference variable.
* @note This function must reschedule, it can only be called from thread
* context.
*
* @param[in] trp a pointer to a thread reference object
* @param[in] timeout the number of ticks before the operation timeouts,
* the following special values are allowed:
* - @a TIME_INFINITE no timeout.
* .
* @return The wake up message.
*
* @sclass
*/
msg_t chThdSuspendTimeoutS(thread_reference_t *trp, systime_t timeout) {
chDbgAssert(*trp == NULL, "not NULL");
*trp = nil.current;
nil.current->u1.trp = trp;
return chSchGoSleepTimeoutS(NIL_STATE_SUSP, timeout);
}
/**
* @brief Wakes up a thread waiting on a thread reference object.
* @note This function must not reschedule because it can be called from
* ISR context.
*
* @param[in] trp a pointer to a thread reference object
* @param[in] msg the message code
*
* @iclass
*/
void chThdResumeI(thread_reference_t *trp, msg_t msg) {
if (*trp != NULL) {
thread_reference_t tr = *trp;
chDbgAssert(NIL_THD_IS_SUSP(tr), "not suspended");
*trp = NULL;
(void) chSchReadyI(tr, msg);
}
}
/**
* @brief Suspends the invoking thread for the specified time.
*
* @param[in] timeout the delay in system ticks
*
* @api
*/
void chThdSleep(systime_t timeout) {
chSysLock();
chThdSleepS(timeout);
chSysUnlock();
}
/**
* @brief Suspends the invoking thread until the system time arrives to the
* specified value.
*
* @param[in] abstime absolute system time
*
* @api
*/
void chThdSleepUntil(systime_t abstime) {
chSysLock();
chThdSleepUntilS(abstime);
chSysUnlock();
}
/**
* @brief Performs a wait operation on a semaphore with timeout specification.
*
* @param[in] sp pointer to a @p semaphore_t structure
* @param[in] timeout the number of ticks before the operation timeouts,
* the following special values are allowed:
* - @a TIME_IMMEDIATE immediate timeout.
* - @a TIME_INFINITE no timeout.
* .
* @return A message specifying how the invoking thread has been
* released from the semaphore.
* @retval NIL_MSG_OK if the thread has not stopped on the semaphore or the
* semaphore has been signaled.
* @retval NIL_MSG_RST if the semaphore has been reset using @p chSemReset().
* @retval NIL_MSG_TMO if the semaphore has not been signaled or reset within
* the specified timeout.
*
* @api
*/
msg_t chSemWaitTimeout(semaphore_t *sp, systime_t timeout) {
msg_t msg;
chSysLock();
msg = chSemWaitTimeoutS(sp, timeout);
chSysUnlock();
return msg;
}
/**
* @brief Performs a wait operation on a semaphore with timeout specification.
*
* @param[in] sp pointer to a @p semaphore_t structure
* @param[in] timeout the number of ticks before the operation timeouts,
* the following special values are allowed:
* - @a TIME_IMMEDIATE immediate timeout.
* - @a TIME_INFINITE no timeout.
* .
* @return A message specifying how the invoking thread has been
* released from the semaphore.
* @retval NIL_MSG_OK if the thread has not stopped on the semaphore or the
* semaphore has been signaled.
* @retval NIL_MSG_RST if the semaphore has been reset using @p chSemReset().
* @retval NIL_MSG_TMO if the semaphore has not been signaled or reset within
* the specified timeout.
*
* @sclass
*/
msg_t chSemWaitTimeoutS(semaphore_t *sp, systime_t timeout) {
/* Note, the semaphore counter is a volatile variable so accesses are
manually optimized.*/
cnt_t cnt = sp->cnt;
if (cnt <= (cnt_t)0) {
if (TIME_IMMEDIATE == timeout) {
return MSG_TIMEOUT;
}
sp->cnt = cnt - (cnt_t)1;
nil.current->u1.semp = sp;
return chSchGoSleepTimeoutS(NIL_STATE_WTSEM, timeout);
}
sp->cnt = cnt - (cnt_t)1;
return MSG_OK;
}
/**
* @brief Performs a signal operation on a semaphore.
*
* @param[in] sp pointer to a @p semaphore_t structure
*
* @api
*/
void chSemSignal(semaphore_t *sp) {
chSysLock();
chSemSignalI(sp);
chSchRescheduleS();
chSysUnlock();
}
/**
* @brief Performs a signal operation on a semaphore.
* @post This function does not reschedule so a call to a rescheduling
* function must be performed before unlocking the kernel. Note that
* interrupt handlers always reschedule on exit so an explicit
* reschedule must not be performed in ISRs.
*
* @param[in] sp pointer to a @p semaphore_t structure
*
* @iclass
*/
void chSemSignalI(semaphore_t *sp) {
if (++sp->cnt <= (cnt_t)0) {
thread_reference_t tr = nil.threads;
while (true) {
/* Is this thread waiting on this semaphore?*/
if (tr->u1.semp == sp) {
chDbgAssert(NIL_THD_IS_WTSEM(tr), "not waiting");
(void) chSchReadyI(tr, MSG_OK);
return;
}
tr++;
chDbgAssert(tr < &nil.threads[NIL_CFG_NUM_THREADS],
"pointer out of range");
}
}
}
/**
* @brief Performs a reset operation on the semaphore.
* @post After invoking this function all the threads waiting on the
* semaphore, if any, are released and the semaphore counter is set
* to the specified, non negative, value.
*
* @param[in] sp pointer to a @p semaphore_t structure
* @param[in] n the new value of the semaphore counter. The value must
* be non-negative.
*
* @api
*/
void chSemReset(semaphore_t *sp, cnt_t n) {
chSysLock();
chSemResetI(sp, n);
chSchRescheduleS();
chSysUnlock();
}
/**
* @brief Performs a reset operation on the semaphore.
* @post After invoking this function all the threads waiting on the
* semaphore, if any, are released and the semaphore counter is set
* to the specified, non negative, value.
* @post This function does not reschedule so a call to a rescheduling
* function must be performed before unlocking the kernel. Note that
* interrupt handlers always reschedule on exit so an explicit
* reschedule must not be performed in ISRs.
*
* @param[in] sp pointer to a @p semaphore_t structure
* @param[in] n the new value of the semaphore counter. The value must
* be non-negative.
*
* @iclass
*/
void chSemResetI(semaphore_t *sp, cnt_t n) {
thread_t *tp;
cnt_t cnt;
cnt = sp->cnt;
sp->cnt = n;
tp = nil.threads;
while (cnt < (cnt_t)0) {
chDbgAssert(tp < &nil.threads[NIL_CFG_NUM_THREADS],
"pointer out of range");
/* Is this thread waiting on this semaphore?*/
if (tp->u1.semp == sp) {
chDbgAssert(NIL_THD_IS_WTSEM(tp), "not waiting");
cnt++;
(void) chSchReadyI(tp, MSG_RESET);
}
tp++;
}
}
#if (NIL_CFG_USE_EVENTS == TRUE) || defined(__DOXYGEN__)
/**
* @brief Adds a set of event flags directly to the specified @p thread_t.
*
* @param[in] tp the thread to be signaled
* @param[in] mask the event flags set to be ORed
*
* @api
*/
void chEvtSignal(thread_t *tp, eventmask_t mask) {
chSysLock();
chEvtSignalI(tp, mask);
chSchRescheduleS();
chSysUnlock();
}
/**
* @brief Adds a set of event flags directly to the specified @p thread_t.
* @post This function does not reschedule so a call to a rescheduling
* function must be performed before unlocking the kernel. Note that
* interrupt handlers always reschedule on exit so an explicit
* reschedule must not be performed in ISRs.
*
* @param[in] tp the thread to be signaled
* @param[in] mask the event flags set to be ORed
*
* @iclass
*/
void chEvtSignalI(thread_t *tp, eventmask_t mask) {
tp->epmask |= mask;
if (NIL_THD_IS_WTOREVT(tp) &&
((tp->epmask & tp->u1.ewmask) != (eventmask_t)0)) {
(void) chSchReadyI(tp, MSG_OK);
}
}
/**
* @brief Waits for any of the specified events.
* @details The function waits for any event among those specified in
* @p mask to become pending then the events are cleared and
* returned.
*
* @param[in] mask mask of the event flags that the function should wait
* for, @p ALL_EVENTS enables all the events
* @param[in] timeout the number of ticks before the operation timeouts,
* the following special values are allowed:
* - @a TIME_IMMEDIATE immediate timeout.
* - @a TIME_INFINITE no timeout.
* .
* @return The mask of the served and cleared events.
* @retval 0 if the operation has timed out.
*
* @api
*/
eventmask_t chEvtWaitAnyTimeout(eventmask_t mask, systime_t timeout) {
eventmask_t m;
chSysLock();
m = chEvtWaitAnyTimeoutS(mask, timeout);
chSysUnlock();
return m;
}
/**
* @brief Waits for any of the specified events.
* @details The function waits for any event among those specified in
* @p mask to become pending then the events are cleared and
* returned.
*
* @param[in] mask mask of the event flags that the function should wait
* for, @p ALL_EVENTS enables all the events
* @param[in] timeout the number of ticks before the operation timeouts,
* the following special values are allowed:
* - @a TIME_IMMEDIATE immediate timeout.
* - @a TIME_INFINITE no timeout.
* .
* @return The mask of the served and cleared events.
* @retval 0 if the operation has timed out.
*
* @sclass
*/
eventmask_t chEvtWaitAnyTimeoutS(eventmask_t mask, systime_t timeout) {
thread_t *ctp = nil.current;
eventmask_t m;
if ((m = (ctp->epmask & mask)) == (eventmask_t)0) {
if (TIME_IMMEDIATE == timeout) {
chSysUnlock();
return (eventmask_t)0;
}
ctp->u1.ewmask = mask;
if (chSchGoSleepTimeoutS(NIL_STATE_WTOREVT, timeout) < MSG_OK) {
chSysUnlock();
return (eventmask_t)0;
}
m = ctp->epmask & mask;
}
ctp->epmask &= ~m;
return m;
}
#endif /* NIL_CFG_USE_EVENTS == TRUE */
/** @} */

View File

@ -1,179 +0,0 @@
/*
ChibiOS - Copyright (C) 2006..2015 Giovanni Di Sirio
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
*/
/**
* @file nilconf.h
* @brief Configuration file template.
* @details A copy of this file must be placed in each project directory, it
* contains the application specific kernel settings.
*
* @addtogroup NIL_CONFIG
* @details Kernel related settings and hooks.
* @{
*/
#ifndef _NILCONF_H_
#define _NILCONF_H_
/*===========================================================================*/
/**
* @name Kernel parameters and options
* @{
*/
/*===========================================================================*/
/**
* @brief Number of user threads in the application.
* @note This number is not inclusive of the idle thread which is
* Implicitly handled.
*/
#define NIL_CFG_NUM_THREADS 1
/** @} */
/*===========================================================================*/
/**
* @name System timer settings
* @{
*/
/*===========================================================================*/
/**
* @brief System time counter resolution.
* @note Allowed values are 16 or 32 bits.
*/
#define NIL_CFG_ST_RESOLUTION 32
/**
* @brief System tick frequency.
* @note This value together with the @p NIL_CFG_ST_RESOLUTION
* option defines the maximum amount of time allowed for
* timeouts.
*/
#define NIL_CFG_ST_FREQUENCY 50000
/**
* @brief Time delta constant for the tick-less mode.
* @note If this value is zero then the system uses the classic
* periodic tick. This value represents the minimum number
* of ticks that is safe to specify in a timeout directive.
* The value one is not valid, timeouts are rounded up to
* this value.
*/
#define NIL_CFG_ST_TIMEDELTA 2
/** @} */
/*===========================================================================*/
/**
* @name Subsystem options
* @{
*/
/*===========================================================================*/
/**
* @brief Events Flags APIs.
* @details If enabled then the event flags APIs are included in the kernel.
*
* @note The default is @p TRUE.
*/
#define NIL_CFG_USE_EVENTS TRUE
/** @} */
/*===========================================================================*/
/**
* @name Debug options
* @{
*/
/*===========================================================================*/
/**
* @brief System assertions.
*/
#define NIL_CFG_ENABLE_ASSERTS FALSE
/**
* @brief Stack check.
*/
#define NIL_CFG_ENABLE_STACK_CHECK FALSE
/** @} */
/*===========================================================================*/
/**
* @name Kernel hooks
* @{
*/
/*===========================================================================*/
/**
* @brief System initialization hook.
*/
#if !defined(NIL_CFG_SYSTEM_INIT_HOOK) || defined(__DOXYGEN__)
#define NIL_CFG_SYSTEM_INIT_HOOK() { \
}
#endif
/**
* @brief Threads descriptor structure extension.
* @details User fields added to the end of the @p thread_t structure.
*/
#define NIL_CFG_THREAD_EXT_FIELDS \
/* Add threads custom fields here.*/
/**
* @brief Threads initialization hook.
*/
#define NIL_CFG_THREAD_EXT_INIT_HOOK(tr) { \
/* Add custom threads initialization code here.*/ \
}
/**
* @brief Idle thread enter hook.
* @note This hook is invoked within a critical zone, no OS functions
* should be invoked from here.
* @note This macro can be used to activate a power saving mode.
*/
#define NIL_CFG_IDLE_ENTER_HOOK() { \
}
/**
* @brief Idle thread leave hook.
* @note This hook is invoked within a critical zone, no OS functions
* should be invoked from here.
* @note This macro can be used to deactivate a power saving mode.
*/
#define NIL_CFG_IDLE_LEAVE_HOOK() { \
}
/**
* @brief System halt hook.
*/
#if !defined(NIL_CFG_SYSTEM_HALT_HOOK) || defined(__DOXYGEN__)
#define NIL_CFG_SYSTEM_HALT_HOOK(reason) { \
}
#endif
/** @} */
/*===========================================================================*/
/* Port-specific settings (override port settings defaulted in nilcore.h). */
/*===========================================================================*/
#endif /* _NILCONF_H_ */
/** @} */

View File

@ -1,54 +0,0 @@
/*
ChibiOS - Copyright (C) 2006..2015 Giovanni Di Sirio.
This file is part of ChibiOS.
ChibiOS is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 3 of the License, or
(at your option) any later version.
ChibiOS is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
/**
* @file templates/nilcore.c
* @brief Port code.
*
* @addtogroup NIL_CORE
* @{
*/
#include "nil.h"
/*===========================================================================*/
/* Module local definitions. */
/*===========================================================================*/
/*===========================================================================*/
/* Module exported variables. */
/*===========================================================================*/
/*===========================================================================*/
/* Module local types. */
/*===========================================================================*/
/*===========================================================================*/
/* Module local variables. */
/*===========================================================================*/
/*===========================================================================*/
/* Module local functions. */
/*===========================================================================*/
/*===========================================================================*/
/* Module exported functions. */
/*===========================================================================*/
/** @} */

View File

@ -1,379 +0,0 @@
/*
ChibiOS - Copyright (C) 2006..2015 Giovanni Di Sirio.
This file is part of ChibiOS.
ChibiOS is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 3 of the License, or
(at your option) any later version.
ChibiOS is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
/**
* @file templates/nilcore.h
* @brief Port macros and structures.
*
* @addtogroup NIL_CORE
* @{
*/
#ifndef _NILCORE_H_
#define _NILCORE_H_
/*===========================================================================*/
/* Module constants. */
/*===========================================================================*/
/**
* @name Architecture and Compiler
* @{
*/
/**
* @brief Macro defining the port architecture.
*/
#define PORT_ARCHITECTURE_XXX
/**
* @brief Name of the implemented architecture.
*/
#define PORT_ARCHITECTURE_NAME "XXX"
/**
* @brief Name of the architecture variant.
*/
#define PORT_CORE_VARIANT_NAME "XXXX-Y"
/**
* @brief Compiler name and version.
*/
#if defined(__GNUC__) || defined(__DOXYGEN__)
#define PORT_COMPILER_NAME "GCC " __VERSION__
#else
#error "unsupported compiler"
#endif
/**
* @brief Port-specific information string.
*/
#define PORT_INFO "port description"
/**
* @brief This port supports a realtime counter.
*/
#define PORT_SUPPORTS_RT FALSE
/** @} */
/*===========================================================================*/
/* Module pre-compile time settings. */
/*===========================================================================*/
/**
* @brief Per-thread stack overhead for interrupts servicing.
* @details This constant is used in the calculation of the correct working
* area size.
*/
#if !defined(PORT_INT_REQUIRED_STACK) || defined(__DOXYGEN__)
#define PORT_INT_REQUIRED_STACK 32
#endif
/**
* @brief Enables an alternative timer implementation.
* @details Usually the port uses a timer interface defined in the file
* @p nilcore_timer.h, if this option is enabled then the file
* @p nilcore_timer_alt.h is included instead.
*/
#if !defined(PORT_USE_ALT_TIMER)
#define PORT_USE_ALT_TIMER FALSE
#endif
/*===========================================================================*/
/* Derived constants and error checks. */
/*===========================================================================*/
/*===========================================================================*/
/* Module data structures and types. */
/*===========================================================================*/
/* The following code is not processed when the file is included from an
asm module.*/
#if !defined(_FROM_ASM_)
/**
* @brief Type of stack and memory alignment enforcement.
*/
typedef uint64_t stkalign_t;
/**
* @brief Interrupt saved context.
* @details This structure represents the stack frame saved during a
* preemption-capable interrupt handler.
*/
struct port_extctx {
uint32_t reg1;
uint32_t reg2;
};
/**
* @brief System saved context.
* @details This structure represents the inner stack frame during a context
* switch.
*/
struct port_intctx {
uint32_t reg3;
uint32_t reg4;
};
#endif /* !defined(_FROM_ASM_) */
/*===========================================================================*/
/* Module macros. */
/*===========================================================================*/
/**
* @brief Platform dependent thread stack setup.
* @details This code usually setup the context switching frame represented
* by an @p port_intctx structure.
*/
#define PORT_SETUP_CONTEXT(tp, wend, pf, arg) do { \
(void)(tp); \
(void)(wend); \
(void)(pf); \
(void)(arg); \
} while (false)
/**
* @brief Computes the thread working area global size.
* @note There is no need to perform alignments in this macro.
*/
#define PORT_WA_SIZE(n) (sizeof(struct port_intctx) + \
sizeof(struct port_extctx) + \
(size_t)(n) + \
(size_t)(PORT_INT_REQUIRED_STACK))
/**
* @brief Priority level verification macro.
*/
#define PORT_IRQ_IS_VALID_PRIORITY(n) false
/**
* @brief Priority level verification macro.
*/
#define PORT_IRQ_IS_VALID_KERNEL_PRIORITY(n) false
/**
* @brief IRQ prologue code.
* @details This macro must be inserted at the start of all IRQ handlers
* enabled to invoke system APIs.
*/
#define PORT_IRQ_PROLOGUE()
/**
* @brief IRQ epilogue code.
* @details This macro must be inserted at the end of all IRQ handlers
* enabled to invoke system APIs.
*/
#define PORT_IRQ_EPILOGUE() _port_irq_epilogue()
/**
* @brief IRQ handler function declaration.
* @note @p id can be a function name or a vector number depending on the
* port implementation.
*/
#define PORT_IRQ_HANDLER(id) void id(void)
/**
* @brief Fast IRQ handler function declaration.
* @note @p id can be a function name or a vector number depending on the
* port implementation.
*/
#define PORT_FAST_IRQ_HANDLER(id) void id(void)
/**
* @brief Performs a context switch between two threads.
* @details This is the most critical code in any port, this function
* is responsible for the context switch between 2 threads.
* @note The implementation of this code affects <b>directly</b> the context
* switch performance so optimize here as much as you can.
*
* @param[in] ntp the thread to be switched in
* @param[in] otp the thread to be switched out
*/
#define port_switch(ntp, otp) do { \
(void)ntp; \
(void)otp; \
/*_port_switch(ntp, otp)*/ \
} while (false)
/*===========================================================================*/
/* External declarations. */
/*===========================================================================*/
/* The following code is not processed when the file is included from an
asm module.*/
#if !defined(_FROM_ASM_)
#ifdef __cplusplus
extern "C" {
#endif
void _port_irq_epilogue(void);
void _port_switch(thread_t *ntp, thread_t *otp);
void _port_thread_start(void);
#ifdef __cplusplus
}
#endif
#endif /* !defined(_FROM_ASM_) */
/*===========================================================================*/
/* Module inline functions. */
/*===========================================================================*/
/* The following code is not processed when the file is included from an
asm module.*/
#if !defined(_FROM_ASM_)
/**
* @brief Port-related initialization code.
*/
static inline void port_init(void) {
}
/**
* @brief Returns a word encoding the current interrupts status.
*
* @return The interrupts status.
*/
static inline syssts_t port_get_irq_status(void) {
return (syssts_t)0;
}
/**
* @brief Checks the interrupt status.
*
* @param[in] sts the interrupt status word
*
* @return The interrupt status.
* @retval false the word specified a disabled interrupts status.
* @retval true the word specified an enabled interrupts status.
*/
static inline bool port_irq_enabled(syssts_t sts) {
(void)sts;
return false;
}
/**
* @brief Determines the current execution context.
*
* @return The execution context.
* @retval false not running in ISR mode.
* @retval true running in ISR mode.
*/
static inline bool port_is_isr_context(void) {
return false;
}
/**
* @brief Kernel-lock action.
*/
static inline void port_lock(void) {
}
/**
* @brief Kernel-unlock action.
*/
static inline void port_unlock(void) {
}
/**
* @brief Kernel-lock action from an interrupt handler.
*/
static inline void port_lock_from_isr(void) {
}
/**
* @brief Kernel-unlock action from an interrupt handler.
*/
static inline void port_unlock_from_isr(void) {
}
/**
* @brief Disables all the interrupt sources.
*/
static inline void port_disable(void) {
}
/**
* @brief Disables the interrupt sources below kernel-level priority.
*/
static inline void port_suspend(void) {
}
/**
* @brief Enables all the interrupt sources.
*/
static inline void port_enable(void) {
}
/**
* @brief Enters an architecture-dependent IRQ-waiting mode.
* @details The function is meant to return when an interrupt becomes pending.
* The simplest implementation is an empty function or macro but this
* would not take advantage of architecture-specific power saving
* modes.
*/
static inline void port_wait_for_interrupt(void) {
}
/**
* @brief Returns the current value of the realtime counter.
*
* @return The realtime counter value.
*/
static inline rtcnt_t port_rt_get_counter_value(void) {
return (rtcnt_t)0;
}
#endif /* !defined(_FROM_ASM_) */
/*===========================================================================*/
/* Module late inclusions. */
/*===========================================================================*/
#if !defined(_FROM_ASM_)
#if NIL_CFG_ST_TIMEDELTA > 0
#if PORT_USE_ALT_TIMER == FALSE
#include "nilcore_timer.h"
#else
#include "nilcore_timer_alt.h"
#endif
#endif /* NIL_CFG_ST_TIMEDELTA > 0 */
#endif /* !defined(_FROM_ASM_) */
#endif /* _NILCORE_H_ */
/** @} */

View File

@ -1,120 +0,0 @@
/*
ChibiOS - Copyright (C) 2006..2015 Giovanni Di Sirio.
This file is part of ChibiOS.
ChibiOS is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 3 of the License, or
(at your option) any later version.
ChibiOS is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
/**
* @file templates/nilcore_timer.h
* @brief System timer header file.
*
* @addtogroup NIL_TIMER
* @{
*/
#ifndef _NILCORE_TIMER_H_
#define _NILCORE_TIMER_H_
/*===========================================================================*/
/* Module constants. */
/*===========================================================================*/
/*===========================================================================*/
/* Module pre-compile time settings. */
/*===========================================================================*/
/*===========================================================================*/
/* Derived constants and error checks. */
/*===========================================================================*/
/*===========================================================================*/
/* Module data structures and types. */
/*===========================================================================*/
/*===========================================================================*/
/* Module macros. */
/*===========================================================================*/
/*===========================================================================*/
/* External declarations. */
/*===========================================================================*/
/*===========================================================================*/
/* Module inline functions. */
/*===========================================================================*/
/**
* @brief Starts the alarm.
* @note Makes sure that no spurious alarms are triggered after
* this call.
*
* @param[in] abstime the time to be set for the first alarm
*
* @notapi
*/
static inline void port_timer_start_alarm(systime_t abstime) {
(void)abstime;
}
/**
* @brief Stops the alarm interrupt.
*
* @notapi
*/
static inline void port_timer_stop_alarm(void) {
}
/**
* @brief Sets the alarm time.
*
* @param[in] abstime the time to be set for the next alarm
*
* @notapi
*/
static inline void port_timer_set_alarm(systime_t abstime) {
(void)abstime;
}
/**
* @brief Returns the system time.
*
* @return The system time.
*
* @notapi
*/
static inline systime_t port_timer_get_time(void) {
return (systime_t)0;
}
/**
* @brief Returns the current alarm time.
*
* @return The currently set alarm time.
*
* @notapi
*/
static inline systime_t port_timer_get_alarm(void) {
return (systime_t)0;
}
#endif /* _NILCORE_TIMER_H_ */
/** @} */

View File

@ -1,96 +0,0 @@
/*
ChibiOS - Copyright (C) 2006..2015 Giovanni Di Sirio.
This file is part of ChibiOS.
ChibiOS is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 3 of the License, or
(at your option) any later version.
ChibiOS is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
/**
* @file templates/niltypes.h
* @brief Port system types.
*
* @addtogroup NIL_TYPES
* @{
*/
#ifndef _NILTYPES_H_
#define _NILTYPES_H_
#include <stddef.h>
#include <stdint.h>
#include <stdbool.h>
/**
* @name Common constants
*/
/**
* @brief Generic 'false' boolean constant.
*/
#if !defined(FALSE) || defined(__DOXYGEN__)
#define FALSE 0
#endif
/**
* @brief Generic 'true' boolean constant.
*/
#if !defined(TRUE) || defined(__DOXYGEN__)
#define TRUE 1
#endif
/** @} */
typedef uint32_t syssts_t; /**< System status word. */
typedef uint32_t rtcnt_t; /**< Realtime counter. */
typedef uint8_t tstate_t; /**< Thread state. */
typedef int32_t msg_t; /**< Inter-thread message. */
typedef uint32_t eventmask_t; /**< Mask of event identifiers. */
typedef int32_t cnt_t; /**< Generic signed counter. */
typedef uint32_t ucnt_t; /**< Generic unsigned counter. */
/**
* @brief Type of system time.
*/
#if (NIL_CFG_ST_RESOLUTION == 32) || defined(__DOXYGEN__)
typedef uint32_t systime_t;
#else
typedef uint16_t systime_t;
#endif
/**
* @brief ROM constant modifier.
* @note It is set to use the "const" keyword in this port.
*/
#define ROMCONST const
/**
* @brief Makes functions not inlineable.
* @note If the compiler does not support such attribute then the
* realtime counter precision could be degraded.
*/
#define NOINLINE __attribute__((noinline))
/**
* @brief Optimized thread function declaration macro.
*/
#define PORT_THD_FUNCTION(tname, arg) \
__attribute__((noreturn)) void tname(void *arg)
/**
* @brief Packed variable specifier.
*/
#define PACKED_VAR __attribute__((packed))
#endif /* _NILTYPES_H_ */
/** @} */

View File

@ -1,9 +0,0 @@
# List of all the ChibiOS/RT test files.
TESTSRC = ${CHIBIOS}/test/lib/ch_test.c \
${CHIBIOS}/test/nil/test_root.c \
${CHIBIOS}/test/nil/test_sequence_001.c \
${CHIBIOS}/test/nil/test_sequence_002.c
# Required include directories
TESTINC = ${CHIBIOS}/test/lib \
${CHIBIOS}/test/nil

Some files were not shown because too many files have changed in this diff Show More