Initial CMSIS-RTOS v2 API Documentation, Example and Component Viewer Description
diff --git a/ARM.CMSIS.pdsc b/ARM.CMSIS.pdsc
index 8902e2b..021c8bc 100644
--- a/ARM.CMSIS.pdsc
+++ b/ARM.CMSIS.pdsc
@@ -1361,7 +1361,7 @@
</RTE_Components_h>
<files>
<!-- CPU independent -->
- <file category="doc" name="CMSIS/Documentation/RTOS/html/_r_t_x_implementation.html"/>
+ <file category="doc" name="CMSIS/Documentation/RTOS/html/rtxImplementation.html"/>
<file category="header" name="CMSIS/RTOS/RTX/INC/cmsis_os.h"/>
<file category="source" attr="config" name="CMSIS/RTOS/RTX/Templates/RTX_Conf_CM.c" version="4.70.1"/>
@@ -1453,7 +1453,7 @@
</RTE_Components_h>
<files>
<!-- RTX documentation -->
- <!-- <file category="doc" name="CMSIS/Documentation/RTOS2/html/_r_t_x_implementation.html"/> -->
+ <file category="doc" name="CMSIS/Documentation/RTOS2/html/rtx5_impl.html"/>
<!-- RTX header files -->
<file category="header" name="CMSIS/RTOS2/Include/cmsis_os2.h"/>
@@ -1465,7 +1465,8 @@
<!-- RTX templates -->
<file category="source" attr="template" name="CMSIS/RTOS2/RTX/Template/main.c" select="CMSIS-RTOS 'main' function"/>
<file category="source" attr="template" name="CMSIS/RTOS2/RTX/Source/user_svc.c" select="CMSIS-RTOS User SVC"/>
-
+ <file category="other" name="CMSIS/RTOS2/RTX/RTX5.scvd"/>
+
<!-- RTX libraries (CPU and Compiler dependent) -->
<!-- ARMCC -->
<file category="library" condition="CM0_LE_ARMCC" name="CMSIS/RTOS2/RTX/Library/ARM/RTX_CM0.lib" src="CMSIS/RTOS2/RTX/Source"/>
@@ -1650,6 +1651,21 @@
<category>Getting Started</category>
</attributes>
</example>
+
+ <example name="CMSIS-RTOS2 Blinky" doc="Abstract.txt" folder="CMSIS/RTOS2/RTX/Examples/Simulation/RTX5_Blinky">
+ <description>CMSIS-RTOS2 Blinky example</description>
+ <board name="uVision Simulator" vendor="Keil"/>
+ <project>
+ <environment name="uv" load="Blinky.uvprojx"/>
+ </project>
+ <attributes>
+ <component Cclass="CMSIS" Cgroup="CORE"/>
+ <component Cclass="CMSIS" Cgroup="RTOS2"/>
+ <component Cclass="Device" Cgroup="Startup"/>
+ <category>Getting Started</category>
+ </attributes>
+ </example>
+
</examples>
</package>
diff --git a/CMSIS/DoxyGen/Core/src/MISRA.txt b/CMSIS/DoxyGen/Core/src/MISRA.txt
index ef0d061..d1a48ae 100644
--- a/CMSIS/DoxyGen/Core/src/MISRA.txt
+++ b/CMSIS/DoxyGen/Core/src/MISRA.txt
@@ -1,4 +1,4 @@
-/** \page CORE_MISRA_Exceptions_pg MISRA-C:2004 Compliance Exceptions
+/** \page coreMISRA_Exceptions_pg MISRA-C:2004 Compliance Exceptions
CMSIS-CORE uses the common coding rules for CMSIS components that are documented under
<a href="../../General/html/index.html"><b>Introduction</b></a>.
diff --git a/CMSIS/DoxyGen/Core/src/Overview.txt b/CMSIS/DoxyGen/Core/src/Overview.txt
index 7459fd1..c9f3753 100644
--- a/CMSIS/DoxyGen/Core/src/Overview.txt
+++ b/CMSIS/DoxyGen/Core/src/Overview.txt
@@ -11,10 +11,10 @@
The following sections provide details about the CMSIS-CORE:
- - \ref Using_pg describes the project setup and shows a simple program example.
- - \ref Using_TrustZone_pg "Using TrustZone® for ARMv8-M" describes how to use the security extensions available in the ARMv8-M architecture.
- - \ref Templates_pg describes the files of the CMSIS-CORE in detail and explains how to adapt template files provided by ARM to silicon vendor devices.
- - \ref CORE_MISRA_Exceptions_pg describes the violations to the MISRA standard.
+ - \ref using_pg describes the project setup and shows a simple program example.
+ - \ref using_TrustZone_pg "Using TrustZone® for ARMv8-M" describes how to use the security extensions available in the ARMv8-M architecture.
+ - \ref templates_pg describes the files of the CMSIS-CORE in detail and explains how to adapt template files provided by ARM to silicon vendor devices.
+ - \ref coreMISRA_Exceptions_pg describes the violations to the MISRA standard.
- <a href="Modules.html">\b Reference </a> describe the features and functions of the \ref device_h_pg in detail.
- <a href="Annotated.html">\b Data \b Structures </a> describe the data structures of the \ref device_h_pg in detail.
@@ -28,8 +28,8 @@
|------------------------------|------------------------------------------------------------------------|
|\b CMSIS\\Documentation\\Core | This documentation |
|\b CMSIS\\Include | CMSIS-CORE header files (for example core_cm3.h, core_cmInstr.h, etc.) |
-|\b Device | \ref Using_ARM_pg "ARM reference implementations" of Cortex-M devices |
-|\b Device\\\_Template_Vendor | \ref Templates_pg for extension by silicon vendors |
+|\b Device | \ref using_ARM_pg "ARM reference implementations" of Cortex-M devices |
+|\b Device\\\_Template_Vendor | \ref templates_pg for extension by silicon vendors |
<hr>
@@ -56,7 +56,7 @@
\section tested_tools_sec Tested and Verified Toolchains
-The CMSIS-CORE \ref Templates_pg supplied by ARM have been tested and verified with the following toolchains:
+The CMSIS-CORE \ref templates_pg supplied by ARM have been tested and verified with the following toolchains:
\todo add version information for ARMCC compilers, verify compiler versions
- ARM: MDK-ARM Version 5.16
- GNU: GNU Tools ARM Embedded 4.9 2015.q2
@@ -200,7 +200,7 @@
<td>V3.00</td>
<td>Added support for GNU GCC ARM Embedded Compiler. \n
Added function \ref __ROR.\n
- Added \ref RegMap_pg for TPIU, DWT. \n
+ Added \ref regMap_pg for TPIU, DWT. \n
Added support for \ref core_config_sect "SC000 and SC300 processors".\n
Corrected \ref ITM_SendChar function. \n
Corrected the functions \ref __STREXB, \ref __STREXH, \ref __STREXW for the GNU GCC compiler section. \n
diff --git a/CMSIS/DoxyGen/Core/src/Ref_NVIC.txt b/CMSIS/DoxyGen/Core/src/Ref_NVIC.txt
index 98fa942..5a30e9b 100644
--- a/CMSIS/DoxyGen/Core/src/Ref_NVIC.txt
+++ b/CMSIS/DoxyGen/Core/src/Ref_NVIC.txt
@@ -173,7 +173,7 @@
============
The Vector Table defines the entry addresses of the processor exceptions and the
device specific interrupts. It is typically located at the beginning of the
-program memory, however \ref Using_VTOR_pg it can be relocated to RAM. The symbol
+program memory, however \ref using_VTOR_pg it can be relocated to RAM. The symbol
<b>__Vectors</b> is the address of the vector table in the startup code and the
register <b>SCB->VTOR</b> holds the start address of the vector table.
@@ -751,7 +751,7 @@
\param [in] vector Address of new interrupt handler function
\remarks
- - Usage of this function requires vector relocation to RAM. Refer to \ref Using_VTOR_pg for more information.
+ - Usage of this function requires vector relocation to RAM. Refer to \ref using_VTOR_pg for more information.
- For using this function with Cortex-M0+ processor based devices, the SBC->VTOR register must be implemented.
\sa
diff --git a/CMSIS/DoxyGen/Core/src/RegMap_CMSIS2ARM_Doc.txt b/CMSIS/DoxyGen/Core/src/RegMap_CMSIS2ARM_Doc.txt
index 28b2fef..65d78be 100644
--- a/CMSIS/DoxyGen/Core/src/RegMap_CMSIS2ARM_Doc.txt
+++ b/CMSIS/DoxyGen/Core/src/RegMap_CMSIS2ARM_Doc.txt
@@ -1,5 +1,5 @@
/**
-\page RegMap_pg Register Mapping
+\page regMap_pg Register Mapping
\details
diff --git a/CMSIS/DoxyGen/Core/src/Template.txt b/CMSIS/DoxyGen/Core/src/Template.txt
index d6af2bd..eaa5fc6 100644
--- a/CMSIS/DoxyGen/Core/src/Template.txt
+++ b/CMSIS/DoxyGen/Core/src/Template.txt
@@ -1,5 +1,5 @@
/**
-\page Templates_pg Template Files
+\page templates_pg Template Files
\details
diff --git a/CMSIS/DoxyGen/Core/src/Using.txt b/CMSIS/DoxyGen/Core/src/Using.txt
index 573d6288..5cd2f8a 100644
--- a/CMSIS/DoxyGen/Core/src/Using.txt
+++ b/CMSIS/DoxyGen/Core/src/Using.txt
@@ -1,5 +1,5 @@
/**
-\page Using_pg Using CMSIS in Embedded Applications
+\page using_pg Using CMSIS in Embedded Applications
\details
@@ -61,17 +61,17 @@
</table>
-\note The silicon vendors create these device-specific CMSIS-CORE files based on \ref Templates_pg provide by ARM.
+\note The silicon vendors create these device-specific CMSIS-CORE files based on \ref templates_pg provide by ARM.
Thereafter, the functions described under <a href="Modules.html">\b Reference </a> can be used in the application.
\b Examples
- - \subpage Using_CMSIS is a simple example that shows the usage of the CMSIS layer.
- - \subpage Using_VTOR_pg shows how to remap the interrupt vector table.
- - \subpage Using_ARM_pg explains how to use CMSIS-CORE for ARM processors.
+ - \subpage using_CMSIS is a simple example that shows the usage of the CMSIS layer.
+ - \subpage using_VTOR_pg shows how to remap the interrupt vector table.
+ - \subpage using_ARM_pg explains how to use CMSIS-CORE for ARM processors.
-\page Using_CMSIS Basic CMSIS Example
+\page using_CMSIS Basic CMSIS Example
A typical example for using the CMSIS layer is provided below. The example is based on a STM32F10x Device.
@@ -125,7 +125,7 @@
}
\endcode
-\page Using_VTOR_pg Using Interrupt Vector Remap
+\page using_VTOR_pg Using Interrupt Vector Remap
Most Cortex-M processors provide VTOR register for remapping interrupt vectors. The following example shows
a typical use case where the interrupt vectors are copied to RAM and the SysTick_Handler is replaced.
@@ -184,7 +184,7 @@
}
\endcode
-\page Using_ARM_pg Using CMSIS with generic ARM Processors
+\page using_ARM_pg Using CMSIS with generic ARM Processors
ARM provides CMSIS-CORE files for the supported ARM Processors and for various compiler vendors.
These files can be used when standard ARM processors should be used in a project.
@@ -247,7 +247,7 @@
</tr>
</table>
-\section Using_ARM_Lib_sec Create generic Libraries with CMSIS
+\section using_ARM_Lib_sec Create generic Libraries with CMSIS
The CMSIS Processor and Core Peripheral files allow also to create generic libraries.
The <a href="../../DSP/html/index.html">\b CMSIS-DSP </a> Libraries are an example for such a generic library.
diff --git a/CMSIS/DoxyGen/Core/src/UsingTrustZone.txt b/CMSIS/DoxyGen/Core/src/UsingTrustZone.txt
index 3819c1f..21944ee 100644
--- a/CMSIS/DoxyGen/Core/src/UsingTrustZone.txt
+++ b/CMSIS/DoxyGen/Core/src/UsingTrustZone.txt
@@ -1,5 +1,5 @@
/**
-\page Using_TrustZone_pg Using TrustZone for ARMv8-M
+\page using_TrustZone_pg Using TrustZone for ARMv8-M
\details
@@ -21,13 +21,13 @@
- postfix \b _S indicates a hardware resource that belongs to the Secure state.
-\section UseCase_TrustZone Simplified Use Case with TrustZone
+\section useCase_TrustZone Simplified Use Case with TrustZone
An ARMv8-M TrustZone enabled device has restricted access for data, code, and I/O access to trusted
software that runs in the Secure state. Typical applications are secure IoT nodes, firmware IP protection,
or multi-party embedded software deployments.
-The figure <a href="#SimpleUseCase"><b>Simplified Use Case</b></a> shows and embedded application that is split into a <b>User Project</b>
+The figure <b>Simplified Use Case</b> shows and embedded application that is split into a <b>User Project</b>
(executed in Non-secure state) and a <b>Firmware Project</b> (executed in Secure state).
- <b>System Start:</b> after power on or reset, an ARMv8-M system starts code execution in the <b>Secure state</b>. The access rights for the <b>Non-secure state</b> is configured.
@@ -36,8 +36,7 @@
- <b>Firmware callbacks:</b> code running in the <b>Secure state</b> can execute code in the <b>Non-secure state</b> using call-back function pointers. For example, a communication stack (protected firmware) could use an I/O driver that is configured in user space.
-\anchor SimpleUseCase
-\image html "SimpleUseCase.png" "Simplified Use Case"
+<img id="SimpleUseCase" src="SimpleUseCase.png"><CENTER><b>Simplified Use Case</b></CENTER>
Program execution in the <b>Secure state</b> is further protected by TrustZone hardware from software failures.
For example, an ARMv8-M system may implement two independent SYSTICK timers which allows to stop code execution
@@ -66,8 +65,7 @@
This interrupt assignment is controlled during <b>Secure state</b> code execution via the NVIC
(nested vector interrupt controller).
-\anchor MemoryMap_S
-\image html "MemoryMap_S.png" "Secure Memory Map"
+<img id="MemoryMap_S" src="MemoryMap_S.png"><CENTER><b>Secure Memory Map</b></CENTER>
The figure <a href="#MemoryMap_NS"><b>Non-Secure Memory Map</b></a> shows the memory view for the Non-secure state. This memory view is identical
to the traditional Cortex-M memory map. Access to any secure memory or peripheral space triggers the secure exception
@@ -76,8 +74,10 @@
The \ref partition_h_pg defines the initial setup of the <a href="#MemoryMap_NS"><b>Non-Secure Memory Map</b></a> during system start in the Secure state
(refer to functions \ref SystemInit and \ref TZ_SAU_Setup).
+<!-- <img id="MemoryMap_NS" src="MemoryMap_NS.png"><CENTER><b>Non-Secure Memory Map</b></CENTER> -->
+
\anchor MemoryMap_NS
-\image html "MemoryMap_NS.png" "Non-Secure Memory Map"
+\image html "MemoryMap_NS.png" "Non-Secure Memory Map"
The figure <b>Registers</b> shows the register view of the ARMv8-M system with TrustZone. As the general purpose registers
are can be accessed from any state (secure or non-secure), function calls between the states use these registers for parameter
@@ -109,7 +109,7 @@
\image html "CMSIS_TZ_files.png" "CMSIS with extensions for TrustZone"
\note
-Refer to \ref Using_pg for a general description of the CMSIS-CORE files.
+Refer to \ref using_pg for a general description of the CMSIS-CORE files.
*/
diff --git a/CMSIS/DoxyGen/Doxygen_Templates/_cp_search.bat b/CMSIS/DoxyGen/Doxygen_Templates/_cp_search.bat
index 2d81675..47735ce 100644
--- a/CMSIS/DoxyGen/Doxygen_Templates/_cp_search.bat
+++ b/CMSIS/DoxyGen/Doxygen_Templates/_cp_search.bat
@@ -4,4 +4,5 @@
copy /Y search.css ..\DSP\html\search\.
copy /Y search.css ..\Pack\html\search\.
copy /Y search.css ..\RTOS\html\search\.
+copy /Y search.css ..\RTOS2\html\search\.
copy /Y search.css ..\SVD\html\search\.
diff --git a/CMSIS/DoxyGen/Doxygen_Templates/cmsis.css b/CMSIS/DoxyGen/Doxygen_Templates/cmsis.css
index 293d0d0..bba1010 100644
--- a/CMSIS/DoxyGen/Doxygen_Templates/cmsis.css
+++ b/CMSIS/DoxyGen/Doxygen_Templates/cmsis.css
@@ -141,7 +141,20 @@
font-weight: bold;
}
+div.new
+{
+ background-color:#ccffcc; /* light green */
+}
+div.mod
+{
+ background-color:#ffe6cc; /* light amber */
+}
+
+div.del
+{
+ background-color:#ffcccc; /* light red */
+}
/* @group Heading Levels */
diff --git a/CMSIS/DoxyGen/Driver/src/General.txt b/CMSIS/DoxyGen/Driver/src/General.txt
index 46e710b..3f54ad6 100644
--- a/CMSIS/DoxyGen/Driver/src/General.txt
+++ b/CMSIS/DoxyGen/Driver/src/General.txt
@@ -69,7 +69,7 @@
<td>2.03</td>
<td>Modifications compared to Version 2.02:
- Added: CAN API for an interface to CAN peripherals
- - Added: Overview of the \ref DriverValidation "CMSIS-Driver Validation" Software Pack.
+ - Added: Overview of the \ref driverValidation "CMSIS-Driver Validation" Software Pack.
- Enhanced: documentation and clarified behavior of the \ref CallSequence.
</td>
</tr>
@@ -93,7 +93,7 @@
/*=======0=========1=========2=========3=========4=========5=========6=========7=========8=========9=========0=========1====*/
/**
-\page TheoryOperation Theory of Operation
+\page theoryOperation Theory of Operation
[TOC]
@@ -305,7 +305,7 @@
\section DriverConfiguration Driver Configuration
-For a device family, the drivers may be configurable. The \ref ReferenceImplementation stores configuration options in a
+For a device family, the drivers may be configurable. The \ref referenceImplementation stores configuration options in a
central file with the name \b RTE_Device.h. However, the configuration of the drivers itself is not part of the CMSIS-Driver
specification.
@@ -318,13 +318,13 @@
/*=======0=========1=========2=========3=========4=========5=========6=========7=========8=========9=========0=========1====*/
/**
-\page ReferenceImplementation Reference Implementation
+\page referenceImplementation Reference Implementation
The API of the CMSIS-Drivers is published in the \ref DriverHeaderFiles.
To simplify the development of a CMSIS-Driver both \ref DriverTemplates and \ref DriverExamples are provided.
-ARM offers also a Software Pack for CMSIS-Driver Validation as described in \ref DriverValidation.
+ARM offers also a Software Pack for CMSIS-Driver Validation as described in \ref driverValidation.
\section DriverHeaderFiles Driver Header Files
@@ -410,7 +410,7 @@
/*=======0=========1=========2=========3=========4=========5=========6=========7=========8=========9=========0=========1====*/
/**
-\page DriverValidation Driver Validation
+\page driverValidation Driver Validation
ARM offers a <a href="http://www.keil.com/pack/doc/CMSIS/DV/html/index.html" target=_blank>CMSIS-Driver Validation</a>
Software Pack. The <b>ARM::CMSIS-Driver_Validation</b> Pack contains the following:
diff --git a/CMSIS/DoxyGen/General/src/introduction.txt b/CMSIS/DoxyGen/General/src/introduction.txt
index 1aeb861..0318f9d 100644
--- a/CMSIS/DoxyGen/General/src/introduction.txt
+++ b/CMSIS/DoxyGen/General/src/introduction.txt
@@ -138,7 +138,7 @@
/*=======0=========1=========2=========3=========4=========5=========6=========7=========8=========9=========0=========1====*/
/**
-\page CM_revisionHistory Revision History
+\page cm_revisionHistory Revision History
The following table shows the overall high-level history of the various CMSIS releases.
diff --git a/CMSIS/DoxyGen/Pack/src/General.txt b/CMSIS/DoxyGen/Pack/src/General.txt
index a8a8dba..ef2cd2f 100644
--- a/CMSIS/DoxyGen/Pack/src/General.txt
+++ b/CMSIS/DoxyGen/Pack/src/General.txt
@@ -3,7 +3,7 @@
\mainpage
<b>CMSIS-Pack</b> describes a delivery mechanism for software components, device parameters, and evaluation board
-support. The XML-based package description (PDSC) file describes the content of a \ref CP_SWComponents "Software Pack"
+support. The XML-based package description (PDSC) file describes the content of a \ref cp_SWComponents "Software Pack"
(file collection) that includes:
- Source code, header files, and software libraries
- Documentation and source code templates
@@ -14,9 +14,9 @@
for software development environments and describes the user and device relevant context for the files supplied within such
a Software Pack. A Software Pack can be used for multiple purposes (see below).
-After installing a \ref CP_SWComponents "Software Pack", all included software components are available to the development
-tools. \ref CP_Components "Software components" are a collection of source modules, header and configuration files as well as
-libraries. Packs containing software components can also include \ref CP_Examples and \ref CP_CodeTemplates.
+After installing a \ref cp_SWComponents "Software Pack", all included software components are available to the development
+tools. \ref cp_Components "Software components" are a collection of source modules, header and configuration files as well as
+libraries. Packs containing software components can also include \ref cp_Examples and \ref cp_CodeTemplates.
\section SWPackVariants Software Pack Use Cases
@@ -35,15 +35,15 @@
\note A Software Pack can address multiple use cases at the same time!
The following sections give you more details on the basics:
- - \ref CP_Packs explains the steps required for creating a Software Pack in general.
- - \ref CP_SWComponents gives detailed information on the contents of the PDSC file.
- - \ref CreatePack_DFP describes additional requirements of Device Family Packs (DFPs).
- - \ref CreatePackBoard covers the creation of Board Support Packs (BSPs).
- - \ref Pack_Example explains the Software Pack example that is part of the CMSIS Pack in more detail.
- - \ref CreatePackPublish shows the options for publishing a Pack.
- - \ref CreatePackUtil caters to programs that are useful during the creation of a Pack.
- - \ref PackFormat describes all XML elements that can be used in a PDSC file.
- - \ref ConfigWizard can be used to create GUI-like elements in development tools for configuration files.
+ - \ref cp_Packs explains the steps required for creating a Software Pack in general.
+ - \ref cp_SWComponents gives detailed information on the contents of the PDSC file.
+ - \ref createPack_DFP describes additional requirements of Device Family Packs (DFPs).
+ - \ref createPackBoard covers the creation of Board Support Packs (BSPs).
+ - \ref pack_Example explains the Software Pack example that is part of the CMSIS Pack in more detail.
+ - \ref createPackPublish shows the options for publishing a Pack.
+ - \ref createPackUtil caters to programs that are useful during the creation of a Pack.
+ - \ref packFormat describes all XML elements that can be used in a PDSC file.
+ - \ref configWizard can be used to create GUI-like elements in development tools for configuration files.
<hr>
@@ -52,9 +52,9 @@
Files relevant to CMSIS-Pack are present in the following \b ARM::CMSIS directories:
|Folder |Content |
|----------------|----------------------------------------------|
-|Utilities | \ref CreatePackUtil |
-|Pack\\Example | \ref Pack_Example "Reference Software Pack" |
-|Pack\\Tutorials | Tutorials for \ref CP_Packs "Creating Packs" |
+|Utilities | \ref createPackUtil |
+|Pack\\Example | \ref pack_Example "Reference Software Pack" |
+|Pack\\Tutorials | Tutorials for \ref cp_Packs "Creating Packs" |
<hr>
*/
@@ -113,7 +113,7 @@
automatically included in the project as part of the component.
- <em>Added</em> A generator command is optionally extended by a separate description of arguments
- <em>Updated</em> Vendor list
-- <em>Updated</em> Utility PackChk.exe to Version 1.3.0.0:
+- <em>Updated</em> Utility packChk.exe to Version 1.3.0.0:
- detect redefinitions of boards
- check presence of board image files
- check for duplicate device features
@@ -140,7 +140,7 @@
- <em>Removed</em> external RAMn and ROMn memory IDs in memory tag
- <em>Added</em> FileCategoryTypes in \<file> element for C, C++, Assembler, Linker
- <em>Extended</em> specification of \<require>, \<accept> and \<deny> with Cversion and Capiversion ranges
- - <em>Added</em> \ref CreatePackUtil and \ref PackChk for pack validation
+ - <em>Added</em> \ref createPackUtil and \ref packChk for pack validation
- <em>Added</em> documentation for the Example PACK based on LPC1800 Device Family
- <em>Refined</em> \<debug> element description
- Many clarifications in the documentation along with examples
diff --git a/CMSIS/DoxyGen/Pack/src/apis_schema.txt b/CMSIS/DoxyGen/Pack/src/apis_schema.txt
index 4d53faf..a296417 100644
--- a/CMSIS/DoxyGen/Pack/src/apis_schema.txt
+++ b/CMSIS/DoxyGen/Pack/src/apis_schema.txt
@@ -17,7 +17,7 @@
\section element_apis /package/apis
-This element is a grouping element for all application programming interfaces included in the \ref CP_SWComponents "Software Pack".
+This element is a grouping element for all application programming interfaces included in the \ref cp_SWComponents "Software Pack".
The element itself is optional. Only one such section can exist in a package.
\b Example:
diff --git a/CMSIS/DoxyGen/Pack/src/boards_schema.txt b/CMSIS/DoxyGen/Pack/src/boards_schema.txt
index 151f794..3634b01 100644
--- a/CMSIS/DoxyGen/Pack/src/boards_schema.txt
+++ b/CMSIS/DoxyGen/Pack/src/boards_schema.txt
@@ -89,7 +89,7 @@
\section element_board /package/boards/board
-This element provides information to specify the \ref CreatePackBoard "Board Support Package (BSP)". At least one board must be defined.
+This element provides information to specify the \ref createPackBoard "Board Support Package (BSP)". At least one board must be defined.
<table class="cmtable" summary="Element: Board">
<tr>
@@ -120,7 +120,7 @@
</tr>
<tr>
<td>revision</td>
- <td>Revision of the board that is suited to be used with the \ref CreatePackBoard "BSP".</td>
+ <td>Revision of the board that is suited to be used with the \ref createPackBoard "BSP".</td>
<td>xs:string</td>
<td>optional</td>
</tr>
diff --git a/CMSIS/DoxyGen/Pack/src/components_schema.txt b/CMSIS/DoxyGen/Pack/src/components_schema.txt
index 284873b..721e8c4 100644
--- a/CMSIS/DoxyGen/Pack/src/components_schema.txt
+++ b/CMSIS/DoxyGen/Pack/src/components_schema.txt
@@ -92,7 +92,7 @@
these attributes. Bundles ensure consistency of attributes across multiple interworking components and restrict the mix and
match of components within a Cclass from different Software Packs.
-An example of a <b>bundle</b> is shown in the \ref CP_BundleExample section where the bundle is used to deliver board
+An example of a <b>bundle</b> is shown in the \ref cp_BundleExample section where the bundle is used to deliver board
support files for a certain development platform.
\section Component_Files Component Files
@@ -107,7 +107,7 @@
note that header files that are used with the attribute \c "config" need to be stored separately from other header files
(for example in an extra directory) to avoid that due to the include path search order of the compiler, the unmodified
header file in the pack repository is found first and used by the compiler (creating unexpected results).
- - Source and header files that have the attribute \c "template" are part of \ref CP_CodeTemplates and can be added to a
+ - Source and header files that have the attribute \c "template" are part of \ref cp_CodeTemplates and can be added to a
project manually by the user.
The following image shows the dependency between the attribute and the display in a development environment:
diff --git a/CMSIS/DoxyGen/Pack/src/conditions_schema.txt b/CMSIS/DoxyGen/Pack/src/conditions_schema.txt
index 4bb4479..7d63dfb 100644
--- a/CMSIS/DoxyGen/Pack/src/conditions_schema.txt
+++ b/CMSIS/DoxyGen/Pack/src/conditions_schema.txt
@@ -1,7 +1,7 @@
/**
\page pdsc_conditions_pg /package/conditions element
-The grouping element \ref element_conditions contains all conditions defined for the \ref CP_SWComponents "Software Pack".
+The grouping element \ref element_conditions contains all conditions defined for the \ref cp_SWComponents "Software Pack".
A condition describes dependencies on device, processor, and tool attributes as well as the presence of other components.
The <b>conditions</b> are used to define AND and OR rules used to make components conditional and therefore only available under certain circumstances,
@@ -55,7 +55,7 @@
\section element_conditions /package/conditions
-This element groups all conditions used in the \ref CP_SWComponents "Software Pack".
+This element groups all conditions used in the \ref cp_SWComponents "Software Pack".
<table class="cmtable" summary="Element: Conditions">
<tr>
@@ -106,7 +106,7 @@
</tr>
<tr>
<td>id</td>
- <td>Condition identifier which is unique within a \ref CP_SWComponents "Software Pack". The condition identifier is referenced by other elements with the attribute \b condition.</td>
+ <td>Condition identifier which is unique within a \ref cp_SWComponents "Software Pack". The condition identifier is referenced by other elements with the attribute \b condition.</td>
<td>xs:string</td>
<td>required</td>
</tr>
diff --git a/CMSIS/DoxyGen/Pack/src/config_wizard.txt b/CMSIS/DoxyGen/Pack/src/config_wizard.txt
index cb12a41..d60b115 100644
--- a/CMSIS/DoxyGen/Pack/src/config_wizard.txt
+++ b/CMSIS/DoxyGen/Pack/src/config_wizard.txt
@@ -1,6 +1,6 @@
/**************************************************************************************************/
/**
-\page ConfigWizard Configuration Wizard Annotations
+\page configWizard Configuration Wizard Annotations
\section configWizard_annotations Annotation Rules
<b>Configuration Wizard Annotations</b> consist of annotation items and annotation modifiers. They create GUI-like elements
diff --git a/CMSIS/DoxyGen/Pack/src/devices_schema.txt b/CMSIS/DoxyGen/Pack/src/devices_schema.txt
index 8f36f48..98a8cc4 100644
--- a/CMSIS/DoxyGen/Pack/src/devices_schema.txt
+++ b/CMSIS/DoxyGen/Pack/src/devices_schema.txt
@@ -1,7 +1,7 @@
/**
\page pdsc_devices_pg /package/devices element
-The level \elem{devices} contains all devices for which support is provided by the \ref CP_SWComponents "Software Pack".
+The level \elem{devices} contains all devices for which support is provided by the \ref cp_SWComponents "Software Pack".
Devices can be organized in hierarchy groups to limit redundancy. The hierarchy levels are:
- \ref element_family "family": the attributes of a device family which includes also the processor.
@@ -691,7 +691,7 @@
</tr>
<tr>
<td>name</td>
- <td>Flash Programming Algorithm file including the path, which is relative to the root folder of the \ref CP_SWComponents "Software Pack".</td>
+ <td>Flash Programming Algorithm file including the path, which is relative to the root folder of the \ref cp_SWComponents "Software Pack".</td>
<td>xs:string</td>
<td>required</td>
</tr>
@@ -1436,7 +1436,7 @@
Elements of multi-processor devices can be associated with a specific processor using the attribute \elem{Pname}. If the information is relevant to
all processors, no processor must be specified in \elem{Pname}.
-\b First Example
+\b Example
\code
<package>
...
@@ -1451,14 +1451,6 @@
</package>
\endcode
-\b Second Example
-\code
-<device name="MCIMX7D">
- <processor Dcore="Cortex-A7" DcoreVersion="r0p5" Pname="Cortex-A7" Punits="2" />
- <processor Dcore="Cortex-M4" DcoreVersion="r0p1" Pname="Cortex-M4"/>
-</device>
-\endcode
-
<p> </p>
<table class="cmtable" summary="Element: processor">
@@ -1494,14 +1486,6 @@
<td>optional</td>
</tr>
<tr>
- <td>Punits</td>
- <td>Specifies the number of processor units in a symmetric multi-processor core (MPCore). <b>processor</b> is a
- single-core CPU if not specified.
- </td>
- <td>xs:unsignedInt</td>
- <td>optional</td>
- </tr>
- <tr>
<td>Dvendor</td>
<td>Specfies the device vendor using a predefined string. Use predefined values as listed in the table \ref DeviceVendorEnum "Device Vendor".</td>
<td>DeviceVendorEnum</td>
@@ -2132,7 +2116,7 @@
and is editable by the end-user. This file is read by the debugger after processing the global debug access variables.
By editing the values of the debug access variables, the end-user effectively controls the behavior of sequences.
The file can only assign new values but must not specify any new debug access variables.
- \ref ConfigWizard "Configuration Wizard Annotations" shall be used within the file to provide a graphical user interface
+ \ref configWizard "Configuration Wizard Annotations" shall be used within the file to provide a graphical user interface
for editing configuration options.
</td>
<td>xs:string</td>
@@ -3632,28 +3616,19 @@
elements can be defined which are either specific to a processor identified by attribute <b>Pname</b>, or which apply
to all connections.
-\b First \b Example
+\b Example
\code
-<device name="MCIMX7D">
- <processor Dcore="Cortex-A7" DcoreVersion="r0p5" Pname="Cortex-A7" Punits="2" />
- <processor Dcore="Cortex-M4" DcoreVersion="r0p1" Pname="Cortex-M4"/>
- ...
- <debug Pname="Cortex-A7" Punit="0" svd="SVD/iMX7D_A7.svd" __dp="0" __ap="1" address="0x80070000"/>
- <debug Pname="Cortex-A7" Punit="1" svd="SVD/iMX7D_A7.svd" __dp="0" __ap="1" address="0x80072000"/>
- <debug Pname="Cortex-M4" svd="SVD/iMX7D_M4.svd" __dp="0" __ap="4" defaultResetSequence="ResetHardware"/>
- ...
-</device>
-\endcode
-
-\b Second \b Example
-\code
-<device name="MCIMX6QPxxx">
- <processor Dcore="Cortex-A9" DcoreVersion="r4p1" Pname="Cortex-A9" Punits="4" />
- <debug Pname="Cortex-A9" Punit="0" svd="SVD/iMX6Q_A9.svd" __dp="0" __ap="1" address="0x82150000"/>
- <debug Pname="Cortex-A9" Punit="1" svd="SVD/iMX6Q_A9.svd" __dp="0" __ap="1" address="0x82152000"/>
- <debug Pname="Cortex-A9" Punit="2" svd="SVD/iMX6Q_A9.svd" __dp="0" __ap="1" address="0x82154000"/>
- <debug Pname="Cortex-A9" Punit="3" svd="SVD/iMX6Q_A9.svd" __dp="0" __ap="1" address="0x82156000"/>
-</device>
+<family Dfamily="LPC4300 Series" Dvendor="NXP:11">
+ ...
+ <debug Pname="Cortex-M4" __dp="0" __ap="0" svd="SVD/LPC43xx.svd">
+ ...
+ </debug>
+ ...
+ <debug Pname="Cortex-M0" __dp="1" __ap="0" svd="SVD/LPC43xx.svd">
+ ...
+ </debug>
+ ...
+</family>
\endcode
<p> </p>
@@ -3684,7 +3659,7 @@
<tr>
<td>Pname</td>
<td>
- Reference to a processor identifier as specified for a <b>processor</b> element. If <b>Pname</b> is set,
+ Reference to a processor identifier as specified for a <b>processor</b> element. If <b>Pname</b> is set
this <b>debug</b> element's settings and data patches only apply for target connections to the referenced
processor. Otherwise, they apply for all processors.
<b>This attribute must be set if defining multiple \em debug elements within the same section.</b>
@@ -3694,16 +3669,6 @@
<td>optional</td>
</tr>
<tr>
- <td>Punit</td>
- <td>
- Reference to a specific processor unit of a symmetric MPCore that the <b>debug</b> configuration applies to. <b>Punit</b> is
- a '0'-based index and must be less than <b>Punits</b> of <b>processor</b>. If <b>Punit</b> is not specified, the
- <b>debug</b> configuration applies to all processor units of the MPCore.
- </td>
- <td>xs:unsignedInt</td>
- <td>optional</td>
- </tr>
- <tr>
<td>__dp</td>
<td>
Default debug port ID to use for target accesses in this debug connection. The allowed values are
@@ -3734,28 +3699,6 @@
<td>optional</td>
</tr>
<tr>
- <td>address</td>
- <td>
- Base <b>address</b> of the CPU debug block referenced by <b>Pname</b> (and <b>Punit</b> if an MPCore system). Use in
- combination with attributes <b>_dp</b> and <b>_ap</b>. Mandatory if multiple CPU debug blocks are accessible via a
- single AP. Optional if an AP hosts a single CPU debug block. Then a debugger can determine its base address in by
- analyzing the ROM table behind <b>_dp</b> and <b>_ap</b>.
- </td>
- <td>NonNegativeInteger</td>
- <td>optional</td>
- </tr>
- <tr>
- <td>defaultResetSequence</td>
- <td>
- Default reset sequence that will be called for a device. Three reset sequences are defined by the CMSIS-Pack standard
- (\ref ResetSystem, \ref ResetProcessor, \ref ResetHardware). If you wish to use
- a custom default reset sequence, you need to create a \ref element_sequence "sequence" element and use its <b>name</b>
- as <b>defaultResetSequence</b>.
- </td>
- <td>xs:string</td>
- <td>optional</td>
- </tr>
- <tr>
<th>Child Elements</th>
<th>Description</th>
<th>Type</th>
diff --git a/CMSIS/DoxyGen/Pack/src/flash_algorithms.txt b/CMSIS/DoxyGen/Pack/src/flash_algorithms.txt
index 31c2117..bfb0e73 100644
--- a/CMSIS/DoxyGen/Pack/src/flash_algorithms.txt
+++ b/CMSIS/DoxyGen/Pack/src/flash_algorithms.txt
@@ -1,10 +1,10 @@
/**************************************************************************************************/
/**
-\page FlashAlgorithm Flash Programming Algorithms
+\page flashAlgorithm Flash Programming Algorithms
[TOC]
-<b>Flash Programming Algorithms</b> are a piece of software to erase or download applications to Flash devices. A \ref CreatePack_DFP
+<b>Flash Programming Algorithms</b> are a piece of software to erase or download applications to Flash devices. A \ref createPack_DFP
usually contains predefined Flash algorithms for programming the devices that are supported by the DFP. A template for
creating new algorithms are available in the <b>ARM:CMSIS</b> Pack. The following section describes the process in more detail.
@@ -35,7 +35,7 @@
<b>Options for Target</b> - \b Asm.
- The dialog \b Project - <b>Options for Target</b> - \b Linker defines the linker scatter file \b Target.lin. The error
L6305 is disabled with \c --diag_suppress \c L6305.
-- The \subpage AlgorithmFunc "Flash Algorithm Functions" section contains reference for all the available functions.
+- The \subpage algorithmFunc "Flash Algorithm Functions" section contains reference for all the available functions.
\anchor FlashPrg
FlashPrg.c
@@ -79,7 +79,7 @@
\section AddFPA Adding an Algorithm to a Pack
-The generated <b>*.FLM</b> file needs to be added to the \ref CreatePack_DFP, so that it is available to the tool user for programming
+The generated <b>*.FLM</b> file needs to be added to the \ref createPack_DFP, so that it is available to the tool user for programming
his device. Usually, a directory \b Flash is created and the algorithm is saved in this directory.
The algorithm is specified within the the \ref element_family level:
@@ -110,7 +110,7 @@
/**************************************************************************************************/
/**
-\page AlgorithmFunc Algorithm Functions
+\page algorithmFunc Algorithm Functions
The following functions are available for creating new Flash programming algorithms:
|Function Name |Indication|Description|
diff --git a/CMSIS/DoxyGen/Pack/src/pack_boards.txt b/CMSIS/DoxyGen/Pack/src/pack_boards.txt
index cc54233..a05b0b3 100644
--- a/CMSIS/DoxyGen/Pack/src/pack_boards.txt
+++ b/CMSIS/DoxyGen/Pack/src/pack_boards.txt
@@ -1,20 +1,20 @@
/*=======0=========1=========2=========3=========4=========5=========6=========7=========8=========9=========0=========1====*/
/**
-\page CreatePackBoard Pack with Board Support
+\page createPackBoard Pack with Board Support
-A \ref CP_SWComponents "Software Pack" that contains a \ref pdsc_boards_pg "<board>" element is called Board Support Pack (BSP).
+A \ref cp_SWComponents "Software Pack" that contains a \ref pdsc_boards_pg "<board>" element is called Board Support Pack (BSP).
A BSP may contain additional <b>Software Components</b>, <b>Example Projects</b>, as well as <b>Code Templates</b>. The typical
content of a BSP is:
- Source code, libraries, header/configuration files for the underlying hardware and documentation
(for example user manuals, getting started guides, and schematics).
-- \ref CP_Examples "Example Projects" that show the usage of the development board and its peripherals.
-- \ref CP_CodeTemplates "User Code Templates" that can be used as a starting point for using the development board or the
+- \ref cp_Examples "Example Projects" that show the usage of the development board and its peripherals.
+- \ref cp_CodeTemplates "User Code Templates" that can be used as a starting point for using the development board or the
mounted device.
This section is a tutorial that explains how to create a BSP.
Initially the PDSC file in the BSP only describes an evaluation board.
This BSP is then extended to contain also software components that interface with the hardware of the board.
-Example projects and code templates may be added as described in the section \ref CP_SWComponents.
+Example projects and code templates may be added as described in the section \ref cp_SWComponents.
BSP Use Cases
@@ -28,7 +28,7 @@
\image html BoardsSectionMCB1500.png "Board information on a web site extracted from a BSP"
-\section CP_SpecDevBoard Specify a Development Board
+\section cp_SpecDevBoard Specify a Development Board
<b>Preparations</b>
-# Install the Software Pack
@@ -43,7 +43,7 @@
-# Make sure that files/directories are not write protected (remove read-only flag).
-# Copy from the directory <b>\\CMSIS\\Utilities</b> available in the \b ARM::CMSIS Pack installation the following files
into your working directory:
- - PackChk.exe
+ - packChk.exe
- PACK.xsd
-# Open the \b MyVendor.MyBSP.pdsc file in an editor.
@@ -75,14 +75,14 @@
<b>01_Specify_Dev_Board</b> directory.
</li>
<li>
-Finally, save the PDSC file and generate the Pack file using the <b>gen_pack.bat</b> script. See \ref CP_GeneratePack for
+Finally, save the PDSC file and generate the Pack file using the <b>gen_pack.bat</b> script. See \ref cp_GeneratePack for
further details. Afterwards, install the Pack in your development tool.
\image html DevBoardDisplay.png "Display of development boards in development tools"
</li>
</ol>
-\note PackChk.exe will display \b M346 informations:
+\note packChk.exe will display \b M346 informations:
\verbatim
*** WARNING M346: .\Files\MyVendor.MyBSP.pdsc (Line 29)
Referenced device(s) in 'MyDevBoard' not found: 'ARMCM3'
@@ -94,7 +94,7 @@
add the ARM:CMSIS PDSC file to the checking process.
-\section CP_BundleExample Create a BSP Bundle
+\section cp_BundleExample Create a BSP Bundle
A bundle is basically a variant on the \c Cclass level. It specifies the attributes \c Cclass, \c Cversion and optionally
\c Cgroup and \c Cvendor for a collection of interdependent components. Components within a bundle inherit the attributes
@@ -106,7 +106,7 @@
directory in your working environment:
<ol>
<li>
-Add a \c \<conditions\> section in your PDSC with the following (the \ref CP_Conditions "conditions" section
+Add a \c \<conditions\> section in your PDSC with the following (the \ref cp_Conditions "conditions" section
provides more information on this step):
\code{.xml}
<condition id="ARM Cortex M3 Series">
@@ -121,7 +121,7 @@
\endcode
</li>
<li>
-Add a \c \<components\> section in your PDSC with the following (the \ref CP_Components "components" section
+Add a \c \<components\> section in your PDSC with the following (the \ref cp_Components "components" section
provides more information on this step):
\code{.xml}
<bundle Cbundle="MyDevBoardSupport" Cclass="Board Support" Cversion="1.0.1">
@@ -165,7 +165,7 @@
\endcode
</li>
<li>
-Finally, save the PDSC file and regenerate the Pack file using the \ref CP_GeneratePack "gen_pack.bat" script. Afterwards,
+Finally, save the PDSC file and regenerate the Pack file using the \ref cp_GeneratePack "gen_pack.bat" script. Afterwards,
install the Pack in your development tool and observe the differences to version 1.0.0.
\image html BSPBundleDisplay.png "BSP bundle display in development tools"
diff --git a/CMSIS/DoxyGen/Pack/src/pack_check.txt b/CMSIS/DoxyGen/Pack/src/pack_check.txt
index 8026638..2720809 100644
--- a/CMSIS/DoxyGen/Pack/src/pack_check.txt
+++ b/CMSIS/DoxyGen/Pack/src/pack_check.txt
@@ -1,11 +1,11 @@
/*=======0=========1=========2=========3=========4=========5=========6=========7=========8=========9=========0=========1====*/
/**
-\page PackChk PackChk.exe
+\page packChk packChk.exe
-\b PackChk.exe is a utility for validation of a Software Pack. It operates on the unzipped content of the Software Pack and
+\b packChk.exe is a utility for validation of a Software Pack. It operates on the unzipped content of the Software Pack and
is located in the directory <b>.\\CMSIS\\Utilities</b> of the <b>ARM::CMSIS</b> Pack.
-\b PackChk.exe performs the following operations:
+\b packChk.exe performs the following operations:
- Reads the content of the specified *.PDSC file. The path to this *.PDSC file is considered as root directory of the Software Pack.
- Verifies the existence of all files in the Software Pack that are referenced in the *.PDSC file.
- Checks for presence and correctness of mandatory elements such as \<vendor>, \<version>, etc.
@@ -21,13 +21,13 @@
Operation
---------
-\b PackChk.exe is invoked from the command line:\n
+\b packChk.exe is invoked from the command line:\n
\code
- PackChk.exe <pdsc_file> <options>
+ packChk.exe <pdsc_file> <options>
\endcode
\n
-<table class="cmtable" summary="PackChk Args">
+<table class="cmtable" summary="packChk Args">
<tr>
<th>\<options></th>
<th>Short Name</th>
@@ -47,7 +47,7 @@
<td>-s</td>
<td nowrap>Verify SVD files</td>
<td>Each SVD file referenced in the *.PDSC file is <a href="../../SVD/html/svd_validate_file_pg.html"><b>validated</b></a> with \b SVDConv.exe.
- With this option set, \b SVDConv.exe is invoked from the same directory as \b PackChk.exe.
+ With this option set, \b SVDConv.exe is invoked from the same directory as \b packChk.exe.
</td>
</tr>
<tr>
@@ -78,38 +78,38 @@
<b>Examples</b>
-Run \b PackChk.exe on the package description file called <b>MyVendor.MyPack.pdsc</b>. \b PackChk.exe verifies the file against the Software Pack that is located in the same directory.
+Run \b packChk.exe on the package description file called <b>MyVendor.MyPack.pdsc</b>. \b packChk.exe verifies the file against the Software Pack that is located in the same directory.
\verbatim
-PackChk.exe MyVendor.MyPack.pdsc
+packChk.exe MyVendor.MyPack.pdsc
\endverbatim
-Run \b PackChk.exe on the package description file called <b>MyVendor.MyPack.pdsc</b> in the current directory and try to resolve conditions using the ARM.CMSIS.pdsc file based in another directory.
+Run \b packChk.exe on the package description file called <b>MyVendor.MyPack.pdsc</b> in the current directory and try to resolve conditions using the ARM.CMSIS.pdsc file based in another directory.
\verbatim
-PackChk.exe MyVendor.MyPack.pdsc -i ..\..\PACK\ARM\CMSIS\ARM.CMSIS.pdsc
+packChk.exe MyVendor.MyPack.pdsc -i ..\..\PACK\ARM\CMSIS\ARM.CMSIS.pdsc
\endverbatim
-Run \b PackChk.exe on the package description file called <b>MyVendor.MVCM3.pdsc</b>, verify SVD files, verify the URL to the Pack Server, and generate a ASCII text file with the standardized name of the Software Pack.
+Run \b packChk.exe on the package description file called <b>MyVendor.MVCM3.pdsc</b>, verify SVD files, verify the URL to the Pack Server, and generate a ASCII text file with the standardized name of the Software Pack.
\verbatim
-PackChk.exe "MyVendor.MVCM3.pdsc" -s -u "http://www.myvendor.com/pack" -n packname.txt
+packChk.exe "MyVendor.MVCM3.pdsc" -s -u "http://www.myvendor.com/pack" -n packname.txt
\endverbatim
-Run \b PackChk.exe on the package description file called <b>MyVendor.MVCM3.pdsc</b>. Suppress validation messages M304 and M331.
+Run \b packChk.exe on the package description file called <b>MyVendor.MVCM3.pdsc</b>. Suppress validation messages M304 and M331.
\verbatim
-PackChk.exe MyVendor.MVCM3.pdsc -x M304 M331 // messages as a list
-PackChk.exe MyVendor.MVCM3.pdsc -x M304 -x M331 // option repeated
+packChk.exe MyVendor.MVCM3.pdsc -x M304 M331 // messages as a list
+packChk.exe MyVendor.MVCM3.pdsc -x M304 -x M331 // option repeated
\endverbatim
-\section PackChkMessages Error and Warning Messages
+\section packChkMessages Error and Warning Messages
[SVDConv.exe]: ../../SVD/html/svd__s_v_d_conv_pg.html
-The following table shows the errors and warnings issued by PackChk.
+The following table shows the errors and warnings issued by packChk.
Internal Errors
---------------
If you encounter one of the following errors, please send a problem report via email to cmsis@arm.com.
-<table class="cmtable" summary="PackChk Internal Msgs">
+<table class="cmtable" summary="packChk Internal Msgs">
<tr>
<th>Message Number</th>
<th>Type</th>
@@ -156,7 +156,7 @@
Invocation Errors
-----------------
-<table class="cmtable" summary="PackChk Invocation Msgs">
+<table class="cmtable" summary="packChk Invocation Msgs">
<tr>
<th>Message Number</th>
<th>Type</th>
@@ -170,7 +170,7 @@
<td>The list of arguments is too long. Verify if you have used one argument twice.</td>
</tr>
<tr><td>M202</td> <td>ERROR</td> <td>No PDSC input file specified</td>
- <td>Correct the command line. \b PackChk.exe expects a *.PDSC file name as input.</td>
+ <td>Correct the command line. \b packChk.exe expects a *.PDSC file name as input.</td>
</tr>
<tr><td>M203</td> <td>ERROR</td> <td>Error reading PDSC file \em 'PATH/FILENAME'!</td>
<td>Verify the PDSC file for consistency.
@@ -191,7 +191,7 @@
<td>The PDSC file expected has not been found. Rename or exchange the PDSC file.</td>
</tr>
<tr><td>M208</td> <td>ERROR</td> <td>Error calling SVDConv.exe: \em 'PATH'</td>
- <td>SVDConv.exe was not found. Copy the executable into the directory of PackChk.exe or enter the path where SVDConv.exe is located. Default is \token{CMSIS\\Utilities}.</td>
+ <td>SVDConv.exe was not found. Copy the executable into the directory of packChk.exe or enter the path where SVDConv.exe is located. Default is \token{CMSIS\\Utilities}.</td>
</tr>
<tr><td>M209</td> <td>ERROR</td> <td>Unknown Option: \em 'OPT'</td>
<td>The command line option entered is not known or invalid.</td>
@@ -205,7 +205,7 @@
Validation Messages
--------------------
-<table class="cmtable" summary="PackChk Validation Msgs">
+<table class="cmtable" summary="packChk Validation Msgs">
<tr>
<th>Message Number</th>
<th>Type</th>
@@ -415,7 +415,7 @@
XML Reader Errors
---------------
-<table class="cmtable" summary="PackChk XML Reader Msgs">
+<table class="cmtable" summary="packChk XML Reader Msgs">
<tr>
<th>Message Number</th>
<th>Type</th> <th>Description</th>
@@ -468,7 +468,7 @@
Model Errors
---------------
-<table class="cmtable" summary="PackChk Model Msgs">
+<table class="cmtable" summary="packChk Model Msgs">
<tr>
<th>Message Number</th>
<th>Type</th> <th>Description</th>
diff --git a/CMSIS/DoxyGen/Pack/src/pack_creation.txt b/CMSIS/DoxyGen/Pack/src/pack_creation.txt
index f74d17b..5335658 100644
--- a/CMSIS/DoxyGen/Pack/src/pack_creation.txt
+++ b/CMSIS/DoxyGen/Pack/src/pack_creation.txt
@@ -1,41 +1,41 @@
/*=======0=========1=========2=========3=========4=========5=========6=========7=========8=========9=========0=========1====*/
/**
-\page CP_Packs Create Software Packs
+\page cp_Packs Create Software Packs
The <b>CMSIS-Pack</b> format is used to deliver a Software Pack and is aimed to be scalable for future requirements.
It provides a management process and supports a tool independent distribution for:
- - \ref CreatePack_DFP "Device Support" for tool chains and software applications to target a specific device:
+ - \ref createPack_DFP "Device Support" for tool chains and software applications to target a specific device:
- Information about the processor and it's features.
- C and assembly files for the device startup and access to the memory mapped peripheral registers.
- Parameters, technical information, and data sheets about the device family and the specific devices.
- Device description and available peripherals.
- Memory layout of internal and external RAM and ROM address ranges.
- - \ref FlashAlgorithm "Flash algorithms" for programming the device.
+ - \ref flashAlgorithm "Flash algorithms" for programming the device.
- Debug and trace configurations as well as System View Description files for device specific display of the memory mapped
peripheral registers.
- - \ref CreatePackBoard "Board Support" for rapid development in the prototyping stage:
+ - \ref createPackBoard "Board Support" for rapid development in the prototyping stage:
- Information about the development board and it's features.
- Parameters, technical information, and data sheets about the board, the mounted microcontroller and peripheral devices.
- Drivers for on-board peripheral devices
- - \ref CP_SWComponents "Software Components" simplify the re-use of software and the management of 3rd party software. They contain:
- - A collection of source modules, header and \ref ConfigWizard "configuration files" as well as libraries.
+ - \ref cp_SWComponents "Software Components" simplify the re-use of software and the management of 3rd party software. They contain:
+ - A collection of source modules, header and \ref configWizard "configuration files" as well as libraries.
- Documentation of the software, including features and APIs.
- - \ref CP_API "Application Programming Interfaces" specify one or more APIs for \ref CP_Components "software components" that are
- part of another \ref CP_SWComponents "Software Pack".
+ - \ref cp_API "Application Programming Interfaces" specify one or more APIs for \ref cp_Components "software components" that are
+ part of another \ref cp_SWComponents "Software Pack".
- - \ref CP_Examples can be used as a reference and starting point for similar applications. They contain:
+ - \ref cp_Examples can be used as a reference and starting point for similar applications. They contain:
- Fully defined application projects that work out of the box in the specified build and debug environments.
- Documentation about the purpose of the example, how to build, configure and execute the application.
- - \ref CP_CodeTemplates help to understand the basic concepts of a software component better and to give the user a
+ - \ref cp_CodeTemplates help to understand the basic concepts of a software component better and to give the user a
good starting point for implementing his application.
-\section CP_PackSteps Steps to Create a Pack
+\section cp_PackSteps Steps to Create a Pack
The following image shows the basic steps that are required to create a Software Pack:
@@ -45,30 +45,30 @@
-# <b>Organize files:</b> Use directories to separate the content of the Pack.
-# <b>Create PDSC file:</b> The XML based PDSC file can be created using any text editor. Editors that can
validate XML code against a schema file help to find bugs early in the Pack development stage.
--# <b>Generate PACK:</b> Any compression tool supporting the ZIP format can be used to create a PACK file. \ref PackChk is
+-# <b>Generate PACK:</b> Any compression tool supporting the ZIP format can be used to create a PACK file. \ref packChk is
helpful for the validation of the contents of a Pack.
-The following pages will show how to create a Software Pack from scratch. The page \ref CP_SWComponents will start with a simple
+The following pages will show how to create a Software Pack from scratch. The page \ref cp_SWComponents will start with a simple
Pack containing only the PDSC file and a single software component and will then explain further elements of a Pack in more detail.
-The page \ref CreatePack_DFP adds information on the additional requirements that a DFP has, while \ref CreatePackBoard will
+The page \ref createPack_DFP adds information on the additional requirements that a DFP has, while \ref createPackBoard will
elaborate on the content specific to a BSP.
\section PackFilenames Pack Conventions
-All files that belong to a \ref CP_SWComponents "Software Pack" are compressed into a *.PACK file using a standard
+All files that belong to a \ref cp_SWComponents "Software Pack" are compressed into a *.PACK file using a standard
<a href="http://en.wikipedia.org/wiki/Zip_%28file_format%29" target="_blank">ZIP file format</a>.
-The content of each \ref CP_SWComponents "Software Pack" is described in the Pack Description (*.PDSC) file that is part of each
-\b Pack. Refer to \ref PackFormat for more information.
+The content of each \ref cp_SWComponents "Software Pack" is described in the Pack Description (*.PDSC) file that is part of each
+\b Pack. Refer to \ref packFormat for more information.
-A \ref CP_SWComponents "Software Pack" must have a unique filename following this naming convention:
+A \ref cp_SWComponents "Software Pack" must have a unique filename following this naming convention:
<b>\<vendor\>.\<name\>.\<version\>.pack</b>.
\b Where:
- - <b>\<vendor\></b> is name of the supplier or vendor of the \ref CP_SWComponents "Software Pack".
- - <b>\<name\></b> is name of the \ref CP_SWComponents "Software Pack". It is the vendor's responsibility to ensure unique package names.
- - <b>\<version\></b>specifies the version number of the \ref CP_SWComponents "Software Pack".
- - <b>.pack</b> is the file extension identifying a \ref CP_SWComponents "Software Pack".
+ - <b>\<vendor\></b> is name of the supplier or vendor of the \ref cp_SWComponents "Software Pack".
+ - <b>\<name\></b> is name of the \ref cp_SWComponents "Software Pack". It is the vendor's responsibility to ensure unique package names.
+ - <b>\<version\></b>specifies the version number of the \ref cp_SWComponents "Software Pack".
+ - <b>.pack</b> is the file extension identifying a \ref cp_SWComponents "Software Pack".
\note
- The XML elements \elem{vendor}, \elem{name}, and \elem{version} are declared in the \ref Filenames "PDSC" file.
@@ -81,7 +81,7 @@
directory the following three ZIP files are available:
|ZIP File |Documentation
|-----------------------------------|---------------------
-|Pack_with_Software_Components.zip | \ref CP_SWComponents
-|Pack_with_Device_Support.zip | \ref CreatePack_DFP
-|Pack_with_Board_Support.zip | \ref CreatePackBoard
+|Pack_with_Software_Components.zip | \ref cp_SWComponents
+|Pack_with_Device_Support.zip | \ref createPack_DFP
+|Pack_with_Board_Support.zip | \ref createPackBoard
*/
\ No newline at end of file
diff --git a/CMSIS/DoxyGen/Pack/src/pack_dfp.txt b/CMSIS/DoxyGen/Pack/src/pack_dfp.txt
index 53063c5..9d21033 100644
--- a/CMSIS/DoxyGen/Pack/src/pack_dfp.txt
+++ b/CMSIS/DoxyGen/Pack/src/pack_dfp.txt
@@ -1,24 +1,24 @@
/*=======0=========1=========2=========3=========4=========5=========6=========7=========8=========9=========0=========1====*/
/**
-\page CreatePack_DFP Pack with Device Support
+\page createPack_DFP Pack with Device Support
-A \ref CP_SWComponents "Software Pack" that contains a \ref pdsc_devices_pg "<devices>" element is called Device Family Pack
+A \ref cp_SWComponents "Software Pack" that contains a \ref pdsc_devices_pg "<devices>" element is called Device Family Pack
(DFP). A DFP may contain additional <b>Software Components</b> or <b>Example Projects</b> or any combination of those. The
typical content of a DFP is:
- - \ref CP_DeviceProperties explaining the capabilities of a device or a device family in more detail.
- - \ref CP_Components "Software Components" that configure the device and basic device drivers, in particular:
- - CMSIS-compliant \ref CP_System_Startp required to setup the C run-time library, device clock, and memory interface.
+ - \ref cp_DeviceProperties explaining the capabilities of a device or a device family in more detail.
+ - \ref cp_Components "Software Components" that configure the device and basic device drivers, in particular:
+ - CMSIS-compliant \ref cp_System_Startp required to setup the C run-time library, device clock, and memory interface.
- Peripheral Driver Interfaces that provide software routines for physical device peripherals used by middleware stacks.
Drivers may adhere to the <a class=el href="http://www.keil.com/cmsis/driver" target="_blank">CMSIS-Driver</a> standard.
- - One or more \ref CP_SVD "System View Description Files" describing the programmer's view of the device's
+ - One or more \ref cp_SVD "System View Description Files" describing the programmer's view of the device's
peripherals.
- - \ref CP_FlashProgrammingAlgorithm for erasing and downloading code into on-chip Flash.
- - \ref CP_Examples "Example Projects" that show the usage of the device and its peripherals.
- - \ref CP_CodeTemplates "User Code Templates" that can be used as a starting point for application development.
+ - \ref cp_FlashProgrammingAlgorithm for erasing and downloading code into on-chip Flash.
+ - \ref cp_Examples "Example Projects" that show the usage of the device and its peripherals.
+ - \ref cp_CodeTemplates "User Code Templates" that can be used as a starting point for application development.
This section explains how to create a DFP. Initially, the PDSC file in the DFP only describes devices. This DFP is then
extended to contain also SVD files, Flash algorithms, and device related software components such as system and HAL files.
-Example projects and code templates may be added as described in the section \ref CP_SWComponents.
+Example projects and code templates may be added as described in the section \ref cp_SWComponents.
DFP Use Cases
-------------
@@ -36,7 +36,7 @@
\image html DFPFlow.png
-\section CP_BasicDFP Basic Device Family Pack
+\section cp_BasicDFP Basic Device Family Pack
In the following sections, a DFP will be created for a fictional device family called <b>MVCM3</b> from the device vendor
<b>MyVendor</b>. The device family consists of four member that are separated into two sub-families. The specification of
@@ -54,7 +54,7 @@
-# Make sure that files/directories are not write protected (remove read-only flag).
-# Copy from the directory <b>\\CMSIS\\Utilities</b> available in the \b ARM::CMSIS Pack installation the following files
into your working directory:
- - PackChk.exe
+ - packChk.exe
- PACK.xsd
- SVDConv.exe
-# Open the \b MyVendor.MVCM3.pdsc file in an editor.
@@ -109,28 +109,28 @@
</li>
<li>
-Save the PDSC file and generate the Pack file using the <b>gen_pack.bat</b> script. See \ref CP_GeneratePack for
+Save the PDSC file and generate the Pack file using the <b>gen_pack.bat</b> script. See \ref cp_GeneratePack for
further details. Afterwards, install the Pack in your development tool.
\image html BasicDFPDisplay.png "Display of microcontroller devices in development tools"
</li>
</ol>
-\note PackChk.exe will display \b M350 informations:
+\note packChk.exe will display \b M350 informations:
\verbatim
*** INFO M350:
No 'Startup' found for [Generic:5] 'MVCM3110' ()
\endverbatim
We will address this problem in the next section.
-\section CP_System_Startp System and Startup Files
+\section cp_System_Startp System and Startup Files
<a class=el href="http://www.keil.com/cmsis/core" target="_blank">CMSIS-CORE</a> defines the following files to be used by
an embedded application:
- \c startup_<device>.s with reset handler and exception vectors. It is executed after reset and calls \c SystemInit and may
contain stack and heap configurations for the user application.
- \c system_<device>.c and \c system_<device>.h with general system configuration information (i.e. for clock and BUS setup).
- \c <device.h> gives access to processor core and all peripherals. This file should be generated out of the
- \ref CP_SVD "SVD" file using <a href="../../SVD/html/svd__s_v_d_conv_pg.html"><b>SVDConv.exe</b></a> to ensure consistency
+ \ref cp_SVD "SVD" file using <a href="../../SVD/html/svd__s_v_d_conv_pg.html"><b>SVDConv.exe</b></a> to ensure consistency
between the header file and what is being displayed by the debugger.
\image html SystemStartupFiles.png "System and startup files in relation to user code"
@@ -142,7 +142,7 @@
<b>Files</b> directory in your working environment:
<ol>
<li>
-Add a \c \<conditions\> section in your PDSC with the following (the \ref CP_Conditions "conditions" section
+Add a \c \<conditions\> section in your PDSC with the following (the \ref cp_Conditions "conditions" section
provides more information on this step):
\code{.xml}
<condition id="MVCM3 CMSIS-CORE">
@@ -168,7 +168,7 @@
vendors are required.
</li>
<li>
-Add a \c \<components\> section in your PDSC with the following (the \ref CP_Components "components" section
+Add a \c \<components\> section in your PDSC with the following (the \ref cp_Components "components" section
provides more information on this step):
\code
<component Cclass="Device" Cgroup="Startup" Cversion="1.0.0" condition="MVCM3 CMSIS-CORE">
@@ -195,7 +195,7 @@
\endcode
</li>
<li>
-Finally, save the PDSC file and regenerate the Pack file using the \ref CP_GeneratePack "gen_pack.bat" script. Afterwards,
+Finally, save the PDSC file and regenerate the Pack file using the \ref cp_GeneratePack "gen_pack.bat" script. Afterwards,
install the Pack in your development tool and create a new project. Select the software components <b>\::CMSIS:CORE</b>
and <b>\::Device:Startup</b> for the project:
@@ -203,7 +203,7 @@
</li>
</ol>
-\note PackChk.exe will display \b M350 informations:
+\note packChk.exe will display \b M350 informations:
\verbatim
*** INFO M353: .\Files\MyVendor.MVCM3.pdsc (Line 98)
No 'Device Headerfile' File found for Component 'Startup' (MyVendor::Device.Startup:1.0.0) for '[Generic:5] MVCM3110' (ARMCC)
@@ -211,7 +211,7 @@
We will address this problem in the next section.
-\section CP_SVD System View Description File
+\section cp_SVD System View Description File
<a class=el href="http://www.keil.com/cmsis/svd" target="_blank">CMSIS-SVD</a>
formalizes the description of the programmer's view for the system contained in ARM Cortex-M processor-based
@@ -277,7 +277,7 @@
\endcode
</li>
<li>
-Finally, save the PDSC file and regenerate the Pack file using the \ref CP_GeneratePack "gen_pack.bat" script. Afterwards,
+Finally, save the PDSC file and regenerate the Pack file using the \ref cp_GeneratePack "gen_pack.bat" script. Afterwards,
install the Pack in your development tool and create a new project. Depending on your development environment, you will be
able to see the SVD file included in your project:
@@ -289,9 +289,9 @@
</ol>
-\section CP_FlashProgrammingAlgorithm Flash Programming Algorithms
-\ref FlashAlgorithm are used to erase or download applications to Flash devices. A DFP usually contains
-predefined Flash algorithms for programming its supported devices. The page \ref AlgorithmFunc explains the mechanisms in
+\section cp_FlashProgrammingAlgorithm Flash Programming Algorithms
+\ref flashAlgorithm are used to erase or download applications to Flash devices. A DFP usually contains
+predefined Flash algorithms for programming its supported devices. The page \ref algorithmFunc explains the mechanisms in
more detail.
For the MVCM3 device family, two flash algorithms have to be created. MVCM3110/250 have 16 kB of Flash, whereas MVCM3120/260
@@ -367,18 +367,18 @@
\endcode
</li>
<li>
-Finally, save the PDSC file and regenerate the Pack file using the \ref CP_GeneratePack "gen_pack.bat" script. Afterwards,
+Finally, save the PDSC file and regenerate the Pack file using the \ref cp_GeneratePack "gen_pack.bat" script. Afterwards,
install the Pack in your development tool. Depending on your development environment, you will be able to see the Flash
Programming Algorithms included in your project (either for a new project or by adding it manually to an existing project):
\image html FPADisplay.png "Display of Flash Programming Algorithm"
-\note The page \ref FlashAlgorithm gives more information on the subject.
+\note The page \ref flashAlgorithm gives more information on the subject.
</li>
</ol>
-\section CP_DeviceProperties Device Properties
+\section cp_DeviceProperties Device Properties
To limit redundancy, devices can be organized in two hierarchy groups:
- \ref element_family "family": the attributes of a device family which includes also the processor.
@@ -412,7 +412,7 @@
information on the device level.
The following shows how to specify the device properties for the MVCM3110 device (refer to the specification shown in
-\ref CP_BasicDFP). The other members of the family are specified accordingly.
+\ref cp_BasicDFP). The other members of the family are specified accordingly.
Copy the \e content of the <b>05_Device_Properties</b> directory of the \b Pack_with_Device_Support.zip file to the
<b>Files</b> directory of your working environment:
@@ -454,9 +454,9 @@
</ol>
-\subsection CP_DeviceSWComp Device Specific Software Components
+\subsection cp_DeviceSWComp Device Specific Software Components
-Finally, \ref CP_Components "software components" and \ref CP_Examples "example projects" need to be added to the DFP.
+Finally, \ref cp_Components "software components" and \ref cp_Examples "example projects" need to be added to the DFP.
<ol>
<li>
Add the following lines to the PDSC file in the \elem{components} section:
@@ -536,7 +536,7 @@
\endcode
</li>
<li>
-Finally, save the PDSC file and regenerate the Pack file using the \ref CP_GeneratePack "gen_pack.bat" script. Afterwards,
+Finally, save the PDSC file and regenerate the Pack file using the \ref cp_GeneratePack "gen_pack.bat" script. Afterwards,
install the Pack in your development tool.
</li>
</ol>
diff --git a/CMSIS/DoxyGen/Pack/src/pack_example.txt b/CMSIS/DoxyGen/Pack/src/pack_example.txt
index 5732058..d286324 100644
--- a/CMSIS/DoxyGen/Pack/src/pack_example.txt
+++ b/CMSIS/DoxyGen/Pack/src/pack_example.txt
@@ -1,13 +1,13 @@
/*=======0=========1=========2=========3=========4=========5=========6=========7=========8=========9=========0=========1====*/
/**
-\page Pack_Example Pack Example
+\page pack_Example Pack Example
The <b>ARM::CMSIS</b> Pack contains an example of a Software Pack that contains device support, board support and software
components. This Pack can be used as a reference for user generated Software Packs. It is available in the directory
\\CMSIS\\Pack\\Example. It contains a \ref PE_PDSC "PDSC example file" and all sub-directories containing the files referenced
in the PDSC.
-\n The example is a \ref CreatePack_DFP "DFP" for NXP's LPC1800 series of microcontrollers. It also contains
-\ref CreatePackBoard "BSP" information and software components, mainly peripheral drivers. Some of the drivers adhere to the
+\n The example is a \ref createPack_DFP "DFP" for NXP's LPC1800 series of microcontrollers. It also contains
+\ref createPackBoard "BSP" information and software components, mainly peripheral drivers. Some of the drivers adhere to the
<a class=el href="../../Driver/html/index.html" target="_blank">CMSIS-Driver</a> standard. This is the layout of the
sub-directories:
|Directory |Content |Section in PDSC |
@@ -16,7 +16,7 @@
|\ref PE_CMSIS_Driver "CMSIS_Driver"|<a href="../../Driver/html/index.html"><b>CMSIS-Driver</b></a> compliant peripheral drivers|\ref element_component "<component>"|
|\ref PE_Device "Device" |<a href="../../Core/html/index.html"><b>CMSIS-CORE</b></a> files for LPC1800 series |\ref element_device "<device>" |
|\ref PE_Documents "Documents" |Documentation for devices and boards |\ref element_book "<book>" |
-|\b Flash |\ref FlashAlgorithm and a sub-directory called \b LPC18xx43xx_IAP containing a uVision project for IAP (In-Application Programming) support|\ref element_algorithm "<algorithm>"|
+|\b Flash |\ref flashAlgorithm and a sub-directory called \b LPC18xx43xx_IAP containing a uVision project for IAP (In-Application Programming) support|\ref element_algorithm "<algorithm>"|
|\b Images |Images of the MCB1800 development board |\ref pdsc_boards_pg "<board>" |
|\b SVD |<a href="../../SVD/html/index.html"><b>SVD</b></a> file for LPC1800 series |\ref element_debug "<debug>" |
diff --git a/CMSIS/DoxyGen/Pack/src/pack_publish.txt b/CMSIS/DoxyGen/Pack/src/pack_publish.txt
index d3963a3..24e071d 100644
--- a/CMSIS/DoxyGen/Pack/src/pack_publish.txt
+++ b/CMSIS/DoxyGen/Pack/src/pack_publish.txt
@@ -1,9 +1,9 @@
/*=======0=========1=========2=========3=========4=========5=========6=========7=========8=========9=========0=========1====*/
/**
-\page CreatePackPublish Publish a Pack
+\page createPackPublish Publish a Pack
There are multiple ways to distribute a Software Pack:
-\section CP_LocalInstallation Local Installation
+\section cp_LocalInstallation Local Installation
The easiest way to distribute a Software Pack is attaching it to an email or using other means of electronic distribution
(for example using a company internal file server). The installation of a Software Pack is usually triggered by
double-clicking the PACK file. The Pack management tool is invoked and the Pack is installed on the local machine. After
@@ -17,7 +17,7 @@
<a href="https://en.wikipedia.org/wiki/File_URI_scheme" target="_blank">file URI scheme</a>.
-\section CP_WebDownload Web Download
+\section cp_WebDownload Web Download
Any web server can be used to host a Software Pack (specified by the \c \<url\> element in the PDSC file). At this location,
at least two files need to be present (refer to \ref PackFilenames):
@@ -52,7 +52,7 @@
\image html WebInstallation.png "Web installation and update"
-\section CP_KeilComPack Publishing on www.keil.com/pack
+\section cp_KeilComPack Publishing on www.keil.com/pack
ARM tries to maintain a list of all available Software Packs. If a Software Pack is intended to be on that list, its PDSC
file needs to be sent to to the following email address: cmsis@arm.com. The PDSC file will be manually XML validated. The
diff --git a/CMSIS/DoxyGen/Pack/src/pack_swcomponents.txt b/CMSIS/DoxyGen/Pack/src/pack_swcomponents.txt
index 5113aa9..c4791f8 100644
--- a/CMSIS/DoxyGen/Pack/src/pack_swcomponents.txt
+++ b/CMSIS/DoxyGen/Pack/src/pack_swcomponents.txt
@@ -1,6 +1,6 @@
/*=======0=========1=========2=========3=========4=========5=========6=========7=========8=========9=========0=========1====*/
/**
-\page CP_SWComponents Pack with Software Components
+\page cp_SWComponents Pack with Software Components
This section is a tutorial that explains how to create a Software Pack. Initially, a Software Pack with a simple PDSC file
is created that contains only one software component. This Software Pack is then extended to show the various features for
describing software components.
@@ -15,11 +15,11 @@
-# Make sure that files/directories are not write protected (remove read-only flag).
-# Copy from the directory <b>\\CMSIS\\Utilities</b> available in the \b ARM::CMSIS Pack installation the following files
into your working directory:
- - PackChk.exe
+ - packChk.exe
- PACK.xsd
-\section CP_CreatePDSC Create PDSC File
+\section cp_CreatePDSC Create PDSC File
<ol>
<li>
@@ -111,13 +111,13 @@
specifically for that project but chances are that due to the include path search order of the compiler, the unmodified
header file in the pack repository is found first and used by the compiler (creating unexpected results).
-More information on <b>\<components\></b> will be given in section \ref CP_Components. Save the file and close your editor.
+More information on <b>\<components\></b> will be given in section \ref cp_Components. Save the file and close your editor.
In the next section, the generation of a Pack will be explained in detail.
</li>
</ol>
-\section CP_GeneratePack Generate a Pack
+\section cp_GeneratePack Generate a Pack
<ol>
<li>
Rename the file <b>vendor.pack_name.pdsc</b> to <b>MyVendor.MyPack.pdsc</b>.
@@ -133,11 +133,11 @@
</li>
<li>
Having saved <b>gen_pack.bat</b>, you can execute it either by double-clicking or by using the command line which is
-recommended to see the output of PackChk.exe (open a command window at the location of the files and enter \c gen_pack.bat).
+recommended to see the output of packChk.exe (open a command window at the location of the files and enter \c gen_pack.bat).
The batch file will:
- Check the availability of the PDSC file
- Copy the PDSC file to the <b>Files</b> directory
-- Run PackChk.exe on the <b>Files</b> directory\n
+- Run packChk.exe on the <b>Files</b> directory\n
- Create a Pack file in the working directory. It will be called <b>MyVendor.MyPack.1.0.0.pack</b>.
</li>
<li>
@@ -149,7 +149,7 @@
</ol>
-\section CP_Components Software Components
+\section cp_Components Software Components
A component lists the files that belong to it and that are relevant for a project. The component itself or each individual
file may refer to a \ref element_condition "condition" that must resolve to true; if it is false, the component or file is
@@ -180,7 +180,7 @@
Other \c Cclass names can be freely assigned to software components.
In case multiple interdependent components (belonging to the same \c Cclass) form part of a solution, these can be grouped
-in a so called \ref CP_Bundles "bundle".
+in a so called \ref cp_Bundles "bundle".
Use the following syntax to reference to software components and APIs:\n
<b>\<Vendor\>::\<Cclass\>:\<Cgroup\>:\<Csub\></b>
@@ -217,7 +217,7 @@
component version is used.
-\section CP_Conditions Conditions
+\section cp_Conditions Conditions
A condition describes dependencies on:
- a specific device
@@ -239,7 +239,7 @@
If a condition resolves to false during processing, the respective element will be ignored.
-Let's modify the example from the \ref CP_CreatePDSC section by adding the requirement for a CMSIS-RTOS and libraries that
+Let's modify the example from the \ref cp_CreatePDSC section by adding the requirement for a CMSIS-RTOS and libraries that
are specific to a certain Cortex-M class core:
- \c mylib_cm0.lib for use with a Cortex-M0 and Cortex-M0+ processor
- \c mylib_cm3.lib for use with a Cortex-M3 processor
@@ -309,14 +309,14 @@
\endcode
</li>
<li>
-Finally, save the PDSC file and regenerate the Pack file using the <b>gen_pack.bat</b> script. See \ref CP_GeneratePack for
+Finally, save the PDSC file and regenerate the Pack file using the <b>gen_pack.bat</b> script. See \ref cp_GeneratePack for
further details. Afterwards, install the Pack in your development tool and observe the differences to version 1.0.0.
\image html ConditionsDisplay.png "Display of conditionally added files for a Cortex-M3 device in development tools"
</li>
</ol>
-\note PackChk.exe will will now display an \b M362 warning:
+\note packChk.exe will will now display an \b M362 warning:
\verbatim
*** WARNING M362: (Line 80)
Not all Component Dependencies for 'Cclass=MyClass, Cgroup=MyGroup, Csub=MySubGroup, Cversion=1.0.1, Capiversion=' can be resolved.
@@ -329,7 +329,7 @@
dependencies can be correctly examined.
-\section CP_Variants Variants
+\section cp_Variants Variants
Software components may have <b>variants</b>, for example:
- Debug version with or release version without diagnostic output
@@ -393,14 +393,14 @@
\endcode
</li>
<li>
-Finally, save the PDSC file and regenerate the Pack file using the <b>gen_pack.bat</b> script. See \ref CP_GeneratePack for
+Finally, save the PDSC file and regenerate the Pack file using the <b>gen_pack.bat</b> script. See \ref cp_GeneratePack for
further details. Afterwards, install the Pack in your development tool and observe the differences to version 1.0.1.
\image html VariantDisplay.png "Display of MyVariant in development tools"
</li>
</ol>
-\section CP_RTEComponents_h RTE_Components.h
+\section cp_RTEComponents_h RTE_Components.h
Sometimes, software components need to know of other components. Depending on the availability or configuration of another
component, certain settings may be required. A distinct header file is available to make components aware of each other:
<b>RTE_Components.h</b>. To add a line of C code to this header file, simply add this to your component:
@@ -415,18 +415,18 @@
\note The RTE_components.h file needs to be included somewhere in your source files. Refer to \ref RTE_Components_h for more information.
-\section CP_Bundles Bundles
+\section cp_Bundles Bundles
A bundle is basically a variant on the \c Cclass level. It specifies the attributes \c Cclass, \c Cversion and optionally
\c Cgroup and \c Cvendor for a collection of interdependent components. Components within a bundle inherit the attributes
set by the bundle and must not set these attributes again. Bundles ensure consistency of attributes across multiple
interworking components and restrict the mix and match of components within a \c Cclass from different solutions.
In addition to components, a bundle has the mandatory elements \c description and \c doc (for documentation).
-An example of a <b>bundle</b> is shown in the \ref CP_BundleExample section where the bundle is used to deliver board
+An example of a <b>bundle</b> is shown in the \ref cp_BundleExample section where the bundle is used to deliver board
support files for a certain development platform.
-\section CP_Instances Instances
+\section cp_Instances Instances
Some \ref pdsc_components_pg "software components" allow several instances. This is useful if more than one peripheral can
be connected.
@@ -448,7 +448,7 @@
\endcode
</li>
<li>
-Finally, save the PDSC file and regenerate the Pack file using the <b>gen_pack.bat</b> script. See \ref CP_GeneratePack for
+Finally, save the PDSC file and regenerate the Pack file using the <b>gen_pack.bat</b> script. See \ref cp_GeneratePack for
further details. Afterwards, install the Pack in your development tool and observe the differences to version 1.0.2. When
selecting a certain number of instances of the component, causes the development tool to copy the required configuration
files multiple times into the project. This ensures that each component instance can be configured separately.
@@ -458,7 +458,7 @@
</ol>
-\section CP_API API Interface
+\section cp_API API Interface
An \ref pdsc_apis_pg "API" is a special form of a software component that only defines a C/C++ Application Programming
Interface (API). An API does not contain the actual implementation (usually provided by source code or library files) and
@@ -490,14 +490,14 @@
\endcode
</li>
<li>
-Finally, save the PDSC file and regenerate the Pack file using the <b>gen_pack.bat</b> script. See \ref CP_GeneratePack for
+Finally, save the PDSC file and regenerate the Pack file using the <b>gen_pack.bat</b> script. See \ref cp_GeneratePack for
further details. Afterwards, install the Pack in your development tool and observe the differences to version 1.0.3. Most
likely, you will see none as APIs are not selectable and are thus not displayed in the tools.
</li>
</ol>
-\section CP_CodeTemplates User Code Templates
+\section cp_CodeTemplates User Code Templates
User code templates provide a quick start for implementing an application. To add user code templates, add source files with
the attribute <code>attr=“template”</code> in a \c \<component\>. The \c select attribute is used to identify template files.
Template files with the same \c select attribute will be added to a project simultaneously.
@@ -522,7 +522,7 @@
\endcode
</li>
<li>
-Finally, save the PDSC file and regenerate the Pack file using the <b>gen_pack.bat</b> script. See \ref CP_GeneratePack for
+Finally, save the PDSC file and regenerate the Pack file using the <b>gen_pack.bat</b> script. See \ref cp_GeneratePack for
further details. Afterwards, install the Pack in your development tool and observe the differences to version 1.0.4.
\image html UserCodeTemplatesDisplay.png "Display of user code templates in development tools"
@@ -530,7 +530,7 @@
</ol>
-\section CP_Examples Example Projects
+\section cp_Examples Example Projects
Example projects help to understand a certain MCU or development board better. An example and each individual file of it may
refer to a condition that must resolve to true; if it is false, the example or file will be ignored. The board element is
used to reference to one or more board descriptions using the board vendor and name an example is targeted for. Each example
@@ -569,13 +569,13 @@
\endcode
</li>
<li>
-Finally, save the PDSC file and regenerate the Pack file using the <b>gen_pack.bat</b> script. See \ref CP_GeneratePack for
+Finally, save the PDSC file and regenerate the Pack file using the <b>gen_pack.bat</b> script. See \ref cp_GeneratePack for
further details. Afterwards, install the Pack in your development tool and observe the differences to version 1.0.5.
\image html ExampleDisplay.png "Display of example projects in development tools"
</li>
</ol>
Example projects rely on a development board to be present (as the code needs to run on real hardware). In the code above
-you will notice that a development board called "MyDevBoard" was specified. \ref CreatePackBoard explains how to integrate
+you will notice that a development board called "MyDevBoard" was specified. \ref createPackBoard explains how to integrate
boards into a Pack.
*/
\ No newline at end of file
diff --git a/CMSIS/DoxyGen/Pack/src/pack_utilities.txt b/CMSIS/DoxyGen/Pack/src/pack_utilities.txt
index c2828e6..edfebb5 100644
--- a/CMSIS/DoxyGen/Pack/src/pack_utilities.txt
+++ b/CMSIS/DoxyGen/Pack/src/pack_utilities.txt
@@ -1,20 +1,20 @@
/*=======0=========1=========2=========3=========4=========5=========6=========7=========8=========9=========0=========1====*/
/**
-\page CreatePackUtil Utilities for Creating Packs
+\page createPackUtil Utilities for Creating Packs
-Software Packs are ZIP files that contain a \ref PackFormat "PDSC" file and other content, that is specified within the PDSC
+Software Packs are ZIP files that contain a \ref packFormat "PDSC" file and other content, that is specified within the PDSC
file in XML. While the PDSC file can be created with any text editor, some of the contents have to be generated by
additional programs. Also, verification of a PDSC file requires the help of additional tools. This section gives and
overview over programs that are either part of the CMSIS Pack or are available for download on the Internet.
- - \subpage PackChk is part of the CMSIS Pack and is used to check the validity of a PDSC file.
+ - \subpage packChk is part of the CMSIS Pack and is used to check the validity of a PDSC file.
- Validation of SVD files with <a href="../../SVD/html/svd_validate_file_pg.html"><b>SVDConv.exe</b></a> is required for SVD files that are part of \ref SWPackVariants "Device Family Packs".
- - Several \subpage CP_Editors can verify XML files using the XML schema files that are part of the CMSIS Pack.
- - \subpage CP_ZIPTool create the actual ZIP archive of a Software Pack.
+ - Several \subpage cp_Editors can verify XML files using the XML schema files that are part of the CMSIS Pack.
+ - \subpage cp_ZIPTool create the actual ZIP archive of a Software Pack.
*/
/*=======0=========1=========2=========3=========4=========5=========6=========7=========8=========9=========0=========1====*/
/**
-\page CP_Editors XML Editors
+\page cp_Editors XML Editors
Some text editors are capable of verifying XML code against a schema file. This is helpful to identify syntactical or
structural problems in a PDSC or SVD file early in the development process. Useful editors are:
@@ -28,13 +28,13 @@
/*=======0=========1=========2=========3=========4=========5=========6=========7=========8=========9=========0=========1====*/
/**
-\page CP_ZIPTool ZIP Compression Tools
+\page cp_ZIPTool ZIP Compression Tools
Any ZIP software utility supporting the compression method
<a href="http://en.wikipedia.org/wiki/DEFLATE" target="_blank">DEFLATE</a> can be used to create a PACK file. Simply, create
the ZIP file and rename it to *.PACK.
The compression tool <a href="http://www.7-zip.org/" target="_blank">7-Zip</a> supports command line calls and can be
-used in batch scripts like \ref CP_GeneratePack "gen_pack.bat" for automated Pack file creation (and verification
-with \ref PackChk). Installers for 7-Zip are available for 32-bit and 64-bit Windows operating systems.
+used in batch scripts like \ref cp_GeneratePack "gen_pack.bat" for automated Pack file creation (and verification
+with \ref packChk). Installers for 7-Zip are available for 32-bit and 64-bit Windows operating systems.
*/
\ No newline at end of file
diff --git a/CMSIS/DoxyGen/Pack/src/pdsc_format.txt b/CMSIS/DoxyGen/Pack/src/pdsc_format.txt
index 70e14dc..ab5c252 100644
--- a/CMSIS/DoxyGen/Pack/src/pdsc_format.txt
+++ b/CMSIS/DoxyGen/Pack/src/pdsc_format.txt
@@ -1,53 +1,53 @@
/*=======0=========1=========2=========3=========4=========5=========6=========7=========8=========9=========0=========1====*/
/**
-\page PackFormat Pack Description (*.PDSC) Format
+\page packFormat Pack Description (*.PDSC) Format
[TOC]
-The \ref PackFormat uses standard XML annotations and is defined in the schema file <b>PACK.xsd</b>.
+The <b>Pack Description (*.PDSC) Format</b> uses standard XML annotations and is defined in the schema file <b>PACK.xsd</b>.
Software components are distributed through <b>Software Packs</b>.
-A \ref CP_SWComponents "Software Pack" is a zip file containing a single <b>Pack Description</b> file that describes dependencies
+A \ref cp_SWComponents "Software Pack" is a zip file containing a single <b>Pack Description</b> file that describes dependencies
to devices, processors, tool chains, or other software components.
-A descriptive text of the \ref CP_SWComponents "Software Pack"along the text information for devices, components, and examples is part of each
+A descriptive text of the \ref cp_SWComponents "Software Pack"along the text information for devices, components, and examples is part of each
a <b>Pack Description</b> (*.PDSC) file. In addition, information is provided which facilitates downloading, updating, and versioning of
-of a \ref CP_SWComponents "Software Pack". The *.PDSC file contains also the complete version history of the \ref CP_SWComponents "Software Pack"
+of a \ref cp_SWComponents "Software Pack". The *.PDSC file contains also the complete version history of the \ref cp_SWComponents "Software Pack"
with a brief list of the most significant changes.
\section Filenames Filename Conventions
-A \ref CP_SWComponents "Software Pack" must have a unique filename which uses the following format:
+A \ref cp_SWComponents "Software Pack" must have a unique filename which uses the following format:
<b>\<vendor\>.\<name\>.\<version\>.pack</b>.
\b Where:
- - <b>\<vendor\></b>: name of the supplier or vendor of the \ref CP_SWComponents "Software Pack".
- - <b>\<name\></b>: name of the \ref CP_SWComponents "Software Pack". It is the vendor's responsibility to ensure unique
+ - <b>\<vendor\></b>: name of the supplier or vendor of the \ref cp_SWComponents "Software Pack".
+ - <b>\<name\></b>: name of the \ref cp_SWComponents "Software Pack". It is the vendor's responsibility to ensure unique
package names.
- - <b>\<version\></b>: version number of the \ref CP_SWComponents "Software Pack".
- - <b>.pack</b>: file extension identifying a \ref CP_SWComponents "Software Pack".
+ - <b>\<version\></b>: version number of the \ref cp_SWComponents "Software Pack".
+ - <b>.pack</b>: file extension identifying a \ref cp_SWComponents "Software Pack".
\note \<vendor\> and \<name\> \em must \em not contain spaces.
\n
-The <b>Pack Description</b> (*.PDSC) file belonging to such a \ref CP_SWComponents "Software Pack" file (\<vendor\>.\<name\>.\<version\>.pack)
+The <b>Pack Description</b> (*.PDSC) file belonging to such a \ref cp_SWComponents "Software Pack" file (\<vendor\>.\<name\>.\<version\>.pack)
is version independent and has the format:
<b>\<vendor\>.\<name\>.pdsc</b>.
\b Where:
- - <b>\<vendor\></b>: name of the supplier or vendor of the \ref CP_SWComponents "Software Pack".
- - <b>\<name\></b>: name of the \ref CP_SWComponents "Software Pack" that is described by this *.PDSC file.
- - <b>.pack</b>: file extension identifying a \ref CP_SWComponents "Software Pack".
+ - <b>\<vendor\></b>: name of the supplier or vendor of the \ref cp_SWComponents "Software Pack".
+ - <b>\<name\></b>: name of the \ref cp_SWComponents "Software Pack" that is described by this *.PDSC file.
+ - <b>.pack</b>: file extension identifying a \ref cp_SWComponents "Software Pack".
\note \<vendor\> and \<name\> \em must \em not contain spaces.
Example filenames for software packs:
Software Pack for CMSIS Version 4.0 released by ARM.
- - <b>ARM.CMSIS.4.0.0.pack</b>: filename of the \ref CP_SWComponents "Software Pack".
+ - <b>ARM.CMSIS.4.0.0.pack</b>: filename of the \ref cp_SWComponents "Software Pack".
- <b>ARM.CMSIS.pdsc</b>: filename of the <b>Pack Description</b> (*.PDSC) file.
Device Family Pack for STM32F4 Version 1.0.0 released by ST Microelectronics.
- - <b>ST.STM32F4xx_DFP.1.0.0.pack</b>: filename of the \ref CP_SWComponents "Software Pack".
+ - <b>ST.STM32F4xx_DFP.1.0.0.pack</b>: filename of the \ref cp_SWComponents "Software Pack".
- <b>ST.STM32F4xx.pdsc</b>: filename of the <b>Pack Description</b> (*.PDSC) file.
\section PackSchema Pack Schema
@@ -55,25 +55,25 @@
The XML schema file <b>PACK.xsd</b> defines the sections used in a <b>*.PDSC</b> file. The current <b>PACK.xsd</b> can be
found under the ARM.CMSIS.*.Pack in the .\\CMSIS\\Utilities-directory.
-The \ref PackFormat is structured using grouping elements and contains the following top level elements:
+The \ref packFormat is structured using grouping elements and contains the following top level elements:
- \subpage pdsc_package_pg "<package>": describes package related information like vendor, package name, description, version. Is the root element.
- \subpage element_keywords "<keywords>": lists keywords to search for packages. Can be used for search engines.
- \subpage element_releases "<releases>": lists release versions with descriptions.
- \subpage element_taxonomy "<taxonomy>": lists description elements that define component classes and component group names.
- - \subpage pdsc_apis_pg "<apis>": describes Application Programming Interfaces (API) Specifications contained in the \ref CP_SWComponents "Software Pack".
+ - \subpage pdsc_apis_pg "<apis>": describes Application Programming Interfaces (API) Specifications contained in the \ref cp_SWComponents "Software Pack".
- \subpage pdsc_generators_pg "<generators>": specifies the tools that have been used to generate the PDSC file.
- - \subpage pdsc_devices_pg "<devices>": lists the devices supported by this \ref CP_SWComponents "Software Pack". It specifies the device attributes and
+ - \subpage pdsc_devices_pg "<devices>": lists the devices supported by this \ref cp_SWComponents "Software Pack". It specifies the device attributes and
files like flash programming algorithms, CMSIS device header files, CMSIS System View Descriptions, etc.
- - \subpage pdsc_boards_pg "<boards>": lists the development boards supported by the \ref CP_SWComponents "Software Pack".
- - \subpage pdsc_conditions_pg "<conditions>": defines dependencies to devices, processors, components, and tools that are used within the \ref CP_SWComponents "Software Pack".
+ - \subpage pdsc_boards_pg "<boards>": lists the development boards supported by the \ref cp_SWComponents "Software Pack".
+ - \subpage pdsc_conditions_pg "<conditions>": defines dependencies to devices, processors, components, and tools that are used within the \ref cp_SWComponents "Software Pack".
It allows making components and files conditional.
- - \subpage pdsc_components_pg "<components>": lists the software components contained in the \ref CP_SWComponents "Software Pack".
+ - \subpage pdsc_components_pg "<components>": lists the software components contained in the \ref cp_SWComponents "Software Pack".
- \subpage pdsc_examples_pg "<examples>": specifies example projects contained in the PACK.
- \subpage pdsc_SequenceNameEnum_pg "<sequence>": specifies sequences of debugger commands.
\section PDSC_Example Example of a *.PDSC File
-This example of a *.PDSC File explains the sections, particularly how dependencies are used to identify individual files of \ref CP_Components.
+This example of a *.PDSC File explains the sections, particularly how dependencies are used to identify individual files of \ref cp_Components.
\image html PDSC_Example_top.png
\image html PDSC_Example_bottom.png "Example of a *.PDSC File"
@@ -144,7 +144,7 @@
</tr>
<tr>
<td>schemaVersion</td>
- <td>CMSIS-PDSC schema version used for describing the \ref CP_SWComponents "Software Pack" (for example, \token{"1.2"}). The version format is described in \ref VersionType "Version Type".</td>
+ <td>CMSIS-PDSC schema version used for describing the \ref cp_SWComponents "Software Pack" (for example, \token{"1.2"}). The version format is described in \ref VersionType "Version Type".</td>
<td>VersionType</td>
<td>required</td>
</tr>
@@ -168,25 +168,25 @@
</tr>
<tr>
<td>name</td>
- <td>Name of the \ref CP_SWComponents "Software Pack". Could be displayed by an installer.</td>
+ <td>Name of the \ref cp_SWComponents "Software Pack". Could be displayed by an installer.</td>
<td>xs:string </td>
<td>1..1 </td>
</tr>
<tr>
<td>vendor</td>
- <td>Name of the supplier or vendor of the \ref CP_SWComponents "Software Pack".</td>
+ <td>Name of the supplier or vendor of the \ref cp_SWComponents "Software Pack".</td>
<td>xs:string </td>
<td>1..1 </td>
</tr>
<tr>
<td>description</td>
- <td>Brief description of the \ref CP_SWComponents "Software Pack".</td>
+ <td>Brief description of the \ref cp_SWComponents "Software Pack".</td>
<td>xs:string </td>
<td>1..1 </td>
</tr>
<tr>
<td>url</td>
- <td><a href="https://en.wikipedia.org/wiki/Uniform_resource_locator" target="_blank">HTTP URL</a> or <a href="https://en.wikipedia.org/wiki/File_URI_scheme" target="_blank">file URI</a> location of the \ref CP_SWComponents "Software Pack". The URL can be used by installers for downloading, updating, or checking versions. If left empty, the Pack cannot be updated automatically from a server location.</td>
+ <td><a href="https://en.wikipedia.org/wiki/Uniform_resource_locator" target="_blank">HTTP URL</a> or <a href="https://en.wikipedia.org/wiki/File_URI_scheme" target="_blank">file URI</a> location of the \ref cp_SWComponents "Software Pack". The URL can be used by installers for downloading, updating, or checking versions. If left empty, the Pack cannot be updated automatically from a server location.</td>
<td>xs:anyURI </td>
<td>1..1 </td>
</tr>
@@ -204,19 +204,19 @@
</tr>
<tr>
<td>\ref element_releases "releases"</td>
- <td>Version release history with brief information about a \ref CP_SWComponents "Software Pack".</td>
+ <td>Version release history with brief information about a \ref cp_SWComponents "Software Pack".</td>
<td>ReleasesGroup</td>
<td>1..1 </td>
</tr>
<tr>
<td>\ref element_keywords "keywords"</td>
- <td>Defines keywords that might be used to find a \ref CP_SWComponents "Software Pack". Keywords may be also exported to web page to provide information for search engines, such as Google.</td>
+ <td>Defines keywords that might be used to find a \ref cp_SWComponents "Software Pack". Keywords may be also exported to web page to provide information for search engines, such as Google.</td>
<td>group</td>
<td>0..1 </td>
</tr>
<tr>
<td>\ref element_generators "generators"</td>
- <td>Specifies generator tools that have been used to create the \ref CP_SWComponents "Software Pack".</td>
+ <td>Specifies generator tools that have been used to create the \ref cp_SWComponents "Software Pack".</td>
<td>GeneratorsType</td>
<td>0..1 </td>
</tr>
@@ -241,7 +241,7 @@
</tr>
<tr>
<td>\ref element_apis "apis"</td>
- <td>Defines the API (Application Programming Interfaces) specifications contained in the \ref CP_SWComponents "Software Pack".</td>
+ <td>Defines the API (Application Programming Interfaces) specifications contained in the \ref cp_SWComponents "Software Pack".</td>
<td>ApisType</td>
<td>0..1 </td>
</tr>
diff --git a/CMSIS/DoxyGen/RTOS/rtos.dxy b/CMSIS/DoxyGen/RTOS/rtos.dxy
index af69c7f..e1897e6 100644
--- a/CMSIS/DoxyGen/RTOS/rtos.dxy
+++ b/CMSIS/DoxyGen/RTOS/rtos.dxy
@@ -533,19 +533,19 @@
# disable (NO) the todo list. This list is created by putting \todo
# commands in the documentation.
-GENERATE_TODOLIST = YES
+GENERATE_TODOLIST = NO
# The GENERATE_TESTLIST tag can be used to enable (YES) or
# disable (NO) the test list. This list is created by putting \test
# commands in the documentation.
-GENERATE_TESTLIST = YES
+GENERATE_TESTLIST = NO
# The GENERATE_BUGLIST tag can be used to enable (YES) or
# disable (NO) the bug list. This list is created by putting \bug
# commands in the documentation.
-GENERATE_BUGLIST = YES
+GENERATE_BUGLIST = NO
# The GENERATE_DEPRECATEDLIST tag can be used to enable (YES) or
# disable (NO) the deprecated list. This list is created by putting
@@ -1259,7 +1259,7 @@
# typically be disabled. For large projects the javascript based search engine
# can be slow, then enabling SERVER_BASED_SEARCH may provide a better solution.
-SEARCHENGINE = NO
+SEARCHENGINE = YES
# When the SERVER_BASED_SEARCH tag is enabled the search engine will be
# implemented using a PHP enabled web server instead of at the web client
diff --git a/CMSIS/DoxyGen/RTOS/src/cmsis_os.txt b/CMSIS/DoxyGen/RTOS/src/cmsis_os.txt
index 2a8e07b..e125071 100644
--- a/CMSIS/DoxyGen/RTOS/src/cmsis_os.txt
+++ b/CMSIS/DoxyGen/RTOS/src/cmsis_os.txt
@@ -25,7 +25,7 @@
\mainpage
This manual describes the \b CMSIS-RTOS \b API \b Version \b 1 and the reference implementation
-\ref RTXImplementation "CMSIS-RTOS RTX" which is designed for Cortex-M processor-based devices. The RTOS kernel can be used
+\ref rtxImplementation "CMSIS-RTOS RTX" which is designed for Cortex-M processor-based devices. The RTOS kernel can be used
for creating applications that perform multiple tasks simultaneously. These tasks are executed by threads that operate in a
quasi-parallel fashion.
@@ -39,11 +39,11 @@
This manual contains the following sections:
- \subpage rtos_revisionHistory : Documents changes made in each version for CMSIS-RTOS API and RTX.
- - \subpage GenRTOSIF : Provides an overview about the CMSIS-RTOS API.
- - \subpage UsingOS : Provides generic instructions for using a CMSIS-RTOS API compliant implementation.
- - \subpage FunctionOverview : Lists the CMSIS-RTOS API functions including RTX-specific extensions.
- - \subpage RtosValidation : Describes the Software Pack that can be used to validate a CMSIS-RTOS implementation.
- - \subpage RTXImplementation : Documents the open-source implementation CMSIS-RTOS RTX.
+ - \subpage genRTOSIF : Provides an overview about the CMSIS-RTOS API.
+ - \subpage usingOS : Provides generic instructions for using a CMSIS-RTOS API compliant implementation.
+ - \subpage functionOverview : Lists the CMSIS-RTOS API functions including RTX-specific extensions.
+ - \subpage rtosValidation : Describes the Software Pack that can be used to validate a CMSIS-RTOS implementation.
+ - \subpage rtxImplementation : Documents the open-source implementation CMSIS-RTOS RTX.
\note An extended version of the CMSIS-RTOS API is available in <a class="el" href="../../RTOS2/html/index.html">CMSIS-RTOS v2</a>.
@@ -81,7 +81,7 @@
<tr>
<td>V1.02 - only documentation changes</td>
<td>
- Added: Overview of the \ref RtosValidation "CMSIS-RTOS Validation" Software Pack.\n
+ Added: Overview of the \ref rtosValidation "CMSIS-RTOS Validation" Software Pack.\n
Clarified: Behaviour of \ref CMSIS_RTOS_TimeOutValue.
</td>
</tr>
@@ -236,7 +236,7 @@
/*=======0=========1=========2=========3=========4=========5=========6=========7=========8=========9=========0=========1====*/
/**
-\page UsingOS Using a CMSIS-RTOS Implementation
+\page usingOS Using a CMSIS-RTOS Implementation
A CMSIS-RTOS implementation is typically provided as a library. To add the RTOS functionality to an existing CMSIS-based
application, the RTOS library (and typically a configuration file) needs to be added. The available functionality of the
@@ -358,13 +358,13 @@
/*=======0=========1=========2=========3=========4=========5=========6=========7=========8=========9=========0=========1====*/
/**
-\page FunctionOverview Function Overview
+\page functionOverview Function Overview
The following list provides a brief overview of all CMSIS-RTOS functions. Functions marked with $ are optional.
A specific CMSIS-RTOS implementation may not provide all functions, but this is clearly indicated with \b osFeatureXXXX
defines.
-\note Functions that are not supported by the \ref RTXImplementation, are marked with a (*).
+\note Functions that are not supported by the \ref rtxImplementation, are marked with a (*).
- \ref CMSIS_RTOS_KernelCtrl
- \ref osKernelInitialize : Initialize the RTOS kernel.
@@ -470,7 +470,7 @@
/*=======0=========1=========2=========3=========4=========5=========6=========7=========8=========9=========0=========1====*/
/**
-\page GenRTOSIF Generic RTOS Interface
+\page genRTOSIF Generic RTOS Interface
The CMSIS-RTOS API is a generic RTOS interface for ARM® Cortex®-M processor-based devices. CMSIS-RTOS provides a
standardized API for software components that require RTOS functionality and gives therefore serious benefits to the users
@@ -533,7 +533,7 @@
/*=======0=========1=========2=========3=========4=========5=========6=========7=========8=========9=========0=========1====*/
/**
-\page RtosValidation RTOS Validation
+\page rtosValidation RTOS Validation
ARM offers a <a class=el href="http://www.keil.com/pack" target="_blank">Software Pack</a> for the CMSIS-RTOS Validation.
The <b>ARM::CMSIS-RTOS_Validation</b> Pack contains the following:
@@ -586,7 +586,7 @@
/*=======0=========1=========2=========3=========4=========5=========6=========7=========8=========9=========0=========1====*/
/**
-\page RTXImplementation RTX Implementation
+\page rtxImplementation RTX Implementation
This version of RTX implements the CMSIS-RTOS API, which is a generic RTOS interface for Cortex-M processor-based devices.
The CMSIS-RTOS API provides a standardized interface for software components that require RTOS functionality.
@@ -612,35 +612,35 @@
Compared to the classic Keil RTX version, the CMSIS-RTOS RTX library is extended with the CMSIS API interface module (source
file rt_cmsis.c) which implements the function translation. The header file cmsis_os.h provides the API to the CMSIS-RTOS RTX
-for the user application. Refer to \ref Using for more information.
+for the user application. Refer to \ref using for more information.
CMSIS-RTOS RTX has several options that are configured with the \ref RTX_Conf_CM "RTX_Conf_CM.c" file. Refer to
-\ref Configure for more information.
+\ref configure for more information.
Attributes of the CMSIS-RTOS RTX implementation:
- Provides the complete functions specified for a CMSIS-RTOS with the exception of the function \ref osWait.
- Interrupt Service Routines (ISR) \ref isr_function_calls "may call some CMSIS-RTOS RTX functions".
- - Configurations options for Thread Stack. Refer to \ref ThreadConfig for more information.
+ - Configurations options for Thread Stack. Refer to \ref threadConfig for more information.
- Fully deterministic context switching and deadlock avoidance. Refer to \ref PriorityInversion for more information.
- - Optional Round-Robin Thread switching with configurable time-slices. Refer to \ref ThreadConfig for more information.
+ - Optional Round-Robin Thread switching with configurable time-slices. Refer to \ref threadConfig for more information.
The following sections provide further details:
- - \subpage Theory : provides general information about the operation of CMSIS-RTOS RTX.
- - \subpage Files : explains the directories and files that are supplied as part of CMSIS-RTOS RTX.
- - \subpage TechnicalData : lists hardware requirements and limitations such as number of concurrent threads.
- - \subpage MISRACompliance : describes the violations to the MISRA standard.
- - \subpage Using : Provides instructions for writing and debugging applications with CMSIS-RTOS RTX.
- - \subpage Configure : Describes configuration parameters of CMSIS-RTOS RTX.
- - \subpage ExampleRTX_Tutorial : Is an in-depth tutorial that can be used with any hardware to get a better understanding of
+ - \subpage theory : provides general information about the operation of CMSIS-RTOS RTX.
+ - \subpage files : explains the directories and files that are supplied as part of CMSIS-RTOS RTX.
+ - \subpage technicalData : lists hardware requirements and limitations such as number of concurrent threads.
+ - \subpage misraCompliance : describes the violations to the MISRA standard.
+ - \subpage using : Provides instructions for writing and debugging applications with CMSIS-RTOS RTX.
+ - \subpage configure : Describes configuration parameters of CMSIS-RTOS RTX.
+ - \subpage exampleRTX_Tutorial : Is an in-depth tutorial that can be used with any hardware to get a better understanding of
the concepts and use cases of a real-time operating system.
- - \subpage Creating_RTX_LIB : Describes how to build your own CMSIS-RTOS RTX library.
+ - \subpage creating_RTX_LIB : Describes how to build your own CMSIS-RTOS RTX library.
*/
/* ========================================================================================================================== */
/**
-\page Theory Theory of Operation
+\page theory Theory of Operation
This section describes how CMSIS-RTOS RTX manages the resources of the target system. Many aspects of the CMSIS-RTOS RTX
kernel can be configured. Information about configuration options is mentioned where applicable.
@@ -669,7 +669,7 @@
periodic interrupts for the RTX kernel timer tick. CMSIS-RTOS provides \ref CMSIS_RTOS_TimerMgmt functions and several
CMSIS-RTOS functions have a timeout parameter. This periodic RTX kernel timer tick interrupt is used to derive the required
time interval. CMSIS-RTOS RTX also provides configuration options for a alternative timer and tick-less operation. Refer to
-\ref TimerTick for more information.
+\ref timerTick for more information.
To handle timeout and time delays for threads, the CMSIS-RTOS RTX thread management is controlled by the RTX kernel timer
tick interrupt. The thread context switch itself is implemented in the HAL_CMx.x hardware abstraction layer source files. The
@@ -689,7 +689,7 @@
Each thread is provided with an separate stack that holds the thread context and stack space for automatic variables and
return addresses for function call nesting. The stack sizes of the RTX threads are flexible configurable as explained in the
-section \ref ThreadConfig. RTX even offers a configurable checking for stack overflows. Refer to \ref StackCheck for more
+section \ref threadConfig. RTX even offers a configurable checking for stack overflows. Refer to \ref stackCheck for more
information.
\section RTX_Threads CMSIS-RTOS RTX Threads
@@ -738,7 +738,7 @@
/* ========================================================================================================================== */
/**
-\page Files Directory Structure and File Overview
+\page files Directory Structure and File Overview
The following section provides an overview of the directory structure and the files that are relevant for the user's for
CMSIS-RTOS RTX.
@@ -774,7 +774,7 @@
</tr>
</table>
-\section LibFiles CMSIS-RTOS RTX Library Files
+\section libFiles CMSIS-RTOS RTX Library Files
The CMSIS-RTOS RTX Library is available pre-compiled for ARMCC, GCC, and IAR C/C++ Compilers and supports all Cortex-M
processor variants in every configuration.
@@ -866,7 +866,7 @@
/* ========================================================================================================================== */
/**
-\page TechnicalData Technical Data
+\page technicalData Technical Data
This section lists the technical data of CMSIS-RTOS RTX.
@@ -975,7 +975,7 @@
/* ========================================================================================================================== */
/**
-\page MISRACompliance MISRA-C:2004 Compliance Exceptions
+\page misraCompliance MISRA-C:2004 Compliance Exceptions
CMSIS-RTOS RTX tries to be MISRA-C compliant as much as possible. However, there are some violations in order to simplify
the overall code logic and to generate more efficient code.
@@ -1024,7 +1024,7 @@
/* ========================================================================================================================== */
/**
-\page Using Create an RTX Project
+\page using Create an RTX Project
Example projects using CMSIS-RTOS RTX are available for various development boards. To make use of these examples, you need
to install a Device Family Pack in µVision and use Pack Installer to open a CMSIS-RTOS Blinky project. If you wish to start a
@@ -1046,7 +1046,7 @@
\image html add_item.png
-- Finally, \ref Configure "configure" RTX to the application's needs using the \b %RTX_Conf_CM.c file.
+- Finally, \ref configure "configure" RTX to the application's needs using the \b %RTX_Conf_CM.c file.
\section DefRefObj Define and Reference Object Definitions
@@ -1106,7 +1106,7 @@
Interrupts can be used without limitation. Interrupt priority grouping can be used with some restrictions:
- IRQ interrupts are never disabled by RTX Kernel for ARMv7-M architectures (Cortex-M3/M4/M7).
- Software interrupt 0 is used by RTX and cannot be used in an application.
-- RTX uses its own SVC Handler which is automatically linked from the library. \ref SVCFunctions explains how to use a custom
+- RTX uses its own SVC Handler which is automatically linked from the library. \ref svcFunctions explains how to use a custom
SVC table.
- When interrupt \b priority \b grouping is used, the PRIGROUP must be set before the \ref osKernelInitialize() function is
called (usually in the SystemInit() function in the system_<i>device</i>.c file). The kernel reads the value of PRIGROUP to
@@ -1123,7 +1123,7 @@
/* ========================================================================================================================== */
/**
-\page Configure Configure RTX
+\page configure Configure RTX
The file \ref RTX_Conf_CM "RTX_Conf_CM.c" is used to define the configuration parameters of CMSIS-RTOS RTX. This file must be
part of every project that is using the CMSIS-RTOS RTX kernel.
@@ -1136,25 +1136,25 @@
\image html config_wizard.png "RTX_Conf_CM.c in Configuration Wizard View"
The configuration options are explained on these pages:
-- \subpage ThreadConfig
-- \subpage TimerTick
-- \subpage SystemConfig
+- \subpage threadConfig
+- \subpage timerTick
+- \subpage systemConfig
Other configuration options not covered by the Configuration Wizard are explained here:
-- \subpage LowPower
-- \subpage SVCFunctions
+- \subpage lowPower
+- \subpage svcFunctions
*/
/* ========================================================================================================================== */
/**
-\page ThreadConfig Thread Configuration
+\page threadConfig Thread Configuration
The CMSIS-RTOS RTX provides several parameters for the thread configuration.
- - \ref StackConfig
- - \ref StackCheck
- - \ref ProcessorMode
+ - \ref stackConfig
+ - \ref stackCheck
+ - \ref processorMode
-\section StackConfig Configuration of Thread count and Stack Space
+\section stackConfig Configuration of Thread count and Stack Space
\ref osThreadDef defines a thread function. The parameter \a stacksz specifies thereby the stack requirements of this
thread function. CMSIS-RTOS RTX defines two methods for defining the stack requirements:
@@ -1177,11 +1177,11 @@
|Main Thread stack size [bytes] |\c OS_MAINSTKSIZE|Is the stack requirement (in words) for the main function that is started by default as an RTOS thread.|
|Number of threads with user-provided stack size |\c OS_PRIVCNT |Indicates the number of threads that are defined with \ref osThreadDef \a stacksz != 0 (excluding main). \a stacksz specifies the stack size requirement of that thread.|
|Total stack size [bytes] for threads with user-provided stack size |\c OS_PRIVSTKSIZE|Is the combined stack requirement (in words) of all threads that are defined with with \ref osThreadDef \a stacksz != 0 (excluding main).|
-|\ref StackCheck |\c OS_STKCHECK |If a stack overflow is detected at a thread switch, the function \b os_error with error code = 1 is called. By default, this function is implemented as endless loop and will practically stop code execution.|
-|\ref StackUsage |\c OS_STKINIT |Initializes the thread stack with a watermark pattern that can be used to determine the maximum stack usage within each thread.|
-|\ref ProcessorMode |\c OS_RUNPRIV |Controls the processor mode (privileged/unprivileged)|
+|\ref stackCheck |\c OS_STKCHECK |If a stack overflow is detected at a thread switch, the function \b os_error with error code = 1 is called. By default, this function is implemented as endless loop and will practically stop code execution.|
+|\ref stackUsage |\c OS_STKINIT |Initializes the thread stack with a watermark pattern that can be used to determine the maximum stack usage within each thread.|
+|\ref processorMode |\c OS_RUNPRIV |Controls the processor mode (privileged/unprivileged)|
-\section StackCheck Stack Overflow Checking
+\section stackCheck Stack Overflow Checking
CMSIS-RTOS RTX implements a software stack overflow checking that traps stack overruns. Stack is used for return addresses
and automatic variables and extensive usage or incorrect stack configuration may cause a stack overflow. Software stack
@@ -1190,7 +1190,7 @@
If a stack overflow is detected, the function \b os_error with error code = 1 is called. By default, this function is
implemented as endless loop and will practically stop code execution.
-\section StackUsage Stack Usage Watermark
+\section stackUsage Stack Usage Watermark
The total stack size of an application needs to be as small as possible in a memory restricted embedded system. To be able to
set the smallest stack size for every thread, the developer needs to know the maximum stack usage over the runtime of the
@@ -1204,7 +1204,7 @@
Stack usage watermark is controlled with the <b>\#define OS_STKINIT</b>. Setting this \c \#define increases significantly the
execution time of \ref osThreadCreate (depending on thread stack size).
-\section ProcessorMode Processor Mode for Thread Execution
+\section processorMode Processor Mode for Thread Execution
CMSIS-RTOS RTX allows to execute threads in unprivileged or privileged processor mode. The processor mode is controlled with
the <b>\#define OS_RUNPRIV</b>.
@@ -1221,7 +1221,7 @@
/* ========================================================================================================================== */
/**
-\page TimerTick RTX Kernel Tick Timer Configuration
+\page timerTick RTX Kernel Tick Timer Configuration
The CMSIS-RTOS RTX functions provide delays in units of milliseconds that are derived from the RTX Timer Tick.
It is therefore recommended to configure the RTX Timer Tick to generate a 1 millisecond interval.
@@ -1337,7 +1337,7 @@
/* ========================================================================================================================== */
/**
-\page SystemConfig System Configuration
+\page systemConfig System Configuration
The CMSIS-RTOS RTX provides system-wide settings for:
- \ref RoundRobin
@@ -1420,7 +1420,7 @@
/* ========================================================================================================================== */
/**
-\page LowPower Configuration for Low-Power Modes
+\page lowPower Configuration for Low-Power Modes
The system thread \b os_idle_demon can be use to switch the system into a low-power mode. The easiest form to enter a
low-power mode is the execution of the \c __WFE function that puts the processor into a sleep mode where it waits for an
@@ -1527,7 +1527,7 @@
/* ========================================================================================================================== */
/**
-\page SVCFunctions SVC Functions
+\page svcFunctions SVC Functions
Supervisor Calls (SVC) are exceptions targeted at software and operating systems for generating system function calls. They
are sometimes called software interrupts. For example, instead of allowing user programs to directly access hardware, an
operating system may provide access to hardware through an SVC. So when a user program wants to use certain hardware, it
@@ -1599,7 +1599,7 @@
/* ========================================================================================================================== */
/**
-\page ExampleRTX_Tutorial RTX Tutorial
+\page exampleRTX_Tutorial RTX Tutorial
The tutorial is an excerpt of Trevor Martin's book
<a href="http://store.elsevier.com/product.jsp?isbn=9780080982960&pagename=search" target="_blank">The Designer's Guide to the Cortex-M Processor Family</a>.
@@ -1615,7 +1615,7 @@
/* ========================================================================================================================== */
/**
-\page Creating_RTX_LIB Building the RTX Library
+\page creating_RTX_LIB Building the RTX Library
The CMSIS Pack contains a µVision project for building the set of CMSIS-RTOS RTX libraries. This project can also be used as
a reference for building the CMSIS-RTOS RTX libraries using a tool-chain of your choice.
@@ -1650,7 +1650,7 @@
\brief This section describes the functions that are specific to CMSIS-RTOS RTX.
\details
The RTX kernel can be customized for different application requirements:
-- If you are depending on the \ref LowPower "lowest power consumption" possible, you need to adapt the function
+- If you are depending on the \ref lowPower "lowest power consumption" possible, you need to adapt the function
\ref os_idle_demon to send the system to sleep mode as often as possible. In addition, use the
\ref TickLess "low power RTX extensions" \ref os_suspend and \ref os_resume to suspend the RTX scheduler and to stop the
SysTick timer.
@@ -1669,7 +1669,7 @@
is an empty end-less loop that does nothing. It only waits until another task becomes ready to run. You may change the code
of the \b os_idle_demon function to put the CPU into a power-saving or idle mode.
-The default stack size for this task is defined in the file \b \#RTX_Conf_CM.c. Refer to \ref ThreadConfig entry <b>Default Thread stack size [bytes]</b>.
+The default stack size for this task is defined in the file \b \#RTX_Conf_CM.c. Refer to \ref threadConfig entry <b>Default Thread stack size [bytes]</b>.
\note Cannot be called from \ref CMSIS_RTOS_ISR_Calls "Interrupt Service Routines".
@@ -1938,7 +1938,7 @@
- When \ref osFeature_MainThread is 1 the RTOS offers to start with 'main'. The RTOS kernel is in this case already started.
- When \ref osFeature_MainThread is 0 the RTOS requires explicit start with \ref osKernelStart.
-\ref RTXImplementation "CMSIS-RTOS RTX" Setting: \b osFeature_MainThread is 1
+\ref rtxImplementation "CMSIS-RTOS RTX" Setting: \b osFeature_MainThread is 1
*/
/*=======0=========1=========2=========3=========4=========5=========6=========7=========8=========9=========0=========1====*/
@@ -1948,7 +1948,7 @@
\ref osKernelSysTickFrequency, and \ref osKernelSysTickMicroSec.
- When \ref osFeature_SysTick is 0 access to the RTOS kernel system timer is not implemented.
-\ref RTXImplementation "CMSIS-RTOS RTX" Setting: \b osFeature_SysTick is 1
+\ref rtxImplementation "CMSIS-RTOS RTX" Setting: \b osFeature_SysTick is 1
*/
/*=======0=========1=========2=========3=========4=========5=========6=========7=========8=========9=========0=========1====*/
@@ -2406,7 +2406,7 @@
- When \ref osFeature_Wait is 1 a generic wait function \ref osWait is available.
- When \ref osFeature_Wait is 0 no generic wait function \ref osWait is available.
-\ref RTXImplementation "CMSIS-RTOS RTX" Setting: \b osFeature_Wait is 0
+\ref rtxImplementation "CMSIS-RTOS RTX" Setting: \b osFeature_Wait is 0
*/
/*=======0=========1=========2=========3=========4=========5=========6=========7=========8=========9=========0=========1====*/
@@ -2803,7 +2803,7 @@
The CMSIS-RTOS API may support a variable number of signal flags. This define specifies the number of signal flags available
per thread. The maximum value is 32 signal flags per thread.
-\ref RTXImplementation "CMSIS-RTOS RTX" Setting: \b osFeature_Signals is 16
+\ref rtxImplementation "CMSIS-RTOS RTX" Setting: \b osFeature_Signals is 16
*/
/*=======0=========1=========2=========3=========4=========5=========6=========7=========8=========9=========0=========1====*/
@@ -2963,7 +2963,7 @@
- When \ref osFeature_MailQ is 1 message queues are supported.
- When \ref osFeature_MailQ is 0 no message queues are supported.
-\ref RTXImplementation "CMSIS-RTOS RTX" Setting: \b osFeature_MessageQ is 1
+\ref rtxImplementation "CMSIS-RTOS RTX" Setting: \b osFeature_MessageQ is 1
*/
/*=======0=========1=========2=========3=========4=========5=========6=========7=========8=========9=========0=========1====*/
@@ -3159,7 +3159,7 @@
- When \ref osFeature_Pool is 1 memory pools are supported.
- When \ref osFeature_Pool is 0 no memory pools are supported.
-\ref RTXImplementation "CMSIS-RTOS RTX" Setting: \b osFeature_Pool is 1
+\ref rtxImplementation "CMSIS-RTOS RTX" Setting: \b osFeature_Pool is 1
*/
/*=======0=========1=========2=========3=========4=========5=========6=========7=========8=========9=========0=========1====*/
@@ -3389,7 +3389,7 @@
- When \ref osFeature_MailQ is 1 mail queues are supported.
- When \ref osFeature_MailQ is 0 no mail queues are supported.
-\ref RTXImplementation "CMSIS-RTOS RTX" Setting: \b osFeature_MailQ is 1
+\ref rtxImplementation "CMSIS-RTOS RTX" Setting: \b osFeature_MailQ is 1
*/
/*=======0=========1=========2=========3=========4=========5=========6=========7=========8=========9=========0=========1====*/
@@ -3851,7 +3851,7 @@
A CMSIS-RTOS implementation may support semaphores. The value \ref osFeature_Semaphore indicates the maximum index count for
a semaphore.
-\ref RTXImplementation "CMSIS-RTOS RTX" Setting: \b osFeature_Semaphore is 65535
+\ref rtxImplementation "CMSIS-RTOS RTX" Setting: \b osFeature_Semaphore is 65535
*/
/*=======0=========1=========2=========3=========4=========5=========6=========7=========8=========9=========0=========1====*/
diff --git a/CMSIS/DoxyGen/RTOS2/rtos.dxy b/CMSIS/DoxyGen/RTOS2/rtos.dxy
index 2113164..05c66a2 100644
--- a/CMSIS/DoxyGen/RTOS2/rtos.dxy
+++ b/CMSIS/DoxyGen/RTOS2/rtos.dxy
@@ -196,7 +196,7 @@
# The TAB_SIZE tag can be used to set the number of spaces in a tab.
# Doxygen uses this value to replace tabs by spaces in code fragments.
-TAB_SIZE = 8
+TAB_SIZE = 9
# This tag can be used to specify a number of aliases that acts
# as commands in the documentation. An alias has the form "name=value".
@@ -205,7 +205,12 @@
# will result in a user-defined paragraph with heading "Side Effects:".
# You can put \n's in the value part of an alias to insert newlines.
-ALIASES =
+ALIASES = "token{1}=<span class=\"XML-Token\">\1</span>" \
+ "div{1}=<hr><div class=\"\1\">" \
+ "enddiv= </div>" \
+ "func{1}=<kbd>\1</kbd> <br>" \
+ "copybrief{1}=<br> \copybrief \1 <br>" \
+ "none=\em none <br>"
# This tag can be used to specify a number of word-keyword mappings (TCL only).
# A mapping has the form "name=value". For example adding
@@ -533,19 +538,19 @@
# disable (NO) the todo list. This list is created by putting \todo
# commands in the documentation.
-GENERATE_TODOLIST = YES
+GENERATE_TODOLIST = NO
# The GENERATE_TESTLIST tag can be used to enable (YES) or
# disable (NO) the test list. This list is created by putting \test
# commands in the documentation.
-GENERATE_TESTLIST = YES
+GENERATE_TESTLIST = NO
# The GENERATE_BUGLIST tag can be used to enable (YES) or
# disable (NO) the bug list. This list is created by putting \bug
# commands in the documentation.
-GENERATE_BUGLIST = YES
+GENERATE_BUGLIST = NO
# The GENERATE_DEPRECATEDLIST tag can be used to enable (YES) or
# disable (NO) the deprecated list. This list is created by putting
@@ -676,7 +681,20 @@
# with spaces.
INPUT = . \
- ../../RTOS2/Template/cmsis_os.h
+ ../../RTOS2/Include/cmsis_os2.h \
+ ./src/cmsis_os2.txt \
+ ./src/cmsis_os2_Kernel.txt \
+ ./src/cmsis_os2_Thread.txt \
+ ./src/cmsis_os2_Wait.txt \
+ ./src/cmsis_os2_ThreadFlags.txt \
+ ./src/cmsis_os2_Event.txt \
+ ./src/cmsis_os2_Mutex.txt \
+ ./src/cmsis_os2_Sema.txt \
+ ./src/cmsis_os2_Timer.txt \
+ ./src/cmsis_os2_MemPool.txt \
+ ./src/cmsis_os2_Message.txt \
+ ./src/cmsis_os2_Status.txt \
+ ./src/cmsis_os2_Migration.txt
# This tag can be used to specify the character encoding of the source files
# that doxygen parses. Internally doxygen uses the UTF-8 encoding, which is
@@ -731,7 +749,7 @@
# should be searched for input files as well. Possible values are YES and NO.
# If left blank NO is used.
-RECURSIVE = YES
+RECURSIVE = NO
# The EXCLUDE tag can be used to specify files and/or directories that should be
# excluded from the INPUT source files. This way you can easily exclude a
@@ -768,7 +786,9 @@
# directories that contain example code fragments that are included (see
# the \include command).
-EXAMPLE_PATH = ..\..\RTOS2
+EXAMPLE_PATH = ../../RTOS2/Include \
+ ../../RTOS2 \
+ ../../RTOS2/Template
# If the value of the EXAMPLE_PATH tag contains directories, you can use the
# EXAMPLE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp
@@ -849,13 +869,13 @@
# then for each documented function all documented
# functions referencing it will be listed.
-REFERENCED_BY_RELATION = NO
+REFERENCED_BY_RELATION = YES
# If the REFERENCES_RELATION tag is set to YES
# then for each documented function all documented entities
# called/used by that function will be listed.
-REFERENCES_RELATION = NO
+REFERENCES_RELATION = YES
# If the REFERENCES_LINK_SOURCE tag is set to YES (the default)
# and SOURCE_BROWSER tag is set to YES, then the hyperlinks from
@@ -969,7 +989,8 @@
HTML_EXTRA_FILES = ../Doxygen_Templates/tabs.css \
../Doxygen_Templates/tab_topnav.png \
- ../Doxygen_Templates/printComponentTabs.js
+ ../Doxygen_Templates/printComponentTabs.js \
+ ../Doxygen_Templates/search.css
# The HTML_COLORSTYLE_HUE tag controls the color of the HTML output.
# Doxygen will adjust the colors in the style sheet and background images
@@ -985,7 +1006,7 @@
# the colors in the HTML output. For a value of 0 the output will use
# grayscales only. A value of 255 will produce the most vivid colors.
-HTML_COLORSTYLE_SAT = 100
+HTML_COLORSTYLE_SAT = 103
# The HTML_COLORSTYLE_GAMMA tag controls the gamma correction applied to
# the luminance component of the colors in the HTML output. Values below
@@ -1257,7 +1278,7 @@
# typically be disabled. For large projects the javascript based search engine
# can be slow, then enabling SERVER_BASED_SEARCH may provide a better solution.
-SEARCHENGINE = NO
+SEARCHENGINE = YES
# When the SERVER_BASED_SEARCH tag is enabled the search engine will be
# implemented using a PHP enabled web server instead of at the web client
diff --git a/CMSIS/DoxyGen/RTOS2/src/cmsis_os.txt b/CMSIS/DoxyGen/RTOS2/src/cmsis_os.txt
index 8c48443..67a9779 100644
--- a/CMSIS/DoxyGen/RTOS2/src/cmsis_os.txt
+++ b/CMSIS/DoxyGen/RTOS2/src/cmsis_os.txt
@@ -475,13 +475,13 @@
*/
/*=======0=========1=========2=========3=========4=========5=========6=========7=========8=========9=========0=========1====*/
-/** \def osCMSIS
+/* \def osCMSIS
Version information of the CMSIS-RTOS API whereby major version is in bits [31:16] and sub version in bits [15:0].
The value 0x10000 represents version 1.00.
*/
/*=======0=========1=========2=========3=========4=========5=========6=========7=========8=========9=========0=========1====*/
-/** \def osCMSIS_KERNEL
+/* \def osCMSIS_KERNEL
Identifies the underlying RTOS kernel and version number. The actual name of that define depends on the RTOS Kernel used in
the implementation. For example, \b osCMSIS_FreeRTOS identifies the FreeRTOS kernel and the value indicates the version
number of that kernel whereby the major version is in bits [31:16] and sub version in bits [15:0]. The value 0x10000
@@ -489,17 +489,23 @@
*/
/*=======0=========1=========2=========3=========4=========5=========6=========7=========8=========9=========0=========1====*/
-/** \def osKernelSystemId
+/* \def osKernelSystemId
Defines a string that identifies the underlying RTOS Kernel and provides version information. The length of that string is
limited to 21 bytes. A valid identification string is for example, <b>"FreeRTOS V1.00"</b>.
*/
/*=======0=========1=========2=========3=========4=========5=========6=========7=========8=========9=========0=========1====*/
-/** \def osFeature_KernelSysTick
+/* \def osFeature_KernelSysTick
Defines if a Kernel SysTick timer is available or not.
*/
/*=======0=========1=========2=========3=========4=========5=========6=========7=========8=========9=========0=========1====*/
+/**
+\typedef osKernelState_t
+Kernel state definitions.
+*/
+
+/*=======0=========1=========2=========3=========4=========5=========6=========7=========8=========9=========0=========1====*/
/** \fn osStatus osKernelInitialize (void)
Initialize of the RTOS Kernel to allow peripheral setup and creation of other RTOS objects with the functions:
- \ref osThreadNew : Create a thread function.
@@ -648,10 +654,10 @@
/*=======0=========1=========2=========3=========4=========5=========6=========7=========8=========9=========0=========1====*/
// ==== Thread Management Functions ====
/**
-@addtogroup CMSIS_RTOS_ThreadMgmt Thread Management
-@ingroup CMSIS_RTOS CMSIS_RTOSv2
-@brief Define, create, and control thread functions.
-@details
+\addtogroup CMSIS_RTOS_ThreadMgmt Thread Management
+\ingroup CMSIS_RTOS CMSIS_RTOSv2
+\brief Define, create, and control thread functions.
+\details
The Thread Management function group allows defining, creating, and controlling thread functions in the system. The function
\b main is a special thread function that is started at system initialization and has the initial priority
\a osPriorityNormal.
@@ -682,6 +688,21 @@
@{
*/
+/*=======0=========1=========2=========3=========4=========5=========6=========7=========8=========9=========0=========1====*/
+/** \def osThreadJoinable
+
+Reference:
+ - \ref osThreadAttr_t
+ - \ref osThreadJoin
+*/
+
+/*=======0=========1=========2=========3=========4=========5=========6=========7=========8=========9=========0=========1====*/
+/** \def osThreadDetached
+
+Reference:
+ - \ref osThreadAttr_t
+ - \ref osThreadDetach
+*/
/*=======0=========1=========2=========3=========4=========5=========6=========7=========8=========9=========0=========1====*/
/** \def osThreadAttrInit
@@ -689,19 +710,8 @@
*/
/*=======0=========1=========2=========3=========4=========5=========6=========7=========8=========9=========0=========1====*/
-/** \typedef osPriority
-Priority used for thread control.
-*/
-
-/*=======0=========1=========2=========3=========4=========5=========6=========7=========8=========9=========0=========1====*/
/**
-\typedef osKernelState
-Kernel state definitions.
-*/
-
-/*=======0=========1=========2=========3=========4=========5=========6=========7=========8=========9=========0=========1====*/
-/**
-\typedef osThreadState
+\typedef osThreadState_t
Thread state definitions.
*/
@@ -713,7 +723,7 @@
/*=======0=========1=========2=========3=========4=========5=========6=========7=========8=========9=========0=========1====*/
/**
-\typedef osPriority
+\typedef osPriority_t
\note MUST REMAIN UNCHANGED: \b osPriority shall be consistent in every CMSIS-RTOS.
\note Cannot be called from \ref CMSIS_RTOS_ISR_Calls "Interrupt Service Routines".
@@ -1013,13 +1023,37 @@
*/
/*=======0=========1=========2=========3=========4=========5=========6=========7=========8=========9=========0=========1====*/
-/** \def osFeature_ThreadFlags
+/** \def osFlagsWaitAny
+Wait forever timeout value.
+
+Reference:
+ - \ref osEventFlagsWait
+ - \ref osThreadFlagsWait
+*/
+
+/*=======0=========1=========2=========3=========4=========5=========6=========7=========8=========9=========0=========1====*/
+/** \def osFlagsWaitAll
+
+Reference:
+ - \ref osEventFlagsWait
+ - \ref osThreadFlagsWait
+*/
+
+/*=======0=========1=========2=========3=========4=========5=========6=========7=========8=========9=========0=========1====*/
+/** \def osFlagsAutoClear
+
+Reference:
+ - \ref osEventFlagsWait
+ - \ref osThreadFlagsWait
+*/
+
+/*=======0=========1=========2=========3=========4=========5=========6=========7=========8=========9=========0=========1====*/
+/* \def osFeature_ThreadFlags
Defined the maximum number of Thread Flags available per thread.
*/
/*=======0=========1=========2=========3=========4=========5=========6=========7=========8=========9=========0=========1====*/
-/** \fn osStatus osThreadFlagsSet (osThreadId thread_id, int32_t flags);
-
+/** \fn int32_t osThreadFlagsSet (osThreadId_t thread_id, int32_t flags )
<b>Code Example</b>
\code
\endcode
@@ -1066,7 +1100,11 @@
/*=======0=========1=========2=========3=========4=========5=========6=========7=========8=========9=========0=========1====*/
/** \def osWaitForever
-Wait forever timeout value.
+Wait forever timeout value.
+
+Reference:
+ - \ref osDelay
+ - \ref osDelayUntil
*/
/*=======0=========1=========2=========3=========4=========5=========6=========7=========8=========9=========0=========1====*/
@@ -2616,6 +2654,11 @@
*/
/*=======0=========1=========2=========3=========4=========5=========6=========7=========8=========9=========0=========1====*/
+/** \fn osMailQId osMailCreate ( const osMailQDef_t * queue_def, osThreadId thread_id )
+
+*/
+
+/*=======0=========1=========2=========3=========4=========5=========6=========7=========8=========9=========0=========1====*/
/** \fn osStatus osMailQueueGetInfo (osMailQueueId queue_id, uint32_t *queue_size, uint32_t *mail_size, uint32_t *mail_count)
*/
diff --git a/CMSIS/DoxyGen/RTOS2/src/cmsis_os2.txt b/CMSIS/DoxyGen/RTOS2/src/cmsis_os2.txt
new file mode 100644
index 0000000..31db901
--- /dev/null
+++ b/CMSIS/DoxyGen/RTOS2/src/cmsis_os2.txt
@@ -0,0 +1,511 @@
+/*=======0=========1=========2=========3=========4=========5=========6=========7=========8=========9=========0=========1====*/
+/**
+\mainpage
+
+The <b>CMSIS-RTOS API v2</b> addresses the following new requirements:
+ - Dynamic object creation no longer requires static memory, static memory buffers are now optional.
+ - Support for ARMv8-M architecture that provides a Secure and Non-Secure state of code execution.
+ - Provisions for message passing in multi-core systems.
+ - Full support of C++ run-time environments.
+ - C interface which is binary compatible across <a class="el" href="http://infocenter.arm.com/help/topic/com.arm.doc.subset.swdev.abi/index.html">ABI compatible compilers</a>.
+
+As a consequence of these requirements the CMSIS-RTOS API v2 has the following fundamental modifications:
+ - The functions osXxxxNew replace osXxxxCreate functions; osXxxxNew and osXxxxDelete create and destroy objects.
+ - The C function main is not longer started as a thread (this was an optional feature in CMSIS-RTOS v1).
+ - Functions that return osEvent have been replaced.
+
+CMSIS-RTOS API v2 provides an translation layer for the
+<a class="el" href="../../RTOS/html/index.html">CMSIS-RTOS API v1</a> that simplifies migration.
+
+CMSIS-RTOS API v2 is not POSIX compliant, but has provisions to enable a POSIX translation layer and a C++ interface.
+\todo Investigate into a flexible C++ interface and potential POSIX translation
+
+<hr>
+
+CMSIS-RTOS in ARM::CMSIS Pack
+-----------------------------
+
+The following files relevant to CMSIS-RTOS are present in the <b>ARM::CMSIS</b> Pack directories:
+File/Folder | Content
+-----------------------------|------------------------------------------------------------------------
+\b CMSIS/Documentation/RTOS2 | This documentation
+\b CMSIS/Documentation/RTOS | CMSIS-RTOS API v1 documentation
+\b CMSIS/RTOS2/Template | \ref cmsis_os2_h
+*/
+
+
+/*=======0=========1=========2=========3=========4=========5=========6=========7=========8=========9=========0=========1====*/
+/**
+\page rtos_revisionHistory Revision History
+
+<table class="cmtable" summary="Revision History">
+ <tr>
+ <th>Version</th>
+ <th>Description</th>
+ </tr>
+ <tr>
+ <td>V2.00</td>
+ <td>
+ Extended number of thread priorities.\n
+ Added: osKernelTime, osKernelStop.\n
+ Added: osThreadState, osThreadGetState, osThreadSuspend, osThreadResume.\n
+ Added: osTimerRunning.\n
+ Added: osPoolDelete.\n
+ Added: osMessageCount, osMessageReset, osMessageDelete.\n
+ Added: osMailCount, osMailReset, osMailDelete.\n
+ Added: osFlag object.\n
+ </td>
+ </tr>
+ <tr>
+ <td>V1.02 - only documentation changes</td>
+ <td>
+ Added: Overview of the \ref rtosValidation "CMSIS-RTOS Validation" Software Pack.\n
+ Clarified: Behavior of \ref CMSIS_RTOS_TimeOutValue.
+ </td>
+ </tr>
+ <tr>
+ <td>V1.02</td>
+ <td>Added: New control functions for short timeouts in microsecond resolution \b osKernelSysTick,
+ \b osKernelSysTickFrequency, \b osKernelSysTickMicroSec.\n
+ Removed: osSignalGet.
+ </td>
+ </tr>
+ <tr>
+ <td>V1.01</td>
+ <td>Added capabilities for C++, kernel initialization and object deletion.\n
+ Prepared for C++ class interface. In this context to \em const attribute has been moved from osXxxxDef_t typedefs to
+ the osXxxxDef macros.\n
+ Added: \ref osTimerDelete, \ref osMutexDelete, \ref osSemaphoreDelete.\n
+ Added: \ref osKernelInitialize that prepares the Kernel for object creation.\n
+ </td>
+ </tr>
+ <tr>
+ <td>
+ V1.00</td>
+ <td>First official Release.\n
+ Added: \ref osKernelStart; starting 'main' as a thread is now an optional feature.\n
+ Semaphores have now the standard behavior.\n
+ \b osTimerCreate does no longer start the timer. Added: \ref osTimerStart (replaces osTimerRestart).\n
+ Changed: osThreadPass is renamed to \ref osThreadYield.
+ </td>
+ </tr>
+ <tr>
+ <td>V0.02</td>
+ <td>Preview Release.</td>
+ </tr>
+</table>
+*/
+
+
+/*=======0=========1=========2=========3=========4=========5=========6=========7=========8=========9=========0=========1====*/
+/**
+\page functionOverview Function Overview
+
+CMSIS-RTOS v2 provides multiple API functions:
+ - \subpage rtos_api2 is the new C function API that support dynamic object creation, ARMv8-M, and multi-processor
+ communication.
+ - <a class="el" href="../../RTOSv1/html/_function_overview.html">CMSIS-RTOS C API Version 1</a> is a C function API the is
+ backward compatible with CMSIS-RTOS v2.
+ - \subpage rtos_apicpp is a C++ class function API.
+
+It is possible to intermix the different API variants in the same application and even in the same C/C++ source module.
+However, the functions of the <b>C API Version 1</b> may be deprecated in future versions of CMSIS-RTOS.
+
+\section CMSIS_RTOS_TimeOutValue Timeout Value
+
+The timeout value specifies the number of timer ticks until a timeout or time delay elapses. The value is an upper bound and
+depends on the actual time elapsed since the last timer tick.
+
+For a value of \b 1 the system waits until the next timer tick occurs. That means that the actual timeout value can be one
+timer tick less than the specified timeout value.
+
+\image html TimerValues.png "Timer Values"
+
+\section CMSIS_RTOS_ISR_Calls Calls from Interrupt Service Routines
+
+\todo Can any of the new functions be called from ISRs?
+
+The following CMSIS-RTOS functions can be called from threads and Interrupt Service Routines (ISR):
+ - \ref osKernelRunning
+ - \ref osSemaphoreRelease
+ - \ref osMemoryPoolAlloc, \ref osMemoryPoolFree
+ - \ref osMessageQueuePut, \ref osMessageQueueGet
+
+Functions that cannot be called from an ISR are verifying the interrupt status and return, in case they are called
+from an ISR context, the status code \b osErrorISR. In some implementations, this condition might be caught using the HARD
+FAULT vector.
+
+Some CMSIS-RTOS implementations support CMSIS-RTOS function calls from multiple ISRs at the same time.
+If this is impossible, the CMSIS-RTOS rejects calls by nested ISR functions with the status code \b osErrorISRRecursive.
+*/
+
+
+
+/*=======0=========1=========2=========3=========4=========5=========6=========7=========8=========9=========0=========1====*/
+/**
+\page rtos_api2 CMSIS-RTOS C API Version 2
+
+Overview of all CMSIS-RTOS C API v2 functions.
+
+ - \ref CMSIS_RTOS_KernelCtrl
+ - \ref osKernelGetInfo : \copybrief osKernelGetInfo
+ - \ref osKernelGetState : \copybrief osKernelGetState
+ - \ref osKernelGetTick : \copybrief osKernelGetTick
+ - \ref osKernelGetTime : \copybrief osKernelGetTime
+ - \ref osKernelInitialize : \copybrief osKernelInitialize
+ - \ref osKernelLock : \copybrief osKernelLock
+ - \ref osKernelResume : \copybrief osKernelResume
+ - \ref osKernelStart : \copybrief osKernelStart
+ - \ref osKernelSuspend : \copybrief osKernelSuspend
+ - \ref osKernelTickMicroSec : \copybrief osKernelTickMicroSec
+ - \ref osKernelUnlock : \copybrief osKernelUnlock
+
+ - \ref CMSIS_RTOS_ThreadMgmt
+ - \ref osThreadAbortWait : \copybrief osThreadAbortWait
+ - \ref osThreadDetach : \copybrief osThreadDetach
+ - \ref osThreadExit : \copybrief osThreadExit
+ - \ref osThreadGetId : \copybrief osThreadGetId
+ - \ref osThreadGetPriority : \copybrief osThreadGetPriority
+ - \ref osThreadGetState : \copybrief osThreadGetState
+ - \ref osThreadJoin : \copybrief osThreadJoin
+ - \ref osThreadNew : \copybrief osThreadNew
+ - \ref osThreadResume : \copybrief osThreadResume
+ - \ref osThreadSetPriority : \copybrief osThreadSetPriority
+ - \ref osThreadSuspend : \copybrief osThreadSuspend
+ - \ref osThreadTerminate : \copybrief osThreadTerminate
+ - \ref osThreadYield : \copybrief osThreadYield
+
+ - \ref CMSIS_RTOS_Wait
+ - \ref osWaitForever : \copybrief osWaitForever
+ - \ref osDelay : \copybrief osDelay
+ - \ref osDelayUntil : \copybrief osDelayUntil
+
+ - \ref CMSIS_RTOS_TimerMgmt
+ - \ref osTimerDelete : \copybrief osTimerDelete
+ - \ref osTimerIsRunning : \copybrief osTimerIsRunning
+ - \ref osTimerNew : \copybrief osTimerNew
+ - \ref osTimerStart : \copybrief osTimerStart
+ - \ref osTimerStop : \copybrief osTimerStop
+
+ - \ref CMSIS_RTOS_EventFlags
+ - \ref osEventFlagsNew : \copybrief osEventFlagsNew
+ - \ref osEventFlagsDelete : \copybrief osEventFlagsDelete
+ - \ref osEventFlagsSet : \copybrief osEventFlagsSet
+ - \ref osEventFlagsClear : \copybrief osEventFlagsClear
+ - \ref osEventFlagsGet : \copybrief osEventFlagsGet
+ - \ref osEventFlagsWait : \copybrief osEventFlagsWait
+
+ - \ref CMSIS_RTOS_ThreadFlagsMgmt
+ - \ref osFlagsAutoClear : \copybrief osFlagsAutoClear
+ - \ref osFlagsWaitAll : \copybrief osFlagsWaitAll
+ - \ref osFlagsWaitAny : \copybrief osFlagsWaitAny
+ - \ref osThreadFlagsSet : \copybrief osThreadFlagsSet
+ - \ref osThreadFlagsWait : \copybrief osThreadFlagsWait
+
+ - \ref CMSIS_RTOS_Message
+ - \ref osMessageQueueDelete : \copybrief osMessageQueueDelete
+ - \ref osMessageQueueGet : \copybrief osMessageQueueGet
+ - \ref osMessageQueueGetCapacity : \copybrief osMessageQueueGetCapacity
+ - \ref osMessageQueueGetCount : \copybrief osMessageQueueGetCount
+ - \ref osMessageQueueGetMsgSize : \copybrief osMessageQueueGetMsgSize
+ - \ref osMessageQueueGetSpace : \copybrief osMessageQueueGetSpace
+ - \ref osMessageQueueNew : \copybrief osMessageQueueNew
+ - \ref osMessageQueuePut : \copybrief osMessageQueuePut
+ - \ref osMessageQueueReset : \copybrief osMessageQueueReset
+
+ - \ref CMSIS_RTOS_PoolMgmt
+ - \ref osMemoryPoolAlloc : \copybrief osMemoryPoolAlloc
+ - \ref osMemoryPoolDelete : \copybrief osMemoryPoolDelete
+ - \ref osMemoryPoolFree : \copybrief osMemoryPoolFree
+ - \ref osMemoryPoolGetBlockSize : \copybrief osMemoryPoolGetBlockSize
+ - \ref osMemoryPoolGetCapacity : \copybrief osMemoryPoolGetCapacity
+ - \ref osMemoryPoolGetCount : \copybrief osMemoryPoolGetCount
+ - \ref osMemoryPoolGetSpace : \copybrief osMemoryPoolGetSpace
+ - \ref osMemoryPoolNew : \copybrief osMemoryPoolNew
+
+ - \ref CMSIS_RTOS_MutexMgmt
+ - \ref osMutexAcquire : \copybrief osMutexAcquire
+ - \ref osMutexDelete : \copybrief osMutexDelete
+ - \ref osMutexGetOwner : \copybrief osMutexGetOwner
+ - \ref osMutexNew : \copybrief osMutexNew
+ - \ref osMutexRelease : \copybrief osMutexRelease
+
+ - \ref CMSIS_RTOS_SemaphoreMgmt
+ - \ref osSemaphoreAcquire : \copybrief osSemaphoreAcquire
+ - \ref osSemaphoreDelete : \copybrief osSemaphoreDelete
+ - \ref osSemaphoreGetCount : \copybrief osSemaphoreGetCount
+ - \ref osSemaphoreNew : \copybrief osSemaphoreNew
+ - \ref osSemaphoreRelease : \copybrief osSemaphoreRelease
+*/
+
+/*=======0=========1=========2=========3=========4=========5=========6=========7=========8=========9=========0=========1====*/
+/**
+\page rtos_apicpp CMSIS-RTOS C++ API
+
+Coming soon
+*/
+
+
+/*=======0=========1=========2=========3=========4=========5=========6=========7=========8=========9=========0=========1====*/
+/**
+\page cmsis_os2_h Header File Template: cmsis_os2.h
+
+The file \b cmsis_os2.h is a template header file for a CMSIS-RTOS compliant Real-Time Operating System (RTOS).
+Each RTOS that is compliant with CMSIS-RTOS shall provide a specific \b cmsis_os2.h header file that represents
+its implementation.
+
+The file cmsis_os2.h contains:
+ - CMSIS-RTOS API function definitions
+ - struct definitions for parameters and return types
+ - status and priority values used by CMSIS-RTOS API functions
+ - macros for defining threads and other kernel objects
+
+
+<b>Name conventions and header file modifications</b>
+
+All definitions are prefixed with \b os to give an unique name space for CMSIS-RTOS functions.
+Definitions that are prefixed \b os_ are not used in the application code but local to this header file.
+All definitions and functions that belong to a module are grouped and have a common prefix, i.e. \b osThread.
+
+Definitions that are marked with <b>CAN BE CHANGED</b> can be adapted towards the needs of the actual CMSIS-RTOS
+implementation. These definitions can be specific to the underlying RTOS kernel.
+
+Definitions that are marked with <b>MUST REMAIN UNCHANGED</b> cannot be altered. Otherwise the CMSIS-RTOS implementation is
+no longer compliant to the standard. Note that some functions are optional and need not to be provided by every CMSIS-RTOS
+implementation.
+
+<b>Define and reference object definitions</b>
+
+With <b>\#define osObjectsExternal</b> objects are defined as external symbols. This allows to create a consistent header
+file that is used throughout a project as shown below:
+
+<i>Header File</i>
+\code
+#include <cmsis_os2.h> // CMSIS RTOS header file
+
+// Thread definition
+
+// Pool definition
+
+\endcode
+
+\todo add the code for pool and thread creation.
+
+This header file defines all objects when included in a C/C++ source file. When <b>\#define osObjectsExternal</b> is
+present before the header file, the objects are defined as external symbols. A single consistent header file can therefore be
+used throughout the whole project.
+
+<i>Example</i>
+\code
+#include "osObjects.h" // Definition of the CMSIS-RTOS objects
+\endcode
+
+\code
+#define osObjectsExternal // Objects will be defined as external symbols
+#include "osObjects.h" // Reference to the CMSIS-RTOS objects
+\endcode
+
+<b>Header file %cmsis_os2.h</b>
+
+\include cmsis_os2.h
+*/
+
+/*=======0=========1=========2=========3=========4=========5=========6=========7=========8=========9=========0=========1====*/
+/**
+\page rtx5_impl RTX5 Implementation
+
+The following chapters guide you towards implementing the CMSIS-RTOS RTX:
+ - \subpage theory_op
+ - \subpage cre_rtx_proj
+ - \subpage config_rtx
+*/
+
+/*=======0=========1=========2=========3=========4=========5=========6=========7=========8=========9=========0=========1====*/
+/**
+\page theory_op Theory of Operation
+
+This section describes how CMSIS-RTOS RTX manages the resources of the target system. Many aspects of the CMSIS-RTOS RTX
+kernel can be configured. Information about configuration options is mentioned where applicable.
+
+\section KernelTimer RTX Kernel Timer Tick and Thread Management
+
+By default, CMSIS-RTOS RTX5 uses the Cortex-M
+<a href="http://www.keil.com/support/man/docs/gsac/GSAC_SYSTICKtimer.htm" target="_blank">SysTick</a> timer to generate
+periodic interrupts for the RTX kernel timer tick. CMSIS-RTOS provides \ref CMSIS_RTOS_TimerMgmt functions and several
+CMSIS-RTOS functions have a timeout parameter. This periodic RTX kernel timer tick interrupt is used to derive the required
+time interval. CMSIS-RTOS RTX also provides configuration options for a alternative timer and tick-less operation.
+
+To handle timeout and time delays for threads, the CMSIS-RTOS RTX thread management is controlled by the RTX kernel timer
+tick interrupt. The thread context switch itself is implemented in the HAL_CMx.x hardware abstraction layer source files. The
+thread context contains all CPU registers (R0 - R12), the return address (LR), the program counter (PC), and the processor
+status register (xPSR). For the Cortex-M4 FPU and Cortex-M7 FPU the floating point status and registers (S0 - S32, FPSCR) are
+also part of the thread context.
+
+When a thread switch occurs:
+ - the thread context of the current running thread is stored on the local stack of this thread.
+ - the stack pointer is switched to the next running thread.
+ - the thread context of this next running thread is restored and this thread starts to run.
+
+\note
+- For Cortex-M0, Cortex-M3, Cortex-M4, and Cortex-M7 the thread context requires 64 bytes on the local stack.
+- For Cortex-M4 FPU and Cortex-M7 FPU the thread context requires 200 bytes on the local stack. For devices with Cortex-M4 FPU and Cortex-M7 FPU the default stack space should be increased to a minimum of 300 bytes.
+
+Each thread is provided with an separate stack that holds the thread context and stack space for automatic variables and return addresses for function call nesting. The stack sizes of the RTX threads are flexible configurable as explained in the section \ref threadConfig. RTX even offers a configurable checking for stack overflows and stack utilization.
+
+*/
+
+/*=======0=========1=========2=========3=========4=========5=========6=========7=========8=========9=========0=========1====*/
+/**
+\page cre_rtx_proj Create an RTX Project
+
+Example projects using CMSIS-RTOS RTX are available for various development boards. To make use of these examples, you need
+to install a Device Family Pack in µVision and use Pack Installer to open a CMSIS-RTOS2 Blinky project. If you wish to start a CMSIS-RTOS RTX5 from scratch, follow these steps:
+- Create a new project and select a device.
+- In the Manage Run-Time Environment window that opens, select <b>CMSIS\::CORE</b> and <b>CMSIS\::RTOS2 (API)\::Keil RTX5</b>.
+ If the <b>Validation Output</b> requires other components to be present, try to use the \b Resolve button:
+
+ \image html manage_rte_output.png
+
+- Click \b OK. In the \b Project window, you will see the files that have been automatically added to you project, such as
+ \b %RTX_Config.c and the system and startup files:
+
+ \image html project_window.png
+
+- You can add template files to the project by right-clicking on <b>Source Group 1</b> and selecting
+ <b>Add New Item to 'Source Group 1'</b>. In the new window, click on <b>User Code Template</b>. On the right-hand side
+ you will see all available template files for CMSIS-RTOS RTX:
+
+ \image html add_item.png
+
+- Finally, \ref config_rtx "configure" RTX to the application's needs using the \b %RTX_Config.c file.
+*/
+
+/*=======0=========1=========2=========3=========4=========5=========6=========7=========8=========9=========0=========1====*/
+/**
+\page config_rtx Configure RTX
+
+The file "RTX_Config.c" is used to define the configuration parameters of CMSIS-RTOS RTX. This file must be part of every project that is using the CMSIS-RTOS RTX kernel.
+
+The configuration file uses
+<a class="el" href="http://www.keil.com/pack/doc/CMSIS/Pack/html/_config_wizard.html" target="_blank">Configuration Wizard Annotations</a>.
+Depending on the development tool that is used, this might lead to a more user friendly graphical representation of the settings. The following is a screenshot of the same configuration file using µVision's Configuration Wizard view:
+
+\image html config_wizard.png "RTX_Conf_CM.c in Configuration Wizard View"
+
+The configuration options are explained on these pages:
+- \subpage threadConfig
+
+*/
+
+
+/* ========================================================================================================================== */
+/**
+\page threadConfig Thread Configuration
+
+The CMSIS-RTOS RTX provides several parameters for the thread configuration.
+
+\section stackConfig Configuration of Thread count and Stack Space
+
+\ref osThreadAttr_t is passed to osThreadNew to set the options of a thread.
+
+CMSIS-RTOS RTX defines two methods for defining the stack requirements:
+ - when \a *stack_mem in osThreadAttr_t is NULL, a fixed-size memory pool is used to for the thread stack. In this case \b OS_STKSIZE specifies the stack size for the thread function.
+ - when \a *stack_mem specifies a memory location, the thread stack provided there. The size of this user space is specified with \b stack_size.
+
+Stack memory for threads is configured either statically by Static Resources - Number of Threads (total). Static memory in the size of Number of Threads * Default Thread Stack size is reserved.
+Alternatively the memory is allocated on demand from the Dynamic Resources pool (configured by System Configuration - Dynamic Resources - Memory size [bytes] for Stack).
+
+The CMSIS-RTOS RTX kernel uses a separate stack for each thread it creates. However, before the kernel is started by the\ref osKernelInitialize() function, the main stack size that is configured in the file startup_<i>device</i>.s is used.
+
+Main stack is also used when:
+- the user application calls the majority of RTX functions from Thread mode (ending up in an SVC call)
+- running from handlers (user interrupt of exception handlers like SVCm PendSV, Faults, etc.)
+
+|Name |\#define |Description|
+|-------------------------------------------------------------------|-----------------|-----------|
+|Number of concurrent running user threads |\c OS_THREAD_NUM |Indicates the maximum number of threads that will run at the same time (including main).|
+|Default Thread stack size [bytes] |\c OS_STACK_SIZE |Specifies the default stack size (in words) for threads that are defined with osThreadDef \a stacksz = 0.|
+|Number of threads with user-provided stack size |\c OS_THREAD_USER_STACK_NUM |Indicates the number of threads that are created with \ref osThreadNew \a stack_size specifies the stack size requirement of that thread.|
+|stackCheck |\c OS_STACK_CHECK |If a stack overflow is detected at a thread switch, the function \b os_error with error code = 1 is called. By default, this function is implemented as endless loop and will practically stop code execution.|
+|stackUsage |\c OS_STACK_WATERMARK |Initializes the thread stack with a watermark pattern that can be used to determine the maximum stack usage within each thread.|
+|processorMode |\c OS_PRIVILEGE_MODE |Controls the processor mode (privileged/unprivileged)|
+*/
+
+/*=======0=========1=========2=========3=========4=========5=========6=========7=========8=========9=========0=========1====*/
+/**
+\page rtosValidation RTOS Validation
+
+\note
+The test suite is available only for RTOS v1 API.
+
+ARM offers a <a class=el href="http://www.keil.com/pack" target="_blank">Software Pack</a> for the CMSIS-RTOS Validation.
+The <b>ARM::CMSIS-RTOS_Validation</b> Pack contains the following:
+
+ - Source code of a CMSIS-RTOS Validation Suite along with configuration file.
+ - Documentation of the CMSIS-RTOS Validation Suite.
+ - Example that shows the usage of the CMSIS-RTOS Validation Suite using simulation.
+
+The CMSIS-RTOS Validation Suite is currently available in beta release and performs generic validation of various
+RTOS features. The test cases verify the functional behavior, test invalid parameters and call management
+functions from ISR.
+
+The following CMSIS-RTOS features can be tested with the current release:
+ - Thread : Create multiple threads, terminate, restart, yield, change priority
+ - Timer : Create periodic and one-shot timers
+ - GenWait : Call generic wait functions (osDelay and osWait)
+ - WaitFunc : Measure wait ticks (delay, mail, message, mutex, semaphore, signal)
+
+Moreover the following inter-thread communication functions can be tested:
+ - Signal : Verify signal events
+ - Memory Pool : Verify memory allocation
+ - Message Queue : Exchange messages between threads
+ - Mail Queue : Exchange data between threads
+ - Mutex : Synchronize resource access
+ - Semaphore : Access shared resources
+
+The RTOS Validation output can be printed to a console, output via ITM printf, or output to a memory buffer.
+
+\section test_output Sample Test Output
+\verbatim
+CMSIS-RTOS Test Suite Oct 21 2015 16:39:16
+
+TEST 01: TC_ThreadCreate PASSED
+TEST 02: TC_ThreadMultiInstance PASSED
+TEST 03: TC_ThreadTerminate PASSED
+ :
+ :
+TEST 08: TC_ThreadChainedCreate PASSED
+TEST 09: TC_ThreadYield NOT EXECUTED
+TEST 10: TC_ThreadParam PASSED
+ :
+ :
+TEST 60: TC_MailFromISRToThread PASSED
+
+Test Summary: 60 Tests, 59 Executed, 59 Passed, 0 Failed, 0 Warnings.
+Test Result: PASSED
+\endverbatim
+*/
+
+/* ========================================================================================================================== */
+// Group creation for Reference
+/**
+\addtogroup CMSIS_RTOS1 CMSIS-RTOS API v1
+\brief This section describes the CMSIS-RTOS API v1.
+\details
+The CMSIS-RTOS is a generic API layer that interfaces to an existing RTOS kernel.
+
+CMSIS-RTOS API v2 provides an translation layer for the
+<a class="el" href="../../RTOS/html/index.html">CMSIS-RTOS API v1</a> that simplifies migration.
+
+Refer to the <a class="el" href="../../RTOS/html/modules.html">Reference</a> guide of the CMSIS-RTOS API v1 for details.
+*/
+
+// Group creation for Reference
+/**
+\addtogroup CMSIS_RTOS CMSIS-RTOS API v2
+\brief This section describes the CMSIS-RTOS API v2.
+\details
+The CMSIS-RTOS is a generic API layer that interfaces to an existing RTOS kernel.
+
+*/
+
diff --git a/CMSIS/DoxyGen/RTOS2/src/cmsis_os2_Event.txt b/CMSIS/DoxyGen/RTOS2/src/cmsis_os2_Event.txt
new file mode 100644
index 0000000..a6dc4a3
--- /dev/null
+++ b/CMSIS/DoxyGen/RTOS2/src/cmsis_os2_Event.txt
@@ -0,0 +1,153 @@
+
+
+/*=======0=========1=========2=========3=========4=========5=========6=========7=========8=========9=========0=========1====*/
+// ==== Event Flag Management ====
+/**
+\addtogroup CMSIS_RTOS_EventFlags Event Flags
+\ingroup CMSIS_RTOS
+\brief Create events using flags.
+\details
+Events are used to trigger execution states between threads. The event flag management functions in CMSIS-RTOS allow you to control or wait for event flags. Each signal has up to 31 event flags (int32_t flags provides 31 bits).
+
+A thread
+- can wait for event flags to be set (using \ref osEventFlagsGet). Using this function, it enters the
+ \ref ThreadStates "WAITING" state. The \ref osEventFlagsGet parameter \a flags defines the signals that are required to put the thread back into \b READY state.
+- may set one or more flags in any other given thread (using \ref osEventFlagsSet).
+- may clear its own signals or the signals of other threads (using \ref osEventFlagsClear).
+
+When a thread wakes up and resumes execution, its signal flags are automatically cleared.
+
+Working with Events
+--------------------
+Here is a simple example that shows how two thread can communicate with each others using event flags:
+
+\image html simple_signal.png "Simple event communication"
+
+The following steps are required to use signals:
+-# In the thread that is supposed to send a event with id sig1_id, call the wait function:
+\code
+osEventFlagsSet (sig1_id, 0x0001); //
+\endcode
+-# In another thread (or threads) that are supposed wait for the event:
+\code
+osEventFlagsGet (sig1_id, 0x0001, NULL, osWaitForever); // set the signal 0x0001 for thread tid_thread1
+osDelay (1000); // wait for 1 second
+\endcode
+
+@{
+*/
+/*=======0=========1=========2=========3=========4=========5=========6=========7=========8=========9=========0=========1====*/
+/**
+\typedef osEventFlagsId_t
+\details
+
+*/
+/*=======0=========1=========2=========3=========4=========5=========6=========7=========8=========9=========0=========1====*/
+/**
+\struct osEventFlagsAttr_t
+\details
+
+*/
+/*=======0=========1=========2=========3=========4=========5=========6=========7=========8=========9=========0=========1====*/
+/**
+\fn osEventFlagsId_t osEventFlagsNew (const osEventFlagsAttr_t *attr)
+\details
+Create and initialize a Event Flag object that is used to send events accross threads.
+
+<b>Code Example</b>
+\code{.c}
+#include "cmsis_os2.h"
+
+osEventId_tId_t event_id;
+
+void CreateEvent (void) {
+
+ event_id = osEventFlagsNew(NULL);
+ if (event_id != NULL) {
+ // Event object created
+ }
+}
+\endcode
+*/
+/*=======0=========1=========2=========3=========4=========5=========6=========7=========8=========9=========0=========1====*/
+/**
+\fn int32_t osEventFlagsSet (osEventFlagsId_t ef_id, int32_t flags)
+\details
+Set the event flags in an event flags object. This function may be used also within interrupt service routines.
+All threads waiting for the flag set will be notified to resume from WAITING state.
+
+\note \ref CMSIS_RTOS_ISR_Calls "Interrupt Service Routines" can call this function.
+
+<b>Code Example</b>
+\code{.c}
+void *Thread_2 (void *arg);
+
+static void EX_Signal_1 (void) {
+ int32_t signals;
+ osThreadId_t thread_id;
+
+ thread_id = osThreadCreate (Thread_2, NULL, NULL);
+ signals = osEventFlagsSet (event_id, 0x00000005); // Send signals to the created thread
+}
+\endcode
+*/
+/*=======0=========1=========2=========3=========4=========5=========6=========7=========8=========9=========0=========1====*/
+/**
+\fn int32_t osEventFlagsClear (osEventFlagsId_t ef_id, int32_t flags)
+\details
+Clear the event flags of an event flags object.
+*/
+/*=======0=========1=========2=========3=========4=========5=========6=========7=========8=========9=========0=========1====*/
+/**
+\fn int32_t osEventFlagsGet (osEventFlagsId_t ef_id)
+\details
+Return the event flags currently set in an event flags object.
+*/
+/*=======0=========1=========2=========3=========4=========5=========6=========7=========8=========9=========0=========1====*/
+/**
+\fn int32_t osEventFlagsWait (osEventFlagsId_t ef_id, int32_t flags, uint32_t options, uint32_t millisec)
+\details
+Suspend the execution of the current \b RUNNING thread until any or all specified event flags with the parameter \a flags are set.
+The /em options parameter specifies the wait condition.
+
+|Option | |
+|--------------------|-------------------------------------------------------|
+|\b osFlagsWaitAny | Wait for any flag (default). |
+|\b osFlagsWaitAll | Wait for all flags. |
+|\b osFlagsAutoClear | Clear flags which have been specified to wait for. |
+
+If osFlagsAutoClear is not set in the options /ref osEventFlagsClear can be used to clear flags manually.
+
+When these event flags are already set, the function returns instantly. Otherwise the thread is put into the state \b WAITING.
+
+*/
+/*=======0=========1=========2=========3=========4=========5=========6=========7=========8=========9=========0=========1====*/
+/**
+\fn osStatus_t osEventFlagsDelete (osEventFlagsId_t ef_id)
+\details
+Delete an event flag object. The function releases internal memory obtained for event flags handling. After this call the \em ef_id is no longer valid and cannot be used. The \em ef_id may be created again using the function \ref osEventFlagsNew.
+This can cause starvation of threads that are waiting for flags of this event object.
+*/
+/// @}
+
+// these struct members must stay outside the group to avoid double entries in documentation
+/**
+\var osEventFlagsAttr_t::attr_bits
+\details
+No attributes available.
+
+\var osEventFlagsAttr_t::cb_mem
+\details
+Pointer to a memory location for the event object. This can optionally be used for custom memory management systems.
+Specify \token{NULL} to use the kernel memory management.
+
+
+\var osEventFlagsAttr_t::cb_size
+\details
+The size of the memory block passed with \ref cb_mem. Must be the size of an event object or larger.
+
+\var osEventFlagsAttr_t::name
+\details
+String with a human readable name of the event object.
+
+*/
diff --git a/CMSIS/DoxyGen/RTOS2/src/cmsis_os2_Kernel.txt b/CMSIS/DoxyGen/RTOS2/src/cmsis_os2_Kernel.txt
new file mode 100644
index 0000000..2d9cede
--- /dev/null
+++ b/CMSIS/DoxyGen/RTOS2/src/cmsis_os2_Kernel.txt
@@ -0,0 +1,168 @@
+/*=======0=========1=========2=========3=========4=========5=========6=========7=========8=========9=========0=========1====*/
+// ==== Kernel Control ====
+/**
+\addtogroup CMSIS_RTOS_KernelCtrl Kernel Information and Control
+\ingroup CMSIS_RTOS
+\brief Provide version/system information and start the RTOS Kernel.
+\details
+The Kernel Information and Control function group allows to:
+ - obtain information about the system and the underlying kernel.
+ - obtain version information about the CMSIS-RTOS API.
+ - initialize of the RTOS kernel for creating objects.
+ - start the RTOS kernel and thread switching.
+ - check the execution status of the RTOS kernel.
+
+The function \b main is a special thread function that may be started at system initialization. In this case it has the
+initial priority \a osPriorityNormal.
+
+When reaching \b main, it is necessary to:
+-# Call osKernelInitialize() to initialize the CMSIS-RTOS Kernel
+-# Setup device peripherals and create other RTOS objects using the \b os*Create functions.
+-# Start the Kernel and begin thread switching by calling osKernelStart().
+
+<b>Code Example</b>
+\code
+int main (void) {
+ osKernelInitialize (); // initialize CMSIS-RTOS
+
+ // initialize peripherals here
+
+ // create 'thread' functions that start executing,
+ // example: tid_name = osThreadCreate (osThread(name), NULL);
+
+ osKernelStart (); // start thread execution
+}
+\endcode
+@{
+*/
+/*=======0=========1=========2=========3=========4=========5=========6=========7=========8=========9=========0=========1====*/
+/**
+\struct osVersion_t
+\details
+Identifies the underlying RTOS kernel and API version number.
+The Version is represented in a combined decimal number in the format: major.minor.rev: mmnnnrrrr
+
+Use \ref osKernelGetInfo to retrieve the version numbers
+
+*/
+/*=======0=========1=========2=========3=========4=========5=========6=========7=========8=========9=========0=========1====*/
+/**
+\enum osKernelState_t
+\details
+State of the Kernel. Can be retrieved by \ref osKernelGetState.
+*/
+/*=======0=========1=========2=========3=========4=========5=========6=========7=========8=========9=========0=========1====*/
+/**
+\fn osStatus_t osKernelInitialize (void)
+\details
+
+*/
+/*=======0=========1=========2=========3=========4=========5=========6=========7=========8=========9=========0=========1====*/
+/**
+\fn osStatus_t osKernelGetInfo (osVersion_t *version, char *id_buf, uint32_t id_size)
+\details
+Retrieve API and kernel version of the underlying RTOS kernel and a human readable identifier string of the kernel.
+
+\b Example
+\code
+void info (void) {
+ char infobuf[100];
+ osVersion_t osv;
+ osStatus_t status;
+
+ status = osKernelGetInfo(&osv, infobuf, 100);
+ if(status == osOK) {
+ printf("Kernel Information: %s\r\n", infobuf);
+ printf("Kernel Version : %d\r\n", osv.kernel);
+ printf("Kernel API Version: %d\r\n", osv.api);
+ }
+}
+\endcode
+*/
+/*=======0=========1=========2=========3=========4=========5=========6=========7=========8=========9=========0=========1====*/
+/**
+\fn osKernelState_t osKernelGetState (void)
+\details
+
+*/
+/*=======0=========1=========2=========3=========4=========5=========6=========7=========8=========9=========0=========1====*/
+/**
+\fn osStatus_t osKernelStart (void)
+\details
+
+*/
+/*=======0=========1=========2=========3=========4=========5=========6=========7=========8=========9=========0=========1====*/
+/**
+\fn uint32_t osKernelLock (void)
+\details
+
+*/
+/*=======0=========1=========2=========3=========4=========5=========6=========7=========8=========9=========0=========1====*/
+/**
+\fn void osKernelUnlock (void)
+\details
+
+*/
+/*=======0=========1=========2=========3=========4=========5=========6=========7=========8=========9=========0=========1====*/
+/**
+\fn uint32_t osKernelSuspend (void)
+\details
+
+*/
+/*=======0=========1=========2=========3=========4=========5=========6=========7=========8=========9=========0=========1====*/
+/**
+\fn void osKernelResume (uint32_t sleep_time)
+\details
+
+*/
+/*=======0=========1=========2=========3=========4=========5=========6=========7=========8=========9=========0=========1====*/
+/**
+\fn uint64_t osKernelGetTime (void)
+\details
+
+*/
+/*=======0=========1=========2=========3=========4=========5=========6=========7=========8=========9=========0=========1====*/
+/**
+\fn uint32_t osKernelGetTick (void)
+\details
+
+*/
+/*=======0=========1=========2=========3=========4=========5=========6=========7=========8=========9=========0=========1====*/
+/**
+\fn uint32_t osKernelTickMicroSec (uint32_t microsec)
+\details
+
+*/
+/// @}
+
+// these struct members must stay outside the group to avoid double entries in documentation
+/**
+\var osKernelState_t::osKernelInactive
+\details
+The kernel is not ready yet. \ref osKernelInitialize needs to be executed successfully.
+
+\var osKernelState_t::osKernelReady
+\details
+The kernel is not yet running. \ref osKernelStart transfers the kernel to the running state.
+
+\var osKernelState_t::osKernelRunning
+\details
+The kernel is initialized and running.
+
+\var osKernelState_t::osKernelLocked
+\details
+The kernel was locked with \ref osKernelLock. The function \ref osKernelUnlock unlocks it.
+
+\var osKernelState_t::osKernelSuspended
+\details
+The kernel was suspended using \ref osKernelSuspend. The function \ref osKernelResume returns to normal operation.
+
+\var osKernelState_t::osKernelError
+\details
+An error occurred. The kernel error handler should have been called in this state.
+
+\var osKernelState_t::osKernelReserved
+\details
+Reserved.
+*/
+
diff --git a/CMSIS/DoxyGen/RTOS2/src/cmsis_os2_MemPool.txt b/CMSIS/DoxyGen/RTOS2/src/cmsis_os2_MemPool.txt
new file mode 100644
index 0000000..17151f5
--- /dev/null
+++ b/CMSIS/DoxyGen/RTOS2/src/cmsis_os2_MemPool.txt
@@ -0,0 +1,111 @@
+
+
+/*=======0=========1=========2=========3=========4=========5=========6=========7=========8=========9=========0=========1====*/
+// ==== Memory Pool Management ====
+/**
+\addtogroup CMSIS_RTOS_PoolMgmt Memory Pool
+\ingroup CMSIS_RTOS
+\brief Manage thread-safe fixed-size blocks of dynamic memory.
+\details
+\b Memory \b pools are fixed-size blocks of memory that are thread-safe. They operate much faster than the dynamically
+allocated heap and do not suffer from fragmentation. Being thread-safe, they can be accessed from threads and ISRs alike.
+
+\b Shared \b memory is one of the basic models to exchange information between threads. Using memory pools for exchanging
+data, you can share more complex objects between threads if compared to a \ref CMSIS_RTOS_Message. Memory pool management
+functions are used to define and manage such fixed-sized memory pools.
+
+Working with Memory Pools
+-------------------------
+Follow these steps to create and use a memory pool:
+-# Declare a data structure that combines a number of elements:
+\code
+typedef struct {
+ uint32_t length;
+ uint32_t width;
+ uint32_t height;
+ uint32_t weight;
+} properties_t;
+\endcode
+-# Declare a memory pool of these objects as a block of memory:
+\code
+osPoolDef (object_pool, 10, properties_t); // Declare memory pool
+osPoolId (object_pool_id); // Memory pool ID
+\endcode
+-# Then, create the memory pool in a thread:
+\code
+object_pool_id = osPoolCreate(osPool(object_pool));
+\endcode
+-# Allocate the pool within a thread and fill it with data:
+\code
+properties_t *object_data;
+*object_data = (properties_t *) osPoolAlloc(object_pool_id);
+
+object_data->length = 100;
+object_data->width = 10;
+object_data->height = 23;
+object_data->weight = 1000;
+\endcode
+
+@{
+*/
+
+/*=======0=========1=========2=========3=========4=========5=========6=========7=========8=========9=========0=========1====*/
+/**
+\typedef osMemoryPoolId_t
+\details
+
+*/
+/**
+\struct osMemoryPoolAttr_t
+\details
+
+*/
+/*=======0=========1=========2=========3=========4=========5=========6=========7=========8=========9=========0=========1====*/
+/**
+\fn osMemoryPoolId_t osMemoryPoolNew (uint32_t block_count, uint32_t block_size, const osMemoryPoolAttr_t *attr)
+\details
+
+*/
+/*=======0=========1=========2=========3=========4=========5=========6=========7=========8=========9=========0=========1====*/
+/**
+\fn void *osMemoryPoolAlloc (osMemoryPoolId_t mp_id, uint32_t millisec)
+\details
+
+*/
+/*=======0=========1=========2=========3=========4=========5=========6=========7=========8=========9=========0=========1====*/
+/**
+\fn osStatus_t osMemoryPoolFree (osMemoryPoolId_t mp_id, void *block)
+\details
+
+*/
+/*=======0=========1=========2=========3=========4=========5=========6=========7=========8=========9=========0=========1====*/
+/**
+\fn uint32_t osMemoryPoolGetCapacity (osMemoryPoolId_t mp_id)
+\details
+
+*/
+/*=======0=========1=========2=========3=========4=========5=========6=========7=========8=========9=========0=========1====*/
+/**
+\fn uint32_t osMemoryPoolGetBlockSize (osMemoryPoolId_t mp_id)
+\details
+
+*/
+/*=======0=========1=========2=========3=========4=========5=========6=========7=========8=========9=========0=========1====*/
+/**
+\fn uint32_t osMemoryPoolGetCount (osMemoryPoolId_t mp_id)
+\details
+
+*/
+/*=======0=========1=========2=========3=========4=========5=========6=========7=========8=========9=========0=========1====*/
+/**
+\fn uint32_t osMemoryPoolGetSpace (osMemoryPoolId_t mp_id)
+\details
+
+*/
+/*=======0=========1=========2=========3=========4=========5=========6=========7=========8=========9=========0=========1====*/
+/**
+\fn osStatus_t osMemoryPoolDelete (osMemoryPoolId_t mp_id)
+\details
+
+*/
+/// @}
diff --git a/CMSIS/DoxyGen/RTOS2/src/cmsis_os2_Message.txt b/CMSIS/DoxyGen/RTOS2/src/cmsis_os2_Message.txt
new file mode 100644
index 0000000..ce9fd21
--- /dev/null
+++ b/CMSIS/DoxyGen/RTOS2/src/cmsis_os2_Message.txt
@@ -0,0 +1,113 @@
+
+
+/*=======0=========1=========2=========3=========4=========5=========6=========7=========8=========9=========0=========1====*/
+// ==== Message Queue Management ====
+/**
+@addtogroup CMSIS_RTOS_Message Message Queue
+@ingroup CMSIS_RTOS
+@brief Exchange messages between threads in a FIFO-like operation.
+@details
+\b Message \b passing is another basic communication model between threads. In the message passing model, one thread sends
+data explicitly, while another thread receives it. The operation is more like some kind of I/O rather than a direct access to
+information to be shared. In CMSIS-RTOS, this mechanism is called s \b message \b queue. The data is passed from one thread
+to another in a FIFO-like operation. Using message queue functions, you can control, send, receive, or wait for messages. The
+data to be passed can be of integer or pointer type:
+
+\image html "MessageQueue.png" "CMSIS-RTOS Message Queue"
+
+Compared to a \ref CMSIS_RTOS_PoolMgmt, message queues are less efficient in general, but solve a broader range of problems.
+Sometimes, threads do not have a common address space or the use of shared memory raises problems, such as mutual exclusion.
+
+Working with Message Queues
+---------------------------
+Follow these steps to create and use a message queue:
+-# Setup the message queue:
+\code
+osMessageQDef(message_q, 5, uint32_t); // Declare a message queue
+osMessageQId (message_q_id); // Declare an ID for the message queue
+\endcode
+-# Then, create the message queue in a thread:
+\code
+message_q_id = osMessageCreate(osMessageQ(message_q), NULL);
+\endcode
+-# Fill the message queue with data:
+\code
+uint32_t data = 512;
+
+osMailPut(message_q_id, data, osWaitForever);
+\endcode
+-# From the receiving thread access the data using:
+\code
+osEvent event = osMessageGet(message_q_id, osWaitForever);
+\endcode
+
+@{
+*/
+/*=======0=========1=========2=========3=========4=========5=========6=========7=========8=========9=========0=========1====*/
+/**
+\def osMessageQueueId_t
+\details
+
+*/
+/*=======0=========1=========2=========3=========4=========5=========6=========7=========8=========9=========0=========1====*/
+/**
+\struct osMessageQueueAttr_t
+\details
+Attributes structure for message queue.
+*/
+
+/*=======0=========1=========2=========3=========4=========5=========6=========7=========8=========9=========0=========1====*/
+/**
+\fn osMessageQueueId_t osMessageQueueNew (uint32_t msg_count, uint32_t msg_size, const osMessageQueueAttr_t *attr)
+\details
+
+*/
+/*=======0=========1=========2=========3=========4=========5=========6=========7=========8=========9=========0=========1====*/
+/**
+\fn osStatus_t osMessageQueuePut (osMessageQueueId_t mq_id, const void *msg_ptr, uint8_t msg_prio, uint32_t millisec)
+\details
+
+*/
+/*=======0=========1=========2=========3=========4=========5=========6=========7=========8=========9=========0=========1====*/
+/**
+\fn osStatus_t osMessageQueueGet (osMessageQueueId_t mq_id, void *msg_ptr, uint8_t *msg_prio, uint32_t millisec)
+\details
+
+*/
+/*=======0=========1=========2=========3=========4=========5=========6=========7=========8=========9=========0=========1====*/
+/**
+\fn uint32_t osMessageQueueGetCapacity (osMessageQueueId_t mq_id)
+\details
+
+*/
+/*=======0=========1=========2=========3=========4=========5=========6=========7=========8=========9=========0=========1====*/
+/**
+\fn uint32_t osMessageQueueGetMsgSize (osMessageQueueId_t mq_id)
+\details
+
+*/
+/*=======0=========1=========2=========3=========4=========5=========6=========7=========8=========9=========0=========1====*/
+/**
+\fn uint32_t osMessageQueueGetCount (osMessageQueueId_t mq_id)
+\details
+
+*/
+/*=======0=========1=========2=========3=========4=========5=========6=========7=========8=========9=========0=========1====*/
+/**
+\fn uint32_t osMessageQueueGetSpace (osMessageQueueId_t mq_id)
+\details
+
+*/
+/*=======0=========1=========2=========3=========4=========5=========6=========7=========8=========9=========0=========1====*/
+/**
+\fn osStatus_t osMessageQueueReset (osMessageQueueId_t mq_id)
+\details
+
+*/
+/*=======0=========1=========2=========3=========4=========5=========6=========7=========8=========9=========0=========1====*/
+/**
+\fn osStatus_t osMessageQueueDelete (osMessageQueueId_t mq_id)
+\details
+
+*/
+/// @}
\ No newline at end of file
diff --git a/CMSIS/DoxyGen/RTOS2/src/cmsis_os2_Migration.txt b/CMSIS/DoxyGen/RTOS2/src/cmsis_os2_Migration.txt
new file mode 100644
index 0000000..8d28762
--- /dev/null
+++ b/CMSIS/DoxyGen/RTOS2/src/cmsis_os2_Migration.txt
@@ -0,0 +1,728 @@
+/*=======0=========1=========2=========3=========4=========5=========6=========7=========8=========9=========0=========1====*/
+/**
+\page os2Migration Migration from RTOSv1 to RTOSv2
+
+This section lists all new API functions along with the differences to the RTOS v1 functionality.
+
+The list is sorted alphabetically by RTOSv2 function names and is structured the following way:
+<hr>
+\token{for RTOS v2} : \func{RTOS version 2 function}
+\token{for RTOS v1} : \func{RTOS version 1 function}
+
+Brief description of new function. \n
+Description of the difference.
+
+\div{new} New functions have a green background. \enddiv
+\div{mod} Modifying or replacing functions have an amber background. \enddiv
+\div{del} Deprecated functions without replacement have a red background. \enddiv
+
+
+\if NEVER_ENABLE
+=======0=========1=========2=========3=========4=========5=========6=========7=========8=========9=========0=========1====
+ Kernel Information and Control
+\endif
+
+\section mig_kernel Kernel Information and Control
+
+\div{new}
+\func{osStatus_t #osKernelGetInfo (osVersion_t* version, char* id_buf, uint32_t id_size)}
+\none
+\copybrief{osKernelGetInfo}
+New function #osKernelGetInfo.
+\enddiv
+
+\div{mod}
+\func{osKernelState_t #osKernelGetState (void)}
+\func{int32_t osKernelRunning (void)}
+\copybrief{osKernelGetState}
+ - The function \b osKernelGetState replaces the RTOS v1 function \b osKernelRunning.
+ - Return type changed to \ref osKernelState_t.
+
+\enddiv
+
+\div{mod}
+\func{uint32_t #osKernelGetTick (void)}
+\func{uint32_t osKernelSysTick (void)}
+\copybrief{osKernelGetTick}
+ - The function \b osKernelGetTick replaces the RTOS v1 function \b osKernelSysTick.
+
+\enddiv
+
+\div{new}
+\func{uint64_t #osKernelGetTime (void)}
+\none
+\copybrief{osKernelGetTime}
+New function.
+\enddiv
+
+\div{mod}
+\func{osStatus_t #osKernelInitialize (void)}
+\func{osStatus osKernelInitialize (void)}
+\copybrief{osKernelInitialize}
+ - Return type changed to \ref osStatus_t.
+
+\enddiv
+
+\div{new}
+\func{uint32_t osKernelLock (void)}
+\none
+\copybrief{osKernelLock}
+New function.
+\enddiv
+
+\div{new}
+\func{void #osKernelResume (uint32_t sleep_time)}
+\none
+\copybrief{osKernelResume}
+New function.
+\enddiv
+
+\div{mod}
+\func{osStatus_t #osKernelStart (void)}
+\func{osStatus osKernelStart (void)}
+\copybrief{osKernelStart}
+ - Return type changed to \ref osStatus_t.
+
+\enddiv
+
+\div{new}
+\func{uint32_t osKernelSuspend (void)}
+\none
+\copybrief{osKernelSuspend}
+New function.
+\enddiv
+
+\div{mod}
+\func{uint32_t #osKernelTickMicroSec (uint32_t microsec)}
+\func{uint32_t osKernelTickMicroSec (osKernelSysTickFrequency)}
+\copybrief{osKernelTickMicroSec}
+ - The function \b osKernelTickMicroSec replaces the RTOS v1 macro \b osKernelTickMicroSec.
+
+\enddiv
+
+\div{new}
+\func{void #osKernelUnlock (void)}
+\none
+\copybrief{osKernelUnlock}
+New function.
+\enddiv
+
+
+\if NEVER_ENABLE
+=======0=========1=========2=========3=========4=========5=========6=========7=========8=========9=========0=========1====
+====== Thread Management =======
+\endif
+
+\section mig_threadMgmt Thread Management
+
+\div{new}
+\func{osStatus_t #osThreadAbortWait (osThreadId_t thread_id)}
+\none
+\copybrief{osThreadAbortWait}
+New function.
+\enddiv
+
+\div{new}
+\func{osStatus_t #osThreadDetach (osThreadId_t thread_id)}
+\none
+\copybrief{osThreadDetach}
+New function.
+\enddiv
+
+\div{new}
+\func{__NO_RETURN void #osThreadExit (void * exit_ptr)}
+\none
+\copybrief{osThreadExit}
+New function.
+\enddiv
+
+\div{mod}
+\func{osThreadId_t #osThreadGetId (void)}
+\func{osThreadId osThreadGetId (void)}
+\copybrief{osThreadGetId}
+ - Return type changed to #osThreadId_t.
+
+\enddiv
+
+\div{mod}
+\func{osPriority_t #osThreadGetPriority (osThreadId_t thread_id)}
+\func{osPriority osThreadGetPriority (osThreadId thread_id)}
+\copybrief{osThreadGetPriority}
+ - Return type changed to #osPriority_t.
+ - Parameter type changed to #osThreadId_t.
+
+\enddiv
+
+\div{new}
+\func{osThreadState_t #osThreadGetState (osThreadId_t thread_id)}
+\none
+\copybrief{osThreadGetState}
+New function.
+\enddiv
+
+\div{new}
+\func{osStatus_t #osThreadJoin (osThreadId_t thread_id, void **exit_ptr)}
+\none
+\copybrief{osThreadJoin}
+New function.
+\enddiv
+
+\div{mod}
+\func{osThreadId_t #osThreadNew (os_thread_func_t function, void *argument, const osThreadAttr_t *attr)}
+\func{osThreadId osThreadCreate (const osThreadDef_t *thread_def, void *argument)}
+\copybrief{osThreadNew}
+ - The function \b osThreadNew replaces the RTOS v1 function \b osThreadCreate.
+ - Options are now passed using a \ref osThreadAttr_t struct, replacing the \b osThreadDef macro.
+ - New function prototype is <kbd>void *func (void *arg)</kbd>, before: <kbd>void func (const void *arg)</kbd>.
+
+\enddiv
+
+\div{new}
+\func{osStatus_t #osThreadResume (osThreadId_t thread_id)}
+\none
+\copybrief{osThreadResume}
+New function.
+\enddiv
+
+\div{mod}
+\func{osStatus_t #osThreadSetPriority (osThreadId_t thread_id, osPriority_t priority)}
+\func{osStatus osThreadSetPriority (osThreadId thread_id, osPriority priority)}
+\copybrief{osThreadSetPriority}
+ - Return type changed to #osStatus_t.
+ - Parameter types changed to #osThreadId_t and #osPriority_t.
+
+\enddiv
+
+\div{new}
+\func{osStatus_t #osThreadSuspend (osThreadId_t thread_id)}
+\none
+\copybrief{osThreadSuspend}
+New function.
+\enddiv
+
+\div{new}
+\func{osStatus_t #osThreadTerminate (osThreadId_t thread_id)}
+\none
+\copybrief{osThreadTerminate}
+New function.
+\enddiv
+
+\div{mod}
+\func{osStatus_t #osThreadYield (void)}
+\func{osStatus osThreadYield (void)}
+\copybrief{osThreadYield}
+ - Return type changed to #osStatus_t.
+
+\enddiv
+
+
+\if NEVER_ENABLE
+=======0=========1=========2=========3=========4=========5=========6=========7=========8=========9=========0=========1====
+====== Generic Wait Functions =======
+\endif
+
+\section mig_wait Generic Wait Functions
+\details
+Refer to \ref CMSIS_RTOS_Wait for details.
+
+\div{mod}
+\func{osStatus_t #osDelay (uint32_t millisec)}
+\func{osStatus osDelay (uint32_t millisec)}
+\copybrief{osDelay}
+ - The return type changed to #osStatus_t.
+
+\enddiv
+
+\div{mod}
+\func{osStatus_t #osDelayUntil (uint64_t millisec)}
+\func{osStatus osDelayUntil (uint64_t millisec)}
+\copybrief{osDelayUntil}
+ - The return type changed to #osStatus_t.
+
+\enddiv
+
+
+\if NEVER_ENABLE
+=======0=========1=========2=========3=========4=========5=========6=========7=========8=========9=========0=========1====
+====== Timer Management =======
+\endif
+
+\section mig_timer Timer Management
+\details
+Refer to \ref CMSIS_RTOS_TimerMgmt for details.
+
+\div{mod}
+\func{osStatus_t #osTimerDelete (osTimerId_t timer_id)}
+\func{osStatus osTimerDelete (osTimerId timer_id)}
+\copybrief{osTimerDelete}
+ - The return type changed to #osStatus_t.
+ - The parameter type has changed to #osTimerId_t.
+
+\enddiv
+
+\div{new}
+\func{uint32_t #osTimerIsRunning (osTimerId_t timer_id)}
+\none
+\copybrief{osTimerIsRunning}
+New function.
+\enddiv
+
+\div{mod}
+\func{osTimerId_t #osTimerNew (os_timer_func_t func, osTimerType_t type, void *argument, const osTimerAttr_t *attr)}
+\func{osTimerId osTimerCreate (const osTimerDef_t *timer_def, os_timer_type type, void *argument)}
+\copybrief{osTimerNew}
+ - The function \b osTimerNew replaces the RTOS v1 function \b osTimerCreate.
+ - The return type changed to #osTimerId_t.
+ - The parameter list and types have changed.
+
+\enddiv
+
+\div{mod}
+\func{osStatus_t #osTimerStart (osTimerId_t timer_id, uint32_t millisec)}
+\func{osStatus osTimerStart (osTimerId timer_id, uint32_t millisec)}
+\copybrief{osTimerStart}
+ - The return type changed to #osStatus_t.
+ - The first parameter type has changed to #osTimerId_t.
+
+\enddiv
+
+\div{mod}
+\func{osStatus_t #osTimerStop (osTimerId_t timer_id)}
+\func{osStatus osTimerStop (osTimerId timer_id)}
+\copybrief{osTimerStop}
+ - The return type changed to #osStatus_t.
+ - The parameter type has changed to #osTimerId_t.
+
+\enddiv
+
+
+\if NEVER_ENABLE
+=======0=========1=========2=========3=========4=========5=========6=========7=========8=========9=========0=========1====
+====== Signal Events =======
+\endif
+
+\section mig_signalEvents Signal Events
+\details
+The section RTOS v1 <b>Signal Events</b> has been deprecated.
+Use the functions listed under \ref mig_threadFlags and \ref mig_eventFlags instead.
+
+\div{del}
+\none
+\func{int32_t osSignalClear (osThreadId thread_id, int32_t signals)}
+\n
+Deprecated.
+\enddiv
+
+\div{del}
+\none
+\func{int32_t osSignalSet (osThreadId thread_id, int32_t signals)}
+\n
+Deprecated.
+\enddiv
+
+\div{del}
+\none
+\func{osEvent osSignalWait (int32_t signals, uint32_t millisec)}
+\n
+Deprecated.
+\enddiv
+
+
+
+\if NEVER_ENABLE
+=======0=========1=========2=========3=========4=========5=========6=========7=========8=========9=========0=========1====
+====== Event Flags =======
+\endif
+
+\section mig_eventFlags Event Flags
+\details
+New section to synchronize events using flags. Event flags and thread flags are replacing the RTOS v1 <b>Signal Events</b>.
+All functions listed in the RTOS v1 <b>Signal Events</b> have been deprecated.
+Refer to \ref mig_signalEvents for a list of deprecated functions.
+Refer to \ref CMSIS_RTOS_EventFlags for details about the new function.
+
+\div{new}
+\func{int32_t #osEventFlagsClear (osEventFlagsId_t ef_id, int32_t flags)}
+\none
+\copybrief{osEventFlagsClear}
+New function.
+\enddiv
+
+\div{new}
+\func{osStatus_t #osEventFlagsDelete (osEventFlagsId_t ef_id)}
+\none
+\copybrief{osEventFlagsDelete}
+New function.
+\enddiv
+
+\div{new}
+\func{int32_t #osEventFlagsGet (osEventFlagsId_t ef_id)}
+\none
+\copybrief{osEventFlagsGet}
+New function.
+\enddiv
+
+\div{new}
+\func{osEventFlagsId_t #osEventFlagsNew (const osEventFlagsAttr_t *attr)}
+\none
+\copybrief{osEventFlagsNew}
+New function.
+\enddiv
+
+\div{new}
+\func{int32_t #osEventFlagsSet (osEventFlagsId_t ef_id, int32_t flags)}
+\none
+\copybrief{osEventFlagsSet}
+New function.
+\enddiv
+
+\div{new}
+\func{int32_t #osEventFlagsWait (osEventFlagsId_t ef_id, int32_t flags, uint32_t options, uint32_t millisec)}
+\none
+\copybrief{osEventFlagsWait}
+New function.
+\enddiv
+
+
+\if NEVER_ENABLE
+=======0=========1=========2=========3=========4=========5=========6=========7=========8=========9=========0=========1====
+====== Thread Flags =======
+\endif
+
+\section mig_threadFlags Thread Flags
+\details
+New section to synchronize threads using flags. Thread flags and the more flexible \ref mig_eventFlags are replacing the RTOS v1 <b>Signal Events</b>. Refer to \ref mig_signalEvents for a list of deprecated functions.
+Refer to \ref CMSIS_RTOS_ThreadFlagsMgmt for details.
+
+\div{new}
+\func{int32_t #osThreadFlagsSet (osThreadId_t thread_id, int32_t flags)}
+\none
+\copybrief{osThreadFlagsSet}
+New function.
+\enddiv
+
+\div{new}
+\func{int32_t #osThreadFlagsWait (int32_t flags, uint32_t options, uint32_t millisec)}
+\none
+\copybrief{osThreadFlagsWait}
+New function.
+\enddiv
+
+
+\if NEVER_ENABLE
+=======0=========1=========2=========3=========4=========5=========6=========7=========8=========9=========0=========1====
+====== Message Queue =======
+\endif
+
+\section mig_msgQueue Message Queue
+Refer to \ref CMSIS_RTOS_Message for details.
+
+\div{new}
+\func{osStatus_t #osMessageQueueDelete (osMessageQueueId_t mq_id)}
+\none
+\copybrief{osMessageQueueDelete}
+New function.
+\enddiv
+
+\div{mod}
+\func{osStatus_t #osMessageQueueGet (osMessageQueueId_t mq_id, void *msg_ptr, uint8_t *msg_prio, uint32_t millisec)}
+\func{osEvent osMessageGet (osMessageQId queue_id, uint32_t millisec)}
+\copybrief{osMessageQueueGet}
+ - The function \b osMessageQueueGet replaces the RTOS v1 function \b osMessageGet.
+ - The return type changed to #osStatus_t.
+ - The parameter list and parameter types have changed.
+
+\enddiv
+
+\div{new}
+\func{uint32_t #osMessageQueueGetCapacity (osMessageQueueId_t mq_id)}
+\none
+\copybrief{osMessageQueueGetCapacity}
+New function.
+\enddiv
+
+\div{new}
+\func{uint32_t #osMessageQueueGetCount (osMessageQueueId_t mq_id)}
+\none
+\copybrief{osMessageQueueGetCount}
+New function.
+\enddiv
+
+\div{new}
+\func{uint32_t #osMessageQueueGetMsgSize (osMessageQueueId_t mq_id)}
+\none
+\copybrief{osMessageQueueGetMsgSize}
+New function.
+\enddiv
+
+\div{new}
+\func{uint32_t #osMessageQueueGetSpace (osMessageQueueId_t mq_id)}
+\none
+\copybrief{osMessageQueueGetSpace}
+New function.
+\enddiv
+
+\div{mod}
+\func{osMessageQueueId_t #osMessageQueueNew (uint32_t msg_count, uint32_t msg_size, const osMessageQueueAttr_t *attr)}
+\func{osMessageQId osMessageCreate (const osMessageQDef_t *queue_def, osThreadId thread_id)}
+\copybrief{osMessageQueueNew}
+ - The function \b osMessageQueueNew replaces the RTOS v1 function \b osMessageCreate.
+ - The return type changed to #osMessageQueueId_t.
+ - The parameter list and parameter types have changed.
+
+\enddiv
+
+\div{mod}
+\func{osStatus_t #osMessageQueuePut (osMessageQueueId_t mq_id, const void *msg_ptr, uint8_t msg_prio, uint32_t millisec)}
+\func{osStatus osMessagePut (osMessageQId queue_id, uint32_t info, uint32_t millisec)}
+\copybrief{osMessageQueuePut}
+ - The function \b osMessageQueuePut replaces the RTOS v1 function \b osMessagePut.
+ - The return type changed to #osStatus_t.
+ - The parameter list and parameter types have changed.
+
+\enddiv
+
+\div{new}
+\func{osStatus_t #osMessageQueueReset (osMessageQueueId_t mq_id)}
+\none
+\copybrief{osMessageQueueReset}
+New function.
+\enddiv
+
+
+\if NEVER_ENABLE
+=======0=========1=========2=========3=========4=========5=========6=========7=========8=========9=========0=========1====
+====== Memory Pool =======
+\endif
+
+\section mig_memPool Memory Pool
+
+\div{mod}
+\func{void * #osMemoryPoolAlloc (osMemoryPoolId_t mp_id, uint32_t millisec)}
+\func{void * osPoolAlloc (osPoolId pool_id)}
+\func{void * osPoolCAlloc (osPoolId pool_id)}
+\copybrief{osMemoryPoolAlloc}
+ - The function \b osMemoryPoolAlloc replaces both RTOS v1 functions \b osPoolAlloc and \b osPoolCAlloc.
+ - The parameter list and types changed.
+
+\enddiv
+
+\div{new}
+\func{osStatus_t #osMemoryPoolDelete (osMemoryPoolId_t mp_id)}
+\none
+\copybrief{osMemoryPoolDelete}
+New function.
+\enddiv
+
+\div{mod}
+\func{osStatus_t #osMemoryPoolFree (osMemoryPoolId_t mp_id, void * block)}
+\func{osStatus osPoolFree (osPoolId pool_id, void * block)}
+\copybrief{osMemoryPoolFree}
+ - The function \b osMemoryPoolFree replaces the RTOS v1 function \b osPoolFree.
+ - The first parameter type \b osMemoryPoolId_t replaces the ROTS v1 type \b osPoolId.
+
+\enddiv
+
+\div{new}
+\func{uint32_t #osMemoryPoolGetBlockSize (osMemoryPoolId_t mp_id)}
+\none
+\copybrief{osMemoryPoolGetBlockSize}
+New function.
+\enddiv
+
+\div{new}
+\func{uint32_t #osMemoryPoolGetCapacity (osMemoryPoolId_t mp_id)}
+\none
+\copybrief{osMemoryPoolGetCapacity}
+New function.
+\enddiv
+
+\div{new}
+\func{uint32_t #osMemoryPoolGetCount (osMemoryPoolId_t mp_id)}
+\none
+\copybrief{osMemoryPoolGetCount}
+New function.
+\enddiv
+
+\div{new}
+\func{uint32_t #osMemoryPoolGetSpace (osMemoryPoolId_t mp_id)}
+\none
+\copybrief{osMemoryPoolGetSpace}
+New function.
+\enddiv
+
+\div{mod}
+\func{osMemoryPoolId_t #osMemoryPoolNew (uint32_t block_count, uint32_t block_size, const osMemoryPoolAttr_t *attr)}
+\func{osPoolId osPoolCreate (const osPoolDef_t * pool_def)}
+\copybrief{osMemoryPoolGetSpace}
+ - The function \b osMemoryPoolNew replaces the RTOS v1 function \b osPoolCreate.
+ - The return type changed to #osMemoryPoolId_t.
+ - Parameter list and parameter types have changed.
+
+\enddiv
+
+
+\if NEVER_ENABLE
+=======0=========1=========2=========3=========4=========5=========6=========7=========8=========9=========0=========1====
+====== Mail Queue =======
+\endif
+
+\section mig_mailQueue Mail Queue
+The <b>Mail Queue</b> RTOS v1 functions have been deprecated.
+Use the functionality of the \ref CMSIS_RTOS_Message instead.
+Differences are listed under \ref mig_msgQueue.
+
+\div{del}
+\none
+\func{void * osMailAlloc (osMailQId queue_id, uint32_t millisec)}
+\n
+Deprecated.
+\enddiv
+
+\div{del}
+\none
+\func{void * osMailCAlloc (osMailQId queue_id, uint32_t millisec)}
+\n
+Deprecated.
+\enddiv
+
+\div{del}
+\none
+\func{osMailQId osMailCreate (const osMailQDef_t *queue_def, osThreadId thread_id)}
+\n
+Deprecated.
+\enddiv
+
+\div{del}
+\none
+\func{osStatus osMailFree (osMailQId queue_id, void *mail)}
+\n
+Deprecated.
+\enddiv
+
+\div{del}
+\none
+\func{osEvent osMailGet (osMailQId queue_id, uint32_t millisec)}
+\n
+Deprecated.
+\enddiv
+
+\div{del}
+\none
+\func{osStatus osMailPut (osMailQId queue_id, void *mail)}
+\n
+Deprecated.
+\enddiv
+
+
+\if NEVER_ENABLE
+=======0=========1=========2=========3=========4=========5=========6=========7=========8=========9=========0=========1====
+====== Mutexes =======
+\endif
+
+\section mig_mutex Mutexes
+Refer to \ref CMSIS_RTOS_MutexMgmt for details.
+
+\div{mod}
+\func{osStatus_t #osMutexAcquire (osMutexId_t mutex_id, uint32_t millisec)}
+\func{osStatus osMutexWait (osMutexId mutex_id, uint32_t millisec)}
+\copybrief{osMutexAcquire}
+ - The function \b osMutexAcquire replaces the RTOS v1 function \b osMutexWait.
+ - Return type changed to \ref osStatus_t.
+ - First parameter type changed to \ref osMutexId_t.
+
+\enddiv
+
+\div{mod}
+\func{osStatus_t #osMutexDelete (osMutexId_t mutex_id)}
+\func{osStatus osMutexDelete (osMutexId mutex_id)}
+\copybrief{osMutexDelete}
+ - The return type changed to \ref osStatus_t.
+ - The parameter type changed to \ref osMutexId_t.
+
+\enddiv
+
+\div{new}
+\func{osThreadId_t #osMutexGetOwner (osMutexId_t mutex_id)}
+\none
+\copybrief{osMutexGetOwner}
+New function.
+\enddiv
+
+\div{mod}
+\func{osMutexId_t #osMutexNew (const osMutexAttr_t *attr)}
+\func{osMutexId osMutexCreate (const osMutexDef_t *mutex_def)}
+\copybrief{osMutexNew}
+ - The function \b osMutexNew replaces the RTOS v1 function \b osMutexCreate.
+ - The return type changed to \ref osMutexId_t.
+ - The parameter type changed to \ref osMutexAttr_t.
+
+\enddiv
+
+\div{mod}
+\func{osStatus_t #osMutexRelease (osMutexId_t mutex_id)}
+\func{osStatus osMutexRelease (osMutexId mutex_id)}
+\copybrief{osMutexRelease}
+ - The return type changed to \ref osStatus_t.
+ - The parameter type changed to \ref osMutexId_t.
+
+\enddiv
+
+
+\if NEVER_ENABLE
+=======0=========1=========2=========3=========4=========5=========6=========7=========8=========9=========0=========1====
+====== SEMAPHORES =======
+\endif
+
+\section mig_sem Semaphores
+Refer to \ref CMSIS_RTOS_SemaphoreMgmt for details.
+
+\div{new}
+\func{osStatus_t #osSemaphoreAcquire (osSemaphoreId_t semaphore_id, uint32_t millisec)}
+\none
+\copybrief{osSemaphoreAcquire}
+New function.
+\enddiv
+
+\div{mod}
+\func{osStatus_t #osSemaphoreDelete (osSemaphoreId_t semaphore_id)}
+\func{osStatus osSemaphoreDelete (osSemaphoreId semaphore_id)}
+\copybrief{osSemaphoreDelete}
+ - The return type changed to #osStatus_t.
+ - The parameter type has changed to #osSemaphoreId_t.
+
+\enddiv
+
+\div{new}
+\func{uint32_t #osSemaphoreGetCount (osSemaphoreId_t semaphore_id)}
+\none
+\copybrief{osSemaphoreGetCount}
+New function.
+\enddiv
+
+\div{mod}
+\func{osSemaphoreId_t #osSemaphoreNew (uint32_t max_count, uint32_t initial_count, const osSemaphoreAttr_t *attr)}
+\func{osSemaphoreId osSemaphoreCreate (const osSemaphoreDef_t *semaphore_def, int32_t count)}
+\copybrief{osSemaphoreNew}
+ - The function \b osSemaphoreNew replaces the RTOS v1 function \b osSemaphoreCreate.
+ - The return type changed to #osSemaphoreId_t.
+ - The parameter list and types have changed.
+
+\enddiv
+
+\div{mod}
+\func{osStatus_t #osSemaphoreRelease (osSemaphoreId_t semaphore_id)}
+\func{osStatus osSemaphoreRelease (osSemaphoreId semaphore_id)}
+\copybrief{osSemaphoreRelease}
+ - The return type changed to #osStatus_t.
+ - The parameter type has changed to #osSemaphoreId_t.
+
+\enddiv
+
+\div{del}
+\none
+\func{int32_t osSemaphoreWait (osSemaphoreId semaphore_id, uint32_t millisec)}
+\n
+Deprecated.
+\enddiv
+*/
\ No newline at end of file
diff --git a/CMSIS/DoxyGen/RTOS2/src/cmsis_os2_Mutex.txt b/CMSIS/DoxyGen/RTOS2/src/cmsis_os2_Mutex.txt
new file mode 100644
index 0000000..f2fc325
--- /dev/null
+++ b/CMSIS/DoxyGen/RTOS2/src/cmsis_os2_Mutex.txt
@@ -0,0 +1,257 @@
+//
+// close group struct osMutexAttr_t
+/*=======0=========1=========2=========3=========4=========5=========6=========7=========8=========9=========0=========1====*/
+// ==== Mutex Management ====
+/**
+\addtogroup CMSIS_RTOS_MutexMgmt Mutexes
+\ingroup CMSIS_RTOS
+\brief Synchronize resource access using Mutual Exclusion (Mutex).
+\details
+<b>Mutual exclusion</b> (widely known as \b Mutex) is used in various operating systems for resource management. Many
+resources in a microcontroller device can be used repeatedly, but only by one thread at a time (for example communication
+channels, memory, and files). Mutexes are used to protect access to a shared resource. A mutex is created and then passed
+between the threads (they can acquire and release the mutex).
+
+\image html "Mutex.png" "CMSIS-RTOS Mutex"
+
+A mutex is a special version of a \ref CMSIS_RTOS_SemaphoreMgmt "semaphore". Like the semaphore, it is a container for
+tokens. But instead of being able to have multiple tokens, a mutex can only carry one (representing the resource). Thus, a
+mutex token is binary and bounded. The advantage of a mutex is that it introduces thread ownership. When a thread acquires a
+mutex and becomes its owner, subsequent mutex acquires from that thread will succeed immediately without any latency. Thus,
+mutex acquires/releases can be nested.
+
+\note
+- Mutex management functions cannot be called from interrupt service routines (ISR), unlike a binary semaphore that can be
+ released from an ISR.
+
+Working with Mutexes
+--------------------
+To use mutexes, you need to follow these steps for creating and using them:
+-# Declare the mutex container and initialize the mutex:
+\code
+osMutexId (uart_mutex_id); // Mutex ID
+\endcode
+-# Create the mutex in a thread:
+\code
+uart_mutex_id = osMutexNew(NULL);
+\endcode
+-# Acquire the mutex when peripheral access is required:
+\code
+osMutexAcquire(uart_mutex_id, osWaitForever);
+\endcode
+-# When finished with the peripheral access, release the mutex:
+\code
+osMutexRelease(uart_mutex_id);
+\endcode
+
+@{
+*/
+/*=======0=========1=========2=========3=========4=========5=========6=========7=========8=========9=========0=========1====*/
+/**
+\def osMutexRecursive
+\details
+ - \ref osMutexAttr_t
+*/
+/*=======0=========1=========2=========3=========4=========5=========6=========7=========8=========9=========0=========1====*/
+/**
+\def osMutexPrioInherit
+\details
+ - \ref osMutexAttr_t
+*/
+/*=======0=========1=========2=========3=========4=========5=========6=========7=========8=========9=========0=========1====*/
+/**
+\def osMutexRobust
+\details
+ - \ref osMutexAttr_t
+*/
+/*=======0=========1=========2=========3=========4=========5=========6=========7=========8=========9=========0=========1====*/
+/**
+\typedef osMutexId_t
+\details
+
+*/
+/*=======0=========1=========2=========3=========4=========5=========6=========7=========8=========9=========0=========1====*/
+/**
+\struct osMutexAttr_t
+\details
+
+
+*/
+
+/*=======0=========1=========2=========3=========4=========5=========6=========7=========8=========9=========0=========1====*/
+/**
+\fn osMutexId_t osMutexNew (const osMutexAttr_t *attr)
+\details
+Create and initialize a Mutex object.
+
+\note Cannot be called from \ref CMSIS_RTOS_ISR_Calls "Interrupt Service Routines".
+
+<b>Code Example</b>
+\code{.c}
+#include "cmsis_os2.h"
+
+osMutexId_t mutex_id;
+
+void CreateMutex (void) {
+
+ mutex_id = osMutexNew(NULL);
+ if (mutex_id != NULL) {
+ // Mutex object created
+ }
+}
+\endcode
+*/
+/*=======0=========1=========2=========3=========4=========5=========6=========7=========8=========9=========0=========1====*/
+/**
+\fn osStatus_t osMutexAcquire (osMutexId_t mutex_id, uint32_t millisec)
+\details
+Wait until a Mutex becomes available. If no other thread has obtained the Mutex, the function instantly returns and blocks the mutex object.
+
+The argument \a millisec specifies how long the system waits for a mutex.
+While the system waits the thread that is calling this function is put into the state \b WAITING.
+The \a millisec timeout can have the following values:
+ - when \a millisec is 0, the function returns instantly.
+ - when \a millisec is set to \b osWaitForever the function will wait for an infinite time until the mutex becomes available.
+ - all other values specify a time in millisecond for a timeout.
+
+<b>\ref CMSIS_RTOS_Status</b>\n
+ - \em osOK: the mutex has been obtained.
+ - \em osErrorTimeoutResource: the mutex could not be obtained in the given time.
+ - \em osErrorResource: the mutex could not be obtained when no timeout was specified.
+ - \em osErrorParameter: the parameter \a mutex_id is incorrect.
+ - \em osErrorISR: cannot be called from interrupt service routines.
+
+\note Cannot be called from \ref CMSIS_RTOS_ISR_Calls "Interrupt Service Routines".
+
+<b>Code Example</b>
+\code{.c}
+#include "cmsis_os2.h"
+
+void WaitMutex (void) {
+osMutexId_t mutex_id;
+osStatus_t status;
+
+ mutex_id = osMutexNew(NULL);
+ if (mutex_id != NULL) {
+ status = osMutexAcquire(mutex_id, 0);
+ if (status != osOK) {
+ // handle failure code
+ }
+ }
+}
+\endcode
+*/
+/*=======0=========1=========2=========3=========4=========5=========6=========7=========8=========9=========0=========1====*/
+/**
+\fn osStatus_t osMutexRelease (osMutexId_t mutex_id)
+\details
+Release a Mutex that was obtained with \ref osMutexAcquire. Other threads that currently wait for the same mutex will be now put into the state \b READY.
+
+<b>\ref CMSIS_RTOS_Status</b>\n
+ - \em osOK: the mutex has been correctly released.
+ - \em osErrorResource: the mutex was not obtained before.
+ - \em osErrorParameter: the parameter \a mutex_id is incorrect.
+ - \em osErrorISR: \ref osMutexRelease cannot be called from interrupt service routines.
+
+\note Cannot be called from \ref CMSIS_RTOS_ISR_Calls "Interrupt Service Routines".
+
+<b>Code Example</b>
+\code{.c}
+#include "cmsis_os2.h"
+
+osMutexId_t mutex_id; // Mutex id populated by the function CreateMutex()
+
+void ReleaseMutex (osMutexId_t mutex_id) {
+osStatus_t status;
+
+ if (mutex_id != NULL) {
+ status = osMutexRelease(mutex_id);
+ if (status != osOK) {
+ // handle failure code
+ }
+ }
+}
+\endcode
+*/
+/*=======0=========1=========2=========3=========4=========5=========6=========7=========8=========9=========0=========1====*/
+/**
+\fn osThreadId_t osMutexGetOwner (osMutexId_t mutex_id)
+\details
+Returns the \ref osThreadId_t of the thread that acquired a mutex.
+*/
+/*=======0=========1=========2=========3=========4=========5=========6=========7=========8=========9=========0=========1====*/
+/**
+\fn osStatus_t osMutexDelete (osMutexId_t mutex_id)
+\details
+Delete a Mutex object. The function releases internal memory obtained for Mutex handling. After this call the \a mutex_id is no longer valid and cannot be
+used. The Mutex may be created again using the function \ref osMutexNew.
+
+<b>\ref CMSIS_RTOS_Status</b>
+ - \em osOK: the mutex object has been deleted.
+ - \em osErrorISR: \ref osMutexDelete cannot be called from interrupt service routines.
+ - \em osErrorResource: all tokens have already been released.
+ - \em osErrorParameter: the parameter \a mutex_id is incorrect.
+
+\note Cannot be called from \ref CMSIS_RTOS_ISR_Calls "Interrupt Service Routines".
+
+<b>Code Example</b>
+\code{.c}
+#include "cmsis_os2.h"
+
+osMutexId_t mutex_id; // Mutex id populated by the function CreateMutex()
+
+void DeleteMutex (osMutexId_t mutex_id) {
+osStatus_t status;
+
+ if (mutex_id != NULL) {
+ status = osMutexDelete(mutex_id);
+ if (status != osOK) {
+ // handle failure code
+ }
+ }
+}
+\endcode
+*/
+/// @}
+
+// these struct members must stay outside the group to avoid double entries in documentation
+/**
+\var osMutexAttr_t::attr_bits
+\details
+The following predefined bit masks can be assigned to set options for a mutex object.
+
+Bit Mask | Description
+:---------------------------|:------------------
+\token{osMutexRecursive} | Mutex is recursive. The same thread can consume a mutex multiple times without locking itself.
+\token{osMutexPrioInherit} | Priority inheritance protocol. While a thread owns this mutex it cannot be preempted by a higher priority thread to avoid starvation.
+\token{osMutexRobust} | Robust mutex. Notify threads that acquire a mutex if the previous owner was terminated.
+
+*/
+/**
+\var osMutexAttr_t::cb_mem
+\details
+Pointer to a memory location for the mutex object. This can optionally be used for custom memory management systems.
+Specify NULL to use the kernel memory management.
+*/
+/**
+\var osMutexAttr_t::cb_size
+\details
+The size of the memory block passed with \ref cb_mem. Must be the size of a mutex object or larger.
+*/
+/**
+\var osMutexAttr_t::name
+\details
+String with a human readable name of the mutex object.
+
+\code
+osMutexId_t mid_Thread_Mutex; // mutex id
+
+const osMutexAttr_t Thread_Mutex_attr = {
+ "myThreadMutex",
+ osMutexRecursive | osMutexPrioInherit, // attr_bits
+ NULL, // memory for control block
+ NULL // size for control block
+ };
+mid_Mutex = osMutexNew (&Thread_Mutex_attr);
+\endcode
+*/
\ No newline at end of file
diff --git a/CMSIS/DoxyGen/RTOS2/src/cmsis_os2_Sema.txt b/CMSIS/DoxyGen/RTOS2/src/cmsis_os2_Sema.txt
new file mode 100644
index 0000000..ce969fa
--- /dev/null
+++ b/CMSIS/DoxyGen/RTOS2/src/cmsis_os2_Sema.txt
@@ -0,0 +1,202 @@
+
+
+/*=======0=========1=========2=========3=========4=========5=========6=========7=========8=========9=========0=========1====*/
+// ==== Semaphore Management ====
+/**
+\addtogroup CMSIS_RTOS_SemaphoreMgmt Semaphores
+\ingroup CMSIS_RTOS
+\brief Access shared resources simultaneously from different threads.
+\details
+Semaphores are used to manage and protect access to shared resources. Semaphores are very similar to
+\ref CMSIS_RTOS_MutexMgmt "Mutexes". Whereas a Mutex permits just one thread to access a shared resource at a
+time, a semaphore can be used to permit a fixed number of threads to access a pool of shared resources. Using semaphores,
+access to a group of identical peripherals can be managed (for example multiple DMA channels).
+
+\image html "Semaphore.png" "CMSIS-RTOS Semaphore"
+
+A semaphore object should be initialized to the maximum number of available tokens. This number of available resources is
+specified as parameter of the \ref osSemaphoreNew function. Each time a semaphore token is obtained with
+\ref osSemaphoreAcquire, the semaphore count is decremented. When the semaphore count is 0, no semaphore token can be
+obtained. The thread that tries to obtain the semaphore token needs to wait until the next token is free. Semaphores are
+released with \ref osSemaphoreRelease incrementing the semaphore count.
+
+\note Semaphore tokens can be acquired from threads and released from threads and ISRs.
+
+Working with Semaphores
+--------------------
+Follow these steps to create and use a semaphore:
+-# Declare the semaphore container and initialize the semaphore:
+\code
+osSemaphoreDef (my_semaphore); // Declare semaphore
+osSemaphoreId (my_semaphore_id); // Semaphore ID
+\endcode
+-# Initialize the semaphore container with a number of tokens within a thread:
+\code
+my_semaphore_id = osSemaphoreCreate(osSemaphore(my_semaphore), 4); // Create semaphore with 4 tokens
+\endcode
+\b Important: semaphore tokens can be created and destroyed as threads run. This means that can initialize a semaphore with
+zero tokens and then use one thread to add/create tokens to the semaphore while a second thread removes them. In this way you
+can distinguish between producer and consumer threads.
+-# Acquire a token from the semaphore container:
+\code
+osSemaphoreAcquire(my_semaphore_id, osWaitForever);
+\endcode
+-# When finished using the semaphore resource, send the token back to the semaphore container:
+\code
+osSemaphoreRelease(my_semaphore_id);
+\endcode
+
+Semaphore Use Cases
+-------------------
+Due to their flexibility, semaphores cover a wide range of synchronizing applications. At the same time, they are perhaps the
+most challenging RTOS object to understand. The following explains a use case for semaphores, taken from the book
+<a href="http://www.greenteapress.com/semaphores/" target="_blank">The Little Book Of Semaphores</a> by Allen B. Downey which
+is available for free download.
+
+<b>Non-binary Semaphore (Multiplex)</b>
+
+A multiplex limits the number of threads that can access a critical section of code. For example, this could be a function
+accessing DMA resources which can only support a limited number of calls.
+
+To allow multiple threads to run the function, initialize a semaphore to the maximum number of threads that can be allowed.
+The number of tokens in the semaphore represents the number of additional threads that may enter. If this number is zero,
+then the next thread trying to access the function will have to wait until one of the other threads exits and releases its
+token. When all threads have exited the token number is back to n. Ths following example shows the code for one of the
+threads that might access the resource:
+
+\code
+osSemaphoreId_t multiplex_id;
+
+void thread_n (void)
+ {
+ multiplex_id = osSemaphoreNew(3, 0, NULL);
+ while(1)
+ {
+ osSemaphoreAcquire(multiplex_id, osWaitForever);
+ // do something
+ osSemaphoreRelease(multiplex_id);
+ }
+ }
+\endcode
+
+@{
+*/
+/*=======0=========1=========2=========3=========4=========5=========6=========7=========8=========9=========0=========1====*/
+/**
+\typedef osSemaphoreId_t
+\details
+
+*/
+/**
+\struct osSemaphoreAttr_t
+\details
+
+*/
+/*=======0=========1=========2=========3=========4=========5=========6=========7=========8=========9=========0=========1====*/
+/**
+\fn osSemaphoreId_t osSemaphoreNew (uint32_t max_count, uint32_t initial_count, const osSemaphoreAttr_t *attr)
+\details
+Create and initialize a Semaphore object that is used to manage access to shared resources. The parameter \em count specifies the number of available resources.
+The \em max_count value 1 creates a binary semaphore.
+
+<b>Code Example</b>
+\code{.c}
+#include "cmsis_os2.h"
+
+osThreadId_t tid_thread1; // ID for thread 1
+osThreadId_t tid_thread2; // ID for thread 2
+
+osSemaphoreId_t semaphore; // Semaphore ID
+
+//
+// Thread 1 - High Priority - Active every 3ms
+//
+void *thread1 (void *argument) {
+ int32_t value;
+
+ while (1) {
+ osDelay(3); // Pass control to other tasks for 3ms
+ val = osSemaphoreAcquire (semaphore, 1); // Wait 1ms for the free semaphore
+ if (val > 0) {
+ // If there was no time-out the semaphore was acquired
+ : // OK, the interface is free now, use it.
+ osSemaphoreRelease (semaphore); // Return a token back to a semaphore
+ }
+ }
+}
+
+//
+// Thread 2 - Normal Priority - looks for a free semaphore and uses
+// the resource whenever it is available
+//
+void *thread2 (void *argument) {
+ while (1) {
+ osSemaphoreAcquire (semaphore, osWaitForever); // Wait indefinitely for a free semaphore
+ // OK, the interface is free now, use it.
+ :
+ osSemaphoreRelease (semaphore); // Return a token back to a semaphore.
+ }
+}
+
+
+void StartApplication (void) {
+ semaphore = osSemaphoreNew(osSemaphore(semaphore), 1);
+
+ tid_thread1 = osThreadCreate(thread1, NULL, NULL);
+ tid_thread2 = osThreadCreate(thread2, NULL, NULL);
+ :
+}
+\endcode
+
+
+*/
+/*=======0=========1=========2=========3=========4=========5=========6=========7=========8=========9=========0=========1====*/
+/**
+\fn osStatus_t osSemaphoreAcquire (osSemaphoreId_t semaphore_id, uint32_t millisec)
+\details
+Wait until a Semaphore token becomes available and acquires it for the thread if available.
+When no Semaphore token is available, the function waits for the time specified with the parameter \em millisec.
+
+The argument \a millisec specifies how long the system waits for a Semaphore token to become available.
+While the system waits the thread that is calling this function is put into the state \b WAITING.
+The \a millisec timeout can have the following values:
+ - when \a millisec is 0, the function returns instantly.
+ - when \a millisec is set to \b osWaitForever the function will wait for an infinite time until the Semaphore token becomes available.
+ - all other values specify a time in millisecond for a timeout.
+
+The return value indicates the number of available tokens (the semaphore count value). If 0 is returned, then no semaphore was available.
+
+\note Cannot be called from \ref CMSIS_RTOS_ISR_Calls "Interrupt Service Routines".
+*/
+/*=======0=========1=========2=========3=========4=========5=========6=========7=========8=========9=========0=========1====*/
+/**
+\fn osStatus_t osSemaphoreRelease (osSemaphoreId_t semaphore_id)
+\details
+Release a Semaphore token. This increments the count of available semaphore tokens.
+
+<b>\ref CMSIS_RTOS_Status</b>\n
+ - \em osOK: the semaphore has been released.
+ - \em osErrorResource: all tokens have already been released.
+ - \em osErrorParameter: the parameter \a semaphore_id is incorrect.
+*/
+/*=======0=========1=========2=========3=========4=========5=========6=========7=========8=========9=========0=========1====*/
+/**
+\fn uint32_t osSemaphoreGetCount (osSemaphoreId_t semaphore_id)
+\details
+Returns the count of availble semaphores of the semaphore object specified by /em semaphore_id.
+
+*/
+/*=======0=========1=========2=========3=========4=========5=========6=========7=========8=========9=========0=========1====*/
+/**
+\fn osStatus_t osSemaphoreDelete (osSemaphoreId_t semaphore_id)
+\details
+Delete a Semaphore object. The function releases internal memory obtained for Semaphore handling. After this call the \a semaphore_id is no longer valid and cannot be
+used. The Semaphore may be created again using the function \ref osSemaphoreNew.
+
+<b>\ref CMSIS_RTOS_Status</b>\n
+ - \em osOK: the semaphore object has been deleted.
+ - \em osErrorISR: \ref osSemaphoreDelete cannot be called from interrupt service routines.
+ - \em osErrorResource: the semaphore object could not be deleted.
+ - \em osErrorParameter: the parameter \a semaphore_id is incorrect.
+*/
+/// @}
\ No newline at end of file
diff --git a/CMSIS/DoxyGen/RTOS2/src/cmsis_os2_Status.txt b/CMSIS/DoxyGen/RTOS2/src/cmsis_os2_Status.txt
new file mode 100644
index 0000000..2285593
--- /dev/null
+++ b/CMSIS/DoxyGen/RTOS2/src/cmsis_os2_Status.txt
@@ -0,0 +1,19 @@
+/*=======0=========1=========2=========3=========4=========5=========6=========7=========8=========9=========0=========1====*/
+// ==== Status and Error Codes ====
+/**
+\addtogroup CMSIS_RTOS_Status Status and Error Codes
+\ingroup CMSIS_RTOS
+\brief Status and Error Codes returned by CMSIS-RTOS API functions.
+\details The Status and Error Codes section lists all the return values that the CMSIS-RTOS functions will return.
+@{
+*/
+/*=======0=========1=========2=========3=========4=========5=========6=========7=========8=========9=========0=========1====*/
+/**
+\typedef osStatus_t
+\details
+The \b osStatus_t enumeration defines the event status and error codes that are returned by the CMSIS-RTOS functions.
+*/
+/// @}
+
+
+
diff --git a/CMSIS/DoxyGen/RTOS2/src/cmsis_os2_Thread.txt b/CMSIS/DoxyGen/RTOS2/src/cmsis_os2_Thread.txt
new file mode 100644
index 0000000..8a4540e
--- /dev/null
+++ b/CMSIS/DoxyGen/RTOS2/src/cmsis_os2_Thread.txt
@@ -0,0 +1,434 @@
+/*=======0=========1=========2=========3=========4=========5=========6=========7=========8=========9=========0=========1====*/
+// ==== Thread Management ====
+/**
+\addtogroup CMSIS_RTOS_ThreadMgmt Thread Management
+\ingroup CMSIS_RTOS CMSIS_RTOSv2
+\brief Define, create, and control thread functions.
+\details
+The Thread Management function group allows defining, creating, and controlling thread functions in the system. The function
+\b main is a special thread function that is started at system initialization and has the initial priority
+\a osPriorityNormal.
+
+\anchor ThreadStates
+Threads can be in the following states:
+ - \b RUNNING: The thread that is currently running is in the \b RUNNING state. Only one thread at a time can be in this
+ state.
+ - \b READY: Threads which are ready to run are in the \b READY state. Once the \b RUNNING thread has terminated or is
+ \b WAITING, the next \b READY thread with the highest priority becomes the \b RUNNING thread.
+ - \b WAITING: Threads that are waiting for an event to occur are in the \b WAITING state.
+ - \b INACTIVE: Threads that are not created or terminated are in the \b INACTIVE state. These threads typically consume no
+ system resources.
+
+\image html "ThreadStatus.png" "Thread State and State Transitions"
+
+A CMSIS-RTOS assumes that threads are scheduled as shown in the figure <b>Thread State and State Transitions</b>. The thread
+states change as follows:
+ - A thread is created using the function \ref osThreadNew. This puts the thread into the \b READY or \b RUNNING state
+ (depending on the thread priority).
+ - CMSIS-RTOS is pre-emptive. The active thread with the highest priority becomes the \b RUNNING thread provided it does not
+ wait for any event. The initial priority of a thread is defined with the \ref osThreadAttr_t but may be changed during
+ execution using the function \ref osThreadSetPriority.
+ - The \b RUNNING thread transfers into the \b WAITING state when it is waiting for an event.
+ - Active threads can be terminated any time using the function \ref osThreadTerminate. Threads can terminate also by just
+ returning from the thread function. Threads that are terminated are in the \b INACTIVE state and typically do not consume
+ any dynamic memory resources.
+
+@{
+*/
+/*=======0=========1=========2=========3=========4=========5=========6=========7=========8=========9=========0=========1====*/
+/**
+\enum osThreadState_t
+\details
+\note
+MUST REMAIN UNCHANGED: the enumeration shall be consistent in every CMSIS-RTOS.
+
+*/
+/*=======0=========1=========2=========3=========4=========5=========6=========7=========8=========9=========0=========1====*/
+/**
+\enum osPriority_t
+\details
+\note
+MUST REMAIN UNCHANGED: the enumeration shall be consistent in every CMSIS-RTOS.
+
+The \b osPriority_t value specifies the priority for a thread. The default thread priority should be \a osPriorityNormal.
+If a Thread is active that has a higher priority than the currently executing thread, then a thread switch occurs immediately
+to execute the new task.
+
+To prevent from a priority inversion, a CMSIS-RTOS compliant OS may optionally implement a <b>priority inheritance</b> method.
+A priority inversion occurs when a high priority thread is waiting for a resource or event that is controlled by a thread
+with a lower priority.
+
+\note
+Cannot be called from \ref CMSIS_RTOS_ISR_Calls "Interrupt Service Routines".
+
+*/
+/*=======0=========1=========2=========3=========4=========5=========6=========7=========8=========9=========0=========1====*/
+/**
+\typedef void *(*os_thread_func_t) (void *argument)
+\details
+
+
+*/
+/*=======0=========1=========2=========3=========4=========5=========6=========7=========8=========9=========0=========1====*/
+/**
+\typedef osThreadId_t
+
+*/
+/*=======0=========1=========2=========3=========4=========5=========6=========7=========8=========9=========0=========1====*/
+/**
+\struct osThreadAttr_t
+
+*/
+/*=======0=========1=========2=========3=========4=========5=========6=========7=========8=========9=========0=========1====*/
+/**
+\def osThreadJoinable
+\details
+
+*/
+/**
+\def osThreadDetached
+\details
+
+*/
+/*=======0=========1=========2=========3=========4=========5=========6=========7=========8=========9=========0=========1====*/
+/**
+\fn osThreadId_t osThreadNew (os_thread_func_t func, void *argument, const osThreadAttr_t *attr)
+\details
+\note
+MUST REMAIN UNCHANGED: the function shall be consistent in every CMSIS-RTOS.
+
+Start a thread function by adding it to the Active Threads list and set it to state \b READY. Arguments fo the thread function are passed
+using the parameter pointer \em *argument. When the priority of the created thread function is higher than the current \b RUNNING thread,
+the created thread function starts instantly and becomes the new \b RUNNING thread. Thread sttributes are defined with the parameter pointer \em attr.
+Attributes include settings for thread priority, stack size, or memory allocation.
+
+\note
+Cannot be called from \ref CMSIS_RTOS_ISR_Calls "Interrupt Service Routines".
+
+
+*/
+/*=======0=========1=========2=========3=========4=========5=========6=========7=========8=========9=========0=========1====*/
+/**
+\fn osThreadId_t osThreadGetId (void)
+\details
+\note
+MUST REMAIN UNCHANGED: the function shall be consistent in every CMSIS-RTOS.
+
+Get the thread ID of the current running thread.
+
+\note
+Cannot be called from \ref CMSIS_RTOS_ISR_Calls "Interrupt Service Routines".
+
+\b Example:
+\code
+void ThreadGetId_example (void) {
+ osThreadId id; // id for the currently running thread
+
+ id = osThreadGetId ();
+ if (id == NULL) {
+ // Failed to get the id; not in a thread
+ }
+}
+\endcode
+*/
+/*=======0=========1=========2=========3=========4=========5=========6=========7=========8=========9=========0=========1====*/
+/**
+\fn osThreadState_t osThreadGetState (osThreadId_t thread_id)
+\details
+\note
+MUST REMAIN UNCHANGED: the function shall be consistent in every CMSIS-RTOS.
+
+Return the state of the thread identified by parameter \em thread_id.
+See \ref osThreadState_t for possible states.
+
+*/
+/*=======0=========1=========2=========3=========4=========5=========6=========7=========8=========9=========0=========1====*/
+/**
+\fn osStatus_t osThreadSetPriority (osThreadId_t thread_id, osPriority_t priority)
+\details
+\note
+MUST REMAIN UNCHANGED: the function shall be consistent in every CMSIS-RTOS.
+
+Change the priority of an active thread.
+
+\ref CMSIS_RTOS_Status
+ - \em osOK: the priority of the specified thread has been changed successfully.
+ - \em osErrorParameter: the value of the parameter \em thread_id or parameter \em priority is incorrect.
+ - \em osErrorResource: parameter \em thread_id refers to a thread that is not an active thread.
+ - \em osErrorISR: the function \b osThreadSetPriority cannot be called from interrupt service routines.
+
+\note
+Cannot be called from \ref CMSIS_RTOS_ISR_Calls "Interrupt Service Routines".
+
+\b Example:
+\code
+#include "cmsis_os2.h"
+
+void Thread_1 (void const *arg) { // Thread function
+ osThreadId id; // id for the currently running thread
+ osPriority pr; // thread priority
+ osStatus status; // status of the executed function
+
+ :
+ id = osThreadGetId (); // Obtain ID of current running thread
+
+ if (id != NULL) {
+ status = osThreadSetPriority (id, osPriorityBelowNormal);
+ if (status == osOK) {
+ // Thread priority changed to BelowNormal
+ }
+ else {
+ // Failed to set the priority
+ }
+ }
+ else {
+ // Failed to get the id
+ }
+ :
+}
+\endcode
+*/
+/*=======0=========1=========2=========3=========4=========5=========6=========7=========8=========9=========0=========1====*/
+/**
+\fn osPriority_t osThreadGetPriority (osThreadId_t thread_id)
+\details
+\note
+MUST REMAIN UNCHANGED: the function shall be consistent in every CMSIS-RTOS.
+
+Get the priority of an active thread. In case of failure, the value \b osPriorityError is returned.
+
+\note
+Cannot be called from \ref CMSIS_RTOS_ISR_Calls "Interrupt Service Routines".
+
+\b Example:
+\code
+#include "cmsis_os2.h"
+
+void Thread_1 (void const *arg) { // Thread function
+ osThreadId id; // id for the currently running thread
+ osPriority priority; // thread priority
+
+ id = osThreadGetId (); // Obtain ID of current running thread
+
+ if (id != NULL) {
+ priority = osThreadGetPriority (id);
+ }
+ else {
+ // Failed to get the id
+ }
+}
+\endcode
+*/
+/*=======0=========1=========2=========3=========4=========5=========6=========7=========8=========9=========0=========1====*/
+/**
+\fn osStatus_t osThreadYield (void)
+\details
+\note
+MUST REMAIN UNCHANGED: the function osThreadNew shall be consistent in every CMSIS-RTOS.
+
+Pass control to the next thread that is in state \b READY. If there is no other thread in state \b READY,
+then the current thread continues execution and no thread switching occurs.
+
+\note
+Cannot be called from \ref CMSIS_RTOS_ISR_Calls "Interrupt Service Routines".
+
+\b Example:
+\code
+#include "cmsis_os2.h"
+
+void Thread_1 (void const *arg) { // Thread function
+ osStatus status; // status of the executed function
+ :
+ while (1) {
+ status = osThreadYield(); //
+ if (status != osOK) {
+ // thread switch not occurred, not in a thread function
+ }
+ }
+}
+\endcode
+*/
+/*=======0=========1=========2=========3=========4=========5=========6=========7=========8=========9=========0=========1====*/
+/**
+\fn osStatus_t osThreadAbortWait (osThreadId_t thread_id)
+\details
+Forces a thread in WAITING stated, specified with \em thread_id, to continue operation.
+Functions that will put a thread into WAITING state are:
+\ref osEventFlagsWait and \ref osThreadFlagsWait,
+\ref osDelay and \ref osDelayUntil,
+\ref osMutexAcquire and \ref osSemaphoreAcquire,
+\ref osMessageQueueGet,
+\ref osThreadJoin.
+
+The return value of the waiting function is unspecified.
+
+*/
+/*=======0=========1=========2=========3=========4=========5=========6=========7=========8=========9=========0=========1====*/
+/**
+\fn osStatus_t osThreadSuspend (osThreadId_t thread_id)
+\details
+\note
+MUST REMAIN UNCHANGED: the function shall be consistent in every CMSIS-RTOS.
+
+Sets the thread identified by parameter \em thread_id into the state \em Suspended (\ref osThreadSuspended).
+The thread is not executed until restarted with the function \ref osThreadResume.
+
+*/
+/*=======0=========1=========2=========3=========4=========5=========6=========7=========8=========9=========0=========1====*/
+/**
+\fn osStatus_t osThreadResume (osThreadId_t thread_id)
+\details
+\note
+MUST REMAIN UNCHANGED: the function shall be consistent in every CMSIS-RTOS.
+
+Restart a thread defined by parameter \em thread_id that has been stopped with \ref osThreadSuspend.
+If the \b RUNNING thread has a higher priority, then the thread is put in state \b WAITING.
+
+\todo: check
+
+*/
+/*=======0=========1=========2=========3=========4=========5=========6=========7=========8=========9=========0=========1====*/
+/**
+\fn osStatus_t osThreadDetach (osThreadId_t thread_id)
+\details
+Changes the attribute of a thread specified in \em thread_id to \ref osThreadDetached. Detached threads are not joinable with \ref osThreadJoin.
+When a detached thread is terminated all resources are returned to the system. The behaviour of \ref osThreadDetach on an already detached thread is undefined.
+
+\note
+MUST REMAIN UNCHANGED: the function shall be consistent in every CMSIS-RTOS.
+
+\todo : describe
+
+\note
+Cannot be called from \ref CMSIS_RTOS_ISR_Calls "Interrupt Service Routines".
+*/
+/*=======0=========1=========2=========3=========4=========5=========6=========7=========8=========9=========0=========1====*/
+/**
+\fn osStatus_t osThreadJoin (osThreadId_t thread_id, void **exit_ptr)
+\details
+Waits for the thread specified by \em thread_id to terminate.
+If that thread has already terminated, then \ref osThreadJoin returns immediately.
+The thread referred to by thread_id must joinable. By default threads are created with the attribute \ref osThreadJoinable. The thread may not have been detached by \ref osThreadDetach.
+
+\note
+MUST REMAIN UNCHANGED: the function shall be consistent in every CMSIS-RTOS.
+
+\note
+Cannot be called from \ref CMSIS_RTOS_ISR_Calls "Interrupt Service Routines".
+
+
+\b Example:
+\code
+#include "cmsis_os2.h"
+
+void *worker(void *arg)
+{
+ .. // work work work
+ return 0;
+}
+
+
+int join_threads(void)
+{
+ osThreadId_t th1, th2;
+
+ th1 = osThreadNew(worker, ¶m, NULL);
+ th2 = osThreadNew(worker, ¶m, NULL);
+
+ (void) osThreadJoin(th1, NULL);
+ (void) osThreadJoin(th2, NULL);
+ return 0;
+}
+\endcode
+
+*/
+/*=======0=========1=========2=========3=========4=========5=========6=========7=========8=========9=========0=========1====*/
+/**
+\fn __NO_RETURN void osThreadExit (void *exit_ptr)
+\details
+\note
+MUST REMAIN UNCHANGED: the function shall be consistent in every CMSIS-RTOS.
+
+Exit the \b RUNNING thread to an exit point defined by parameter pointer \em exit_ptr.
+
+\note
+Cannot be called from \ref CMSIS_RTOS_ISR_Calls "Interrupt Service Routines".
+*/
+/*=======0=========1=========2=========3=========4=========5=========6=========7=========8=========9=========0=========1====*/
+/**
+\fn osStatus_t osThreadTerminate (osThreadId_t thread_id)
+\details
+\note
+MUST REMAIN UNCHANGED: the function shall be consistent in every CMSIS-RTOS.
+
+Remove the thread function from the active thread list. If the thread is currently RUNNING the execution will stop.
+
+\note
+Cannot be called from \ref CMSIS_RTOS_ISR_Calls "Interrupt Service Routines".
+
+\code
+#include "cmsis_os2.h"
+
+void *Thread_1 (void c*arg); // function prototype for Thread_1
+
+void ThreadTerminate_example (void) {
+ osStatus_t status;
+ osThreadId_t id;
+
+ id = osThreadNew (Thread_1, NULL, NULL); // create the thread
+ :
+ status = osThreadTerminate (id); // stop the thread
+ if (status == osOK) {
+ // Thread was terminated successfully
+ }
+ else {
+ // Failed to terminate a thread
+ }
+}
+\endcode
+*/
+/// @}
+
+
+// these struct members must stay outside the group to avoid double entries in documentation
+/**
+\var osThreadAttr_t::attr_bits
+\details
+The following predefined bit masks can be assigned to set options for a thread object.
+
+Bit Mask | Description
+:-----------------------|:-----------------------------------------
+osThreadJoinable | Thread is created in a joinable state (default).
+osThreadDettached | Thread is created in a detached state.
+
+\var osThreadAttr_t::cb_mem
+\details
+Pointer to a memory location for the thread object. This can optionally be used for custom memory management systems.
+Specifytoken{NULL} to use the kernel memory management.
+
+\var osThreadAttr_t::cb_size
+\details
+The size of the memory block passed with \ref cb_mem. Must be the size of a thread object or larger.
+
+\var osThreadAttr_t::name
+\details
+String with a human readable name of the thread object.
+
+\var osThreadAttr_t::priority
+\details
+Specifies the initial thread priority with a value from #osPriority_t.
+
+\var osThreadAttr_t::reserved
+\details
+Reserved for future use. Must be \token{0}.
+
+\var osThreadAttr_t::stack_mem
+\details
+Pointer to a memory location for the thread stack. This can optionally be used for custom memory management systems.
+Specify \token{NULL} to use the kernel memory management.
+
+\var osThreadAttr_t::stack_mem
+\details
+The size of the stack specified by \ref stack_mem in Bytes.
+
+*/
diff --git a/CMSIS/DoxyGen/RTOS2/src/cmsis_os2_ThreadFlags.txt b/CMSIS/DoxyGen/RTOS2/src/cmsis_os2_ThreadFlags.txt
new file mode 100644
index 0000000..de7e8b8
--- /dev/null
+++ b/CMSIS/DoxyGen/RTOS2/src/cmsis_os2_ThreadFlags.txt
@@ -0,0 +1,91 @@
+
+/*=======0=========1=========2=========3=========4=========5=========6=========7=========8=========9=========0=========1====*/
+// ==== Thread Flags Management ====
+/**
+\addtogroup CMSIS_RTOS_ThreadFlagsMgmt Thread Flags
+\ingroup CMSIS_RTOS
+\brief Synchronize threads using flags.
+\details
+Thread Flags are a more specialized version of the Event Flags. See \ref CMSIS_RTOS_EventFlags.
+While Event Flags can be used to globally signal a number of threads, thread flags are only send to a single specific thread. Every thread instance can receive thread flags without any additional allocation of a thread flags object.
+
+@{
+*/
+/*=======0=========1=========2=========3=========4=========5=========6=========7=========8=========9=========0=========1====*/
+/** \def osFlagsWaitAny
+
+Reference:
+ - \ref osEventFlagsWait
+ - \ref osThreadFlagsWait
+*/
+/*=======0=========1=========2=========3=========4=========5=========6=========7=========8=========9=========0=========1====*/
+/** \def osFlagsWaitAll
+
+Reference:
+ - \ref osEventFlagsWait
+ - \ref osThreadFlagsWait
+*/
+/*=======0=========1=========2=========3=========4=========5=========6=========7=========8=========9=========0=========1====*/
+/** \def osFlagsAutoClear
+
+Reference:
+ - \ref osEventFlagsWait
+ - \ref osThreadFlagsWait
+*/
+/*=======0=========1=========2=========3=========4=========5=========6=========7=========8=========9=========0=========1====*/
+/** \fn int32_t osThreadFlagsSet (osThreadId_t thread_id, int32_t flags )
+Set the thread flags for a thread instance specified by \em thread_id. This function may be used also within interrupt service routines.
+The threads waiting for the flag set will be notified to resume from WAITING state.
+
+<b>Code Example</b>
+\code
+void *Thread (void *arg);
+
+static void EX_Signal_1 (void) {
+ int32_t signals;
+ osThreadId_t thread_id;
+
+ thread_id = osThreadCreate (Thread, NULL, NULL);
+ signals = osThreadFlagsSet (event_id, 0x00000001ul); // Send signals to the created thread
+}
+\endcode
+*/
+/*=======0=========1=========2=========3=========4=========5=========6=========7=========8=========9=========0=========1====*/
+/** \fn osStatus osThreadFlagsClear (osThreadId thread_id, int32_t flags);
+Clear the event flags of an thread flags object.
+
+*/
+/*=======0=========1=========2=========3=========4=========5=========6=========7=========8=========9=========0=========1====*/
+/** \fn int32_t osThreadFlagsGet (osThreadId thread_id);
+Return the event flags currently set in an thread flags object.
+
+*/
+/*=======0=========1=========2=========3=========4=========5=========6=========7=========8=========9=========0=========1====*/
+
+/** \fn int32_t osThreadFlagsWait (int32_t flags, uint32_t options, uint32_t millisec);
+Suspend the execution of the current \b RUNNING thread until any or all specified thread flags with the parameter \a flags are set.
+The /em options parameter specifies the wait condition.
+
+|Option | |
+|--------------------|-------------------------------------------------------|
+|\b osFlagsWaitAny | Wait for any flag (default). |
+|\b osFlagsWaitAll | Wait for all flags. |
+|\b osFlagsAutoClear | Clear flags which have been specified to wait for. |
+
+If osFlagsAutoClear is not set in the options /ref osThreadFlagClear can be used to clear flags manually.
+
+When these thread flags are already set, the function returns instantly. Otherwise the thread is put into the state \b WAITING.
+
+
+<b>Code Example</b>
+\code
+#include "cmsis_os2.h"
+:
+void *Thread (void* arg) {
+:
+ osThreadFlagsGet (0x00000001ul, NULL, osWaitForever); //Wait forever until event 0x01 is set.
+:
+}
+\endcode
+*/
+/// @}
\ No newline at end of file
diff --git a/CMSIS/DoxyGen/RTOS2/src/cmsis_os2_Timer.txt b/CMSIS/DoxyGen/RTOS2/src/cmsis_os2_Timer.txt
new file mode 100644
index 0000000..9232183
--- /dev/null
+++ b/CMSIS/DoxyGen/RTOS2/src/cmsis_os2_Timer.txt
@@ -0,0 +1,241 @@
+
+
+/*=======0=========1=========2=========3=========4=========5=========6=========7=========8=========9=========0=========1====*/
+// ==== Timer Management Functions ====
+/**
+\addtogroup CMSIS_RTOS_TimerMgmt Timer Management
+\ingroup CMSIS_RTOS
+\brief Create and control timer and timer callback functions.
+\details
+In addition to the \ref CMSIS_RTOS_Wait CMSIS-RTOS also supports virtual timer objects. These timer objects can
+trigger the execution of a function (not threads). When a timer expires, a callback function is executed to run associated
+code with the timer. The timer number is passed as a parameter to the callback function. Each timer can be configured as a
+one-shot or a periodic timer. A periodic timer repeats its operation until it is \ref osTimerDelete "deleted" or
+\ref osTimerStop "stopped". All timers can be \ref osTimerStart "started, restarted", or \ref osTimerStop "stopped".
+
+Timers are handled in the thread \b osTimerThread. Callback functions run under control of this thread and may use other
+CMSIS-RTOS API calls.
+
+The figure below shows the behavior of a periodic timer. For one-shot timers, the timer stops after execution of the
+callback function.
+
+\image html "Timer.png" "Behavior of a Periodic Timer"
+
+Working with Timers
+--------------------
+The following steps are required to use a timer:
+-# Define the timers:
+\code
+osTimerId one_shot_id, periodic_id;
+\endcode
+-# Instantiate and start the timers:
+\code
+one_shot_id = osTimerNew((os_timer_func_t)&one_shot_Callback, osTimerOnce, (void *)0); // creates a one-shot timer;
+ // (void*)0 is passed as an argument
+ // to the callback function
+periodic_id = osTimerNew((os_timer_func_t)&periodic_Callback, osTimerPeriodic, (void *)5); // creates a periodic timer;
+ // (void*)5 is passed as an argument
+ // to the callback function
+osTimerStart(one_shot_id, 500);
+osTimerStart(periodic, 1500);
+\endcode
+
+@{
+*/
+/*=======0=========1=========2=========3=========4=========5=========6=========7=========8=========9=========0=========1====*/
+/**
+\enum osTimerType_t
+\details
+\note MUST REMAIN UNCHANGED: \b osTimerType_t shall be consistent in every CMSIS-RTOS.
+The \ref osTimerType_t specifies the a repeating (periodic) or one-shot timer for the function \ref osTimerNew.
+
+*/
+/*=======0=========1=========2=========3=========4=========5=========6=========7=========8=========9=========0=========1====*/
+/**
+\typedef osTimerId_t
+\details
+Instances of this type hold a reference to a timer object.
+
+*/
+/*=======0=========1=========2=========3=========4=========5=========6=========7=========8=========9=========0=========1====*/
+/**
+\typedef void (*os_timer_func_t) (void *argument)
+\details
+
+*/
+/*=======0=========1=========2=========3=========4=========5=========6=========7=========8=========9=========0=========1====*/
+/**
+\struct osTimerAttr_t
+\details
+
+
+
+*/
+/*=======0=========1=========2=========3=========4=========5=========6=========7=========8=========9=========0=========1====*/
+/**
+\fn osTimerId_t osTimerNew (os_timer_func_t func, osTimerType_t type, void *argument, const osTimerAttr_t *attr)
+\details
+Create a one-shot or periodic timer and associate it with a callback function argument.
+The timer is in stopped until it is started with \ref osTimerStart.
+
+\note Cannot be called from \ref CMSIS_RTOS_ISR_Calls "Interrupt Service Routines".
+
+<b>Code Example</b>
+\code{.c}
+#include "cmsis_os2.h"
+
+void Timer1_Callback (void const *arg); // prototypes for timer callback function
+void Timer2_Callback (void const *arg);
+
+uint32_t exec1; // argument for the timer call back function
+uint32_t exec2; // argument for the timer call back function
+
+void TimerCreate_example (void) {
+ osTimerId_t id1; // timer id
+ osTimerId_t id2; // timer id
+
+ // Create one-shoot timer
+ exec1 = 1;
+ id1 = osTimerNew ((os_timer_func_t)&Timer1_Callback, osTimerOnce, &exec1);
+ if (id1 != NULL) {
+ // One-shoot timer created
+ }
+
+ // Create periodic timer
+ exec2 = 2;
+ id2 = osTimerNew ((os_timer_func_t)&Timer2_Callback, osTimerPeriodic, &exec2);
+ if (id2 != NULL) {
+ // Periodic timer created
+ }
+ :
+}
+\endcode
+*/
+/*=======0=========1=========2=========3=========4=========5=========6=========7=========8=========9=========0=========1====*/
+/**
+\fn osStatus_t osTimerStart (osTimerId_t timer_id, uint32_t millisec)
+\details
+Start or restart the timer.
+
+<b>\ref CMSIS_RTOS_Status</b>\n
+ - \em osOK: the specified timer has been started or restarted.
+ - \em osErrorISR: \ref osTimerStart cannot be called from interrupt service routines.
+ - \em osErrorParameter: \a timer_id is incorrect.
+
+\note Cannot be called from \ref CMSIS_RTOS_ISR_Calls "Interrupt Service Routines".
+
+<b>Code Example</b>
+\code{.c}
+#include "cmsis_os2.h"
+
+void Timer_Callback (void const *arg) { // timer callback function
+ // arg contains &exec
+ // called every second after osTimerStart
+}
+
+uint32_t exec; // argument for the timer call back function
+
+void TimerStart_example (void) {
+ osTimerId_t id; // timer id
+ uint32_t timerDelay; // timer value
+ osStatus_t status; // function return status
+
+ // Create periodic timer
+ exec = 1;
+ id = osTimerNew ((os_timer_func_t)&Timer_Callback, osTimerPeriodic, &exec);
+ if (id) {
+ timerDelay = 1000;
+ status = osTimerStart (id, timerDelay); // start timer
+ if (status != osOK) {
+ // Timer could not be started
+ }
+ }
+ :
+}
+\endcode
+*/
+/*=======0=========1=========2=========3=========4=========5=========6=========7=========8=========9=========0=========1====*/
+/**
+\fn osStatus_t osTimerStop (osTimerId_t timer_id)
+\details
+Stop the timer.
+
+<b>\ref CMSIS_RTOS_Status</b>\n
+ - \em osOK: the specified timer has been stopped.
+ - \em osErrorISR: \ref osTimerStop cannot be called from interrupt service routines.
+ - \em osErrorParameter: \a timer_id is incorrect.
+ - \em osErrorResource: the timer is not started.
+
+\note Cannot be called from \ref CMSIS_RTOS_ISR_Calls "Interrupt Service Routines".
+
+<b>Code Example</b>
+\code{.c}
+#include "cmsis_os2.h"
+
+void Timer_Callback (void const *arg); // prototype for timer callback function
+
+void TimerStop_example (void) {
+ osTimerId_t id; // timer id
+ osStatus_t status; // function return status
+
+ // Create periodic timer
+ exec = 1;
+ id = osTimerCreate ((os_timer_func_t)&Timer_Callback, osTimerPeriodic, NULL);
+ osTimerStart (id, 1000); // start timer
+ :
+ status = osTimerStop (id); // stop timer
+ if (status != osOK) {
+ // Timer could not be stopped
+ }
+ :
+ osTimerStart (id, 1000); // start timer again
+ :
+}
+\endcode
+*/
+/*=======0=========1=========2=========3=========4=========5=========6=========7=========8=========9=========0=========1====*/
+/**
+\fn uint32_t osTimerIsRunning (osTimerId_t timer_id)
+\details
+Test if timer is running.
+Returns 0 if timer is stopped.
+Returns 1 if timer is running.
+
+*/
+/*=======0=========1=========2=========3=========4=========5=========6=========7=========8=========9=========0=========1====*/
+/**
+\fn osStatus_t osTimerDelete (osTimerId_t timer_id)
+\details
+Delete the timer object.
+
+<b>\ref CMSIS_RTOS_Status</b>\n
+ - \em osOK: the specified timer has been deleted.
+ - \em osErrorISR: \ref osTimerDelete cannot be called from interrupt service routines.
+ - \em osErrorParameter: \a timer_id is incorrect.
+
+\note Cannot be called from \ref CMSIS_RTOS_ISR_Calls "Interrupt Service Routines".
+
+<b>Code Example</b>
+\code{.c}
+#include "cmsis_os2.h"
+
+void Timer_Callback (void const *arg); // prototype for timer callback function
+
+void TimerDelete_example (void) {
+ osTimerId_t id; // timer id
+ osStatus_t status; // function return status
+
+ // Create periodic timer
+ exec = 1;
+ id = osTimerCreate (osTimer(Timer2), osTimerPeriodic, &exec);
+ osTimerStart (id, 1000UL); // start timer
+ :
+ status = osTimerDelete (id); // stop and delete timer
+ if (status != osOK) {
+ // Timer could not be deleted
+ }
+ :
+}
+\endcode
+*/
+/// @}
diff --git a/CMSIS/DoxyGen/RTOS2/src/cmsis_os2_Wait.txt b/CMSIS/DoxyGen/RTOS2/src/cmsis_os2_Wait.txt
new file mode 100644
index 0000000..0d52743
--- /dev/null
+++ b/CMSIS/DoxyGen/RTOS2/src/cmsis_os2_Wait.txt
@@ -0,0 +1,89 @@
+
+/*=======0=========1=========2=========3=========4=========5=========6=========7=========8=========9=========0=========1====*/
+// ==== Generic Wait Functions ====
+/**
+\addtogroup CMSIS_RTOS_Wait Generic Wait Functions
+\ingroup CMSIS_RTOS
+\brief Wait for a time period or unspecified events.
+\details
+The Generic Wait function group provides means for a time delay and allow to wait for unspecified events.
+
+@{
+*/
+/*=======0=========1=========2=========3=========4=========5=========6=========7=========8=========9=========0=========1====*/
+/**
+\def osWaitForever
+\details
+
+Reference:
+ - \ref osDelay
+ - \ref osDelayUntil
+*/
+/*=======0=========1=========2=========3=========4=========5=========6=========7=========8=========9=========0=========1====*/
+/**
+\fn osStatus_t osDelay (uint32_t millisec);
+\details
+Wait for a specified time period in \a millisec.
+
+The \ref CMSIS_RTOS_TimeOutValue "millisec" value is converted to a number of timer ticks and is therefore an upper bound. The
+exact time delay depends on the actual time elapsed since the last timer tick.
+
+For a value of <b>1</b>, the system waits until the next timer tick occurs. That means that the actual time delay may be up
+to one timer tick less.
+
+<b>\ref CMSIS_RTOS_Status</b>\n
+ - \em osEventTimeout: the time delay is executed.
+ - \em osErrorISR: \ref osDelay cannot be called from interrupt service routines.
+
+\note Cannot be called from \ref CMSIS_RTOS_ISR_Calls "Interrupt Service Routines".
+
+<b>Code Example</b>
+\code
+#include "cmsis_os2.h"
+
+void *Thread_1 (void *arg) { // Thread function
+ osStatus_t status; // capture the return status
+ uint32_t delayTime; // delay time in milliseconds
+
+ delayTime = 1000; // delay 1 second
+ status = osDelay (delayTime); // suspend thread execution
+ if (status != osOK) {
+ // handle error code
+ }
+}
+\endcode
+*/
+/*=======0=========1=========2=========3=========4=========5=========6=========7=========8=========9=========0=========1====*/
+/**
+\fn osStatus_t osDelayUntil (uint64_t millisec)
+\details
+Wait until an absolute time - specified in millisec - is reached.
+
+The \ref CMSIS_RTOS_TimeOutValue "millisec" value is converted to a number of timer ticks and is therefore an upper bound. The
+exact time delay depends on the actual time elapsed since the last timer tick.
+
+\ref osKernelGetTime can be used to retrieve the current elapsed time of the kernel in millisec.
+
+<b>\ref CMSIS_RTOS_Status</b>\n
+ - \em osEventTimeout: the time delay is executed.
+ - \em osErrorISR: \ref osDelayUntil cannot be called from interrupt service routines.
+
+\note Cannot be called from \ref CMSIS_RTOS_ISR_Calls "Interrupt Service Routines".
+
+<b>Code Example</b>
+\code
+#include "cmsis_os2.h"
+
+void *Thread_1 (void *arg) { // Thread function
+ osStatus_t status; // capture the return status
+ uint32_t delayTime; // delay time in milliseconds
+
+ delayTime = osKernelGetTime() + 2000; // 2 seconds from now.
+ status = osDelay (delayTime); // suspend thread execution
+ if (status != osOK) {
+ // handle error code
+ }
+}
+\endcode
+*/
+/// @}
diff --git a/CMSIS/DoxyGen/RTOS2/src/images/add_item.png b/CMSIS/DoxyGen/RTOS2/src/images/add_item.png
new file mode 100644
index 0000000..20e6946
--- /dev/null
+++ b/CMSIS/DoxyGen/RTOS2/src/images/add_item.png
Binary files differ
diff --git a/CMSIS/DoxyGen/RTOS2/src/images/config_wizard.png b/CMSIS/DoxyGen/RTOS2/src/images/config_wizard.png
new file mode 100644
index 0000000..4a6b07b
--- /dev/null
+++ b/CMSIS/DoxyGen/RTOS2/src/images/config_wizard.png
Binary files differ
diff --git a/CMSIS/DoxyGen/RTOS2/src/images/manage_rte_output.png b/CMSIS/DoxyGen/RTOS2/src/images/manage_rte_output.png
new file mode 100644
index 0000000..d7a8328
--- /dev/null
+++ b/CMSIS/DoxyGen/RTOS2/src/images/manage_rte_output.png
Binary files differ
diff --git a/CMSIS/DoxyGen/RTOS2/src/images/project_window.png b/CMSIS/DoxyGen/RTOS2/src/images/project_window.png
new file mode 100644
index 0000000..0846b93
--- /dev/null
+++ b/CMSIS/DoxyGen/RTOS2/src/images/project_window.png
Binary files differ
diff --git a/CMSIS/DoxyGen/genDoc.bat b/CMSIS/DoxyGen/genDoc.bat
index b7f1dc4..eb2a56c 100644
--- a/CMSIS/DoxyGen/genDoc.bat
+++ b/CMSIS/DoxyGen/genDoc.bat
@@ -75,6 +75,8 @@
REM copy /Y Doxygen_Templates\search.css ..\Documentation\SVD\html\search\.
copy /Y Doxygen_Templates\search.css ..\Documentation\DSP\html\search\.
copy /Y Doxygen_Templates\search.css ..\Documentation\DAP\html\search\.
+copy /Y Doxygen_Templates\search.css ..\Documentation\RTOS\html\search\.
+copy /Y Doxygen_Templates\search.css ..\Documentation\RTOS2\html\search\.
:END
ECHO.
diff --git a/CMSIS/RTOS2/RTX/Examples/Simulation/RTX5_Blinky/Abstract.txt b/CMSIS/RTOS2/RTX/Examples/Simulation/RTX5_Blinky/Abstract.txt
new file mode 100644
index 0000000..5a44255
--- /dev/null
+++ b/CMSIS/RTOS2/RTX/Examples/Simulation/RTX5_Blinky/Abstract.txt
@@ -0,0 +1,26 @@
+The RTX_Blinky project is a simple RTX Kernel based example
+for a simulated Cortex-M3 device
+
+Example functionality:
+ - Clock Settings:
+ - XTAL = 12 MHz
+ - Core = 12 MHz
+
+The simple RTX Kernel based example simulates the step-motor
+driver. Four LEDs are blinking simulating the activation of
+the four output driver stages
+The simulation does not provide LEDs, so the state changes
+are output on the Debug printf window:
+
+- phase A
+- phase B
+- phase C
+- phase D
+
+This example simulates Half step driver mode and
+CW rotation direction.
+
+
+The BLINKY example program is available for one target:
+
+ Simulation: configured for a simulated on-chip Flash
diff --git a/CMSIS/RTOS2/RTX/Examples/Simulation/RTX5_Blinky/Blinky.c b/CMSIS/RTOS2/RTX/Examples/Simulation/RTX5_Blinky/Blinky.c
new file mode 100644
index 0000000..583f16a
--- /dev/null
+++ b/CMSIS/RTOS2/RTX/Examples/Simulation/RTX5_Blinky/Blinky.c
@@ -0,0 +1,160 @@
+/* --------------------------------------------------------------------------
+ * Copyright (c) 2013-2016 ARM Limited. All rights reserved.
+ *
+ * SPDX-License-Identifier: Apache-2.0
+ *
+ * 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.
+ *
+ * Name: BLinky.c
+ * Purpose: RTX example program
+ *
+ *---------------------------------------------------------------------------*/
+
+#include <stdio.h>
+
+#include "ARMCM3.h" // Device header
+#include "cmsis_os2.h" // ARM::CMSIS:RTOS2:Keil RTX5
+
+
+osThreadId_t tid_phaseA; /* Thread id of thread: phase_a */
+osThreadId_t tid_phaseB; /* Thread id of thread: phase_b */
+osThreadId_t tid_phaseC; /* Thread id of thread: phase_c */
+osThreadId_t tid_phaseD; /* Thread id of thread: phase_d */
+osThreadId_t tid_clock; /* Thread id of thread: clock */
+osThreadId_t tid_lcd; /* Thread id of thread: lcd */
+
+#define LED_A 0
+#define LED_B 1
+#define LED_C 2
+#define LED_D 3
+#define LED_CLK 7
+
+
+/*----------------------------------------------------------------------------
+ * Switch LED on
+ *---------------------------------------------------------------------------*/
+void Switch_On (unsigned char led) {
+ printf("LED On: #%d\n\r", led);
+}
+
+/*----------------------------------------------------------------------------
+ * Switch LED off
+ *---------------------------------------------------------------------------*/
+void Switch_Off (unsigned char led) {
+ printf("LED Off: #%d\n\r", led);
+}
+
+
+/*----------------------------------------------------------------------------
+ * Function 'signal_func' called from multiple threads
+ *---------------------------------------------------------------------------*/
+void signal_func (osThreadId_t tid) {
+ osThreadFlagsSet(tid_clock, 0x0100); /* set signal to clock thread */
+ osDelay(500); /* delay 500ms */
+ osThreadFlagsSet(tid_clock, 0x0100); /* set signal to clock thread */
+ osDelay(500); /* delay 500ms */
+ osThreadFlagsSet(tid, 0x0001); /* set signal to thread 'thread' */
+ osDelay(500); /* delay 500ms */
+}
+
+/*----------------------------------------------------------------------------
+ * Thread 1 'phaseA': Phase A output
+ *---------------------------------------------------------------------------*/
+void *phaseA (void *argument) {
+ for (;;) {
+ osThreadFlagsWait(0x0001, osFlagsWaitAny ,osWaitForever); /* wait for an event flag 0x0001 */
+ Switch_On (LED_A);
+ signal_func(tid_phaseB); /* call common signal function */
+ Switch_Off(LED_A);
+ }
+}
+
+/*----------------------------------------------------------------------------
+ * Thread 2 'phaseB': Phase B output
+ *---------------------------------------------------------------------------*/
+void *phaseB (void *argument) {
+ for (;;) {
+ osThreadFlagsWait(0x0001, osFlagsWaitAny, osWaitForever); /* wait for an event flag 0x0001 */
+ Switch_On (LED_B);
+ signal_func(tid_phaseC); /* call common signal function */
+ Switch_Off(LED_B);
+ }
+}
+
+/*----------------------------------------------------------------------------
+ * Thread 3 'phaseC': Phase C output
+ *---------------------------------------------------------------------------*/
+void *phaseC (void *argument) {
+ for (;;) {
+ osThreadFlagsWait(0x0001, osFlagsWaitAny, osWaitForever); /* wait for an event flag 0x0001 */
+ Switch_On (LED_C);
+ signal_func(tid_phaseD); /* call common signal function */
+ Switch_Off(LED_C);
+ }
+}
+
+/*----------------------------------------------------------------------------
+ * Thread 4 'phaseD': Phase D output
+ *---------------------------------------------------------------------------*/
+void *phaseD (void *argument) {
+ for (;;) {
+ osThreadFlagsWait(0x0001, osFlagsWaitAny, osWaitForever); /* wait for an event flag 0x0001 */
+ Switch_On (LED_D);
+ signal_func(tid_phaseA); /* call common signal function */
+ Switch_Off(LED_D);
+ }
+}
+
+/*----------------------------------------------------------------------------
+ * Thread 5 'clock': Signal Clock
+ *---------------------------------------------------------------------------*/
+void *clock (void *argument) {
+ for (;;) {
+ osThreadFlagsWait(0x0100, osFlagsWaitAny, osWaitForever); /* wait for an event flag 0x0100 */
+ Switch_On (LED_CLK);
+ osDelay(80); /* delay 80ms */
+ Switch_Off(LED_CLK);
+ }
+}
+
+/*----------------------------------------------------------------------------
+ * Main: Initialize and start RTX Kernel
+ *---------------------------------------------------------------------------*/
+void *app_main (void *argument) {
+
+ tid_phaseA = osThreadNew(phaseA, NULL, NULL);
+ tid_phaseB = osThreadNew(phaseB, NULL, NULL);
+ tid_phaseC = osThreadNew(phaseC, NULL, NULL);
+ tid_phaseD = osThreadNew(phaseD, NULL, NULL);
+ tid_clock = osThreadNew(clock, NULL, NULL);
+
+ osThreadFlagsSet(tid_phaseA, 0x0001); /* set signal to phaseA thread */
+
+ osDelay(osWaitForever);
+ while(1);
+}
+
+int main (void) {
+
+ // System Initialization
+ SystemCoreClockUpdate();
+ // ...
+ osKernelInitialize(); // Initialize CMSIS-RTOS
+ osThreadNew(app_main, NULL, NULL); // Create application main thread
+ if (osKernelGetState() == osKernelReady) {
+ osKernelStart(); // Start thread execution
+ }
+
+ while(1);
+}
+
diff --git a/CMSIS/RTOS2/RTX/Examples/Simulation/RTX5_Blinky/Blinky.uvguix b/CMSIS/RTOS2/RTX/Examples/Simulation/RTX5_Blinky/Blinky.uvguix
new file mode 100644
index 0000000..85bb7a4
--- /dev/null
+++ b/CMSIS/RTOS2/RTX/Examples/Simulation/RTX5_Blinky/Blinky.uvguix
@@ -0,0 +1,1358 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no" ?>
+<ProjectGui xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="project_guix.xsd">
+
+ <SchemaVersion>-5.1</SchemaVersion>
+
+ <Header>### uVision Project, (C) Keil Software</Header>
+
+ <ViewPool/>
+
+ <SECTreeCtrl>
+ <View>
+ <WinId>38003</WinId>
+ <ViewName>Registers</ViewName>
+ <TableColWidths>115 111</TableColWidths>
+ </View>
+ <View>
+ <WinId>346</WinId>
+ <ViewName>Code Coverage</ViewName>
+ <TableColWidths>774 160</TableColWidths>
+ </View>
+ <View>
+ <WinId>204</WinId>
+ <ViewName>Performance Analyzer</ViewName>
+ <TableColWidths>934</TableColWidths>
+ </View>
+ </SECTreeCtrl>
+
+ <TreeListPane>
+ <View>
+ <WinId>1506</WinId>
+ <ViewName>Symbols</ViewName>
+ <UserString></UserString>
+ <TableColWidths>133 133 133</TableColWidths>
+ </View>
+ <View>
+ <WinId>1936</WinId>
+ <ViewName>Watch 1</ViewName>
+ <UserString></UserString>
+ <TableColWidths>133 133 133</TableColWidths>
+ </View>
+ <View>
+ <WinId>1937</WinId>
+ <ViewName>Watch 2</ViewName>
+ <UserString></UserString>
+ <TableColWidths>133 133 133</TableColWidths>
+ </View>
+ <View>
+ <WinId>1935</WinId>
+ <ViewName>Call Stack + Locals</ViewName>
+ <UserString></UserString>
+ <TableColWidths>133 133 133</TableColWidths>
+ </View>
+ <View>
+ <WinId>2506</WinId>
+ <ViewName>Trace Data</ViewName>
+ <UserString></UserString>
+ <TableColWidths>75 135 130 95 70 230 200 150</TableColWidths>
+ </View>
+ </TreeListPane>
+
+ <WindowSettings>
+ <LogicAnalizer>
+ <ShowLACursor>1</ShowLACursor>
+ <ShowSignalInfo>1</ShowSignalInfo>
+ <ShowCycles>0</ShowCycles>
+ </LogicAnalizer>
+ </WindowSettings>
+
+ <WinLayoutEx>
+ <sActiveDebugView></sActiveDebugView>
+ <WindowPosition>
+ <length>44</length>
+ <flags>2</flags>
+ <showCmd>3</showCmd>
+ <MinPosition>
+ <xPos>-1</xPos>
+ <yPos>-1</yPos>
+ </MinPosition>
+ <MaxPosition>
+ <xPos>-1</xPos>
+ <yPos>-1</yPos>
+ </MaxPosition>
+ <NormalPosition>
+ <Top>83</Top>
+ <Left>191</Left>
+ <Right>1526</Right>
+ <Bottom>995</Bottom>
+ </NormalPosition>
+ </WindowPosition>
+ <MDIClientArea>
+ <RegID>0</RegID>
+ <MDITabState>
+ <Len>273</Len>
+ <Data>01000000040000000100000001000000010000000100000000000000020000000000000001000000010000000000000028000000280000000100000001000000000000000100000047443A5C41524D5C5041434B5C4E58505C4C5043313830305F4446505C426F617264735C4B65696C5C4D4342313830305C5254585F426C696E6B795C41627374726163742E747874000000000C41627374726163742E74787400000000FFDC7800FFFFFFFF0100000010000000C5D4F200FFDC7800BECEA100F0A0A100BCA8E1009CC1B600F7B88600D9ADC200A5C2D700B3A6BE00EAD6A300F6FA7D00B5E99D005FC3CF00C1838300CACAD500010000000000000002000000F0000000650000004006000075040000</Data>
+ </MDITabState>
+ </MDIClientArea>
+ <ViewEx>
+ <ViewType>0</ViewType>
+ <ViewName>Build</ViewName>
+ <Window>
+ <RegID>-1</RegID>
+ <PaneID>-1</PaneID>
+ <IsVisible>0</IsVisible>
+ <IsFloating>0</IsFloating>
+ <IsTabbed>0</IsTabbed>
+ <IsActivated>0</IsActivated>
+ <MRUWidth>32767</MRUWidth>
+ <PinState>0</PinState>
+ <RecentFrameAlignment>4096</RecentFrameAlignment>
+ <RecentRowIndex>0</RecentRowIndex>
+ <RectRecentDocked>
+ <Len>16</Len>
+ <Data>F00000004F000000A0040000F7000000</Data>
+ </RectRecentDocked>
+ <RectRecentFloat>
+ <Len>16</Len>
+ <Data>F7060000CD0000004709000075010000</Data>
+ </RectRecentFloat>
+ </Window>
+ <Window>
+ <RegID>1005</RegID>
+ <PaneID>1005</PaneID>
+ <IsVisible>1</IsVisible>
+ <IsFloating>0</IsFloating>
+ <IsTabbed>0</IsTabbed>
+ <IsActivated>0</IsActivated>
+ <MRUWidth>32767</MRUWidth>
+ <PinState>0</PinState>
+ <RecentFrameAlignment>4096</RecentFrameAlignment>
+ <RecentRowIndex>0</RecentRowIndex>
+ <RectRecentDocked>
+ <Len>16</Len>
+ <Data>0300000066000000E900000046040000</Data>
+ </RectRecentDocked>
+ <RectRecentFloat>
+ <Len>16</Len>
+ <Data>F7060000CD000000E30700006F030000</Data>
+ </RectRecentFloat>
+ </Window>
+ <Window>
+ <RegID>109</RegID>
+ <PaneID>109</PaneID>
+ <IsVisible>1</IsVisible>
+ <IsFloating>0</IsFloating>
+ <IsTabbed>0</IsTabbed>
+ <IsActivated>0</IsActivated>
+ <MRUWidth>32767</MRUWidth>
+ <PinState>0</PinState>
+ <RecentFrameAlignment>4096</RecentFrameAlignment>
+ <RecentRowIndex>0</RecentRowIndex>
+ <RectRecentDocked>
+ <Len>16</Len>
+ <Data>0300000066000000E900000046040000</Data>
+ </RectRecentDocked>
+ <RectRecentFloat>
+ <Len>16</Len>
+ <Data>F7060000CD000000E30700006F030000</Data>
+ </RectRecentFloat>
+ </Window>
+ <Window>
+ <RegID>1465</RegID>
+ <PaneID>1465</PaneID>
+ <IsVisible>0</IsVisible>
+ <IsFloating>0</IsFloating>
+ <IsTabbed>0</IsTabbed>
+ <IsActivated>0</IsActivated>
+ <MRUWidth>32767</MRUWidth>
+ <PinState>0</PinState>
+ <RecentFrameAlignment>4096</RecentFrameAlignment>
+ <RecentRowIndex>0</RecentRowIndex>
+ <RectRecentDocked>
+ <Len>16</Len>
+ <Data>000000008F020000A004000037030000</Data>
+ </RectRecentDocked>
+ <RectRecentFloat>
+ <Len>16</Len>
+ <Data>F7060000CD0000004709000075010000</Data>
+ </RectRecentFloat>
+ </Window>
+ <Window>
+ <RegID>1466</RegID>
+ <PaneID>1466</PaneID>
+ <IsVisible>0</IsVisible>
+ <IsFloating>0</IsFloating>
+ <IsTabbed>0</IsTabbed>
+ <IsActivated>0</IsActivated>
+ <MRUWidth>32767</MRUWidth>
+ <PinState>0</PinState>
+ <RecentFrameAlignment>4096</RecentFrameAlignment>
+ <RecentRowIndex>0</RecentRowIndex>
+ <RectRecentDocked>
+ <Len>16</Len>
+ <Data>03000000920200009D0400000A030000</Data>
+ </RectRecentDocked>
+ <RectRecentFloat>
+ <Len>16</Len>
+ <Data>F7060000CD0000004709000075010000</Data>
+ </RectRecentFloat>
+ </Window>
+ <Window>
+ <RegID>1467</RegID>
+ <PaneID>1467</PaneID>
+ <IsVisible>0</IsVisible>
+ <IsFloating>0</IsFloating>
+ <IsTabbed>0</IsTabbed>
+ <IsActivated>0</IsActivated>
+ <MRUWidth>32767</MRUWidth>
+ <PinState>0</PinState>
+ <RecentFrameAlignment>4096</RecentFrameAlignment>
+ <RecentRowIndex>0</RecentRowIndex>
+ <RectRecentDocked>
+ <Len>16</Len>
+ <Data>03000000920200009D0400000A030000</Data>
+ </RectRecentDocked>
+ <RectRecentFloat>
+ <Len>16</Len>
+ <Data>F7060000CD0000004709000075010000</Data>
+ </RectRecentFloat>
+ </Window>
+ <Window>
+ <RegID>1468</RegID>
+ <PaneID>1468</PaneID>
+ <IsVisible>0</IsVisible>
+ <IsFloating>0</IsFloating>
+ <IsTabbed>0</IsTabbed>
+ <IsActivated>0</IsActivated>
+ <MRUWidth>32767</MRUWidth>
+ <PinState>0</PinState>
+ <RecentFrameAlignment>4096</RecentFrameAlignment>
+ <RecentRowIndex>0</RecentRowIndex>
+ <RectRecentDocked>
+ <Len>16</Len>
+ <Data>03000000920200009D0400000A030000</Data>
+ </RectRecentDocked>
+ <RectRecentFloat>
+ <Len>16</Len>
+ <Data>F7060000CD0000004709000075010000</Data>
+ </RectRecentFloat>
+ </Window>
+ <Window>
+ <RegID>1506</RegID>
+ <PaneID>1506</PaneID>
+ <IsVisible>0</IsVisible>
+ <IsFloating>0</IsFloating>
+ <IsTabbed>0</IsTabbed>
+ <IsActivated>0</IsActivated>
+ <MRUWidth>32767</MRUWidth>
+ <PinState>0</PinState>
+ <RecentFrameAlignment>16384</RecentFrameAlignment>
+ <RecentRowIndex>0</RecentRowIndex>
+ <RectRecentDocked>
+ <Len>16</Len>
+ <Data>13030000660000009D040000C6010000</Data>
+ </RectRecentDocked>
+ <RectRecentFloat>
+ <Len>16</Len>
+ <Data>F7060000CD000000870800005D020000</Data>
+ </RectRecentFloat>
+ </Window>
+ <Window>
+ <RegID>1913</RegID>
+ <PaneID>1913</PaneID>
+ <IsVisible>0</IsVisible>
+ <IsFloating>0</IsFloating>
+ <IsTabbed>0</IsTabbed>
+ <IsActivated>0</IsActivated>
+ <MRUWidth>32767</MRUWidth>
+ <PinState>0</PinState>
+ <RecentFrameAlignment>4096</RecentFrameAlignment>
+ <RecentRowIndex>0</RecentRowIndex>
+ <RectRecentDocked>
+ <Len>16</Len>
+ <Data>F000000063000000A0040000F7000000</Data>
+ </RectRecentDocked>
+ <RectRecentFloat>
+ <Len>16</Len>
+ <Data>F7060000CD0000004709000075010000</Data>
+ </RectRecentFloat>
+ </Window>
+ <Window>
+ <RegID>1935</RegID>
+ <PaneID>1935</PaneID>
+ <IsVisible>0</IsVisible>
+ <IsFloating>0</IsFloating>
+ <IsTabbed>0</IsTabbed>
+ <IsActivated>0</IsActivated>
+ <MRUWidth>32767</MRUWidth>
+ <PinState>0</PinState>
+ <RecentFrameAlignment>32768</RecentFrameAlignment>
+ <RecentRowIndex>0</RecentRowIndex>
+ <RectRecentDocked>
+ <Len>16</Len>
+ <Data>03000000920200009D0400001E030000</Data>
+ </RectRecentDocked>
+ <RectRecentFloat>
+ <Len>16</Len>
+ <Data>F7060000CD000000870800005D020000</Data>
+ </RectRecentFloat>
+ </Window>
+ <Window>
+ <RegID>1936</RegID>
+ <PaneID>1936</PaneID>
+ <IsVisible>0</IsVisible>
+ <IsFloating>0</IsFloating>
+ <IsTabbed>0</IsTabbed>
+ <IsActivated>0</IsActivated>
+ <MRUWidth>32767</MRUWidth>
+ <PinState>0</PinState>
+ <RecentFrameAlignment>4096</RecentFrameAlignment>
+ <RecentRowIndex>0</RecentRowIndex>
+ <RectRecentDocked>
+ <Len>16</Len>
+ <Data>03000000920200009D0400000A030000</Data>
+ </RectRecentDocked>
+ <RectRecentFloat>
+ <Len>16</Len>
+ <Data>F7060000CD000000870800005D020000</Data>
+ </RectRecentFloat>
+ </Window>
+ <Window>
+ <RegID>1937</RegID>
+ <PaneID>1937</PaneID>
+ <IsVisible>0</IsVisible>
+ <IsFloating>0</IsFloating>
+ <IsTabbed>0</IsTabbed>
+ <IsActivated>0</IsActivated>
+ <MRUWidth>32767</MRUWidth>
+ <PinState>0</PinState>
+ <RecentFrameAlignment>4096</RecentFrameAlignment>
+ <RecentRowIndex>0</RecentRowIndex>
+ <RectRecentDocked>
+ <Len>16</Len>
+ <Data>03000000920200009D0400000A030000</Data>
+ </RectRecentDocked>
+ <RectRecentFloat>
+ <Len>16</Len>
+ <Data>F7060000CD000000870800005D020000</Data>
+ </RectRecentFloat>
+ </Window>
+ <Window>
+ <RegID>1939</RegID>
+ <PaneID>1939</PaneID>
+ <IsVisible>0</IsVisible>
+ <IsFloating>0</IsFloating>
+ <IsTabbed>0</IsTabbed>
+ <IsActivated>0</IsActivated>
+ <MRUWidth>32767</MRUWidth>
+ <PinState>0</PinState>
+ <RecentFrameAlignment>4096</RecentFrameAlignment>
+ <RecentRowIndex>0</RecentRowIndex>
+ <RectRecentDocked>
+ <Len>16</Len>
+ <Data>03000000920200009D0400000A030000</Data>
+ </RectRecentDocked>
+ <RectRecentFloat>
+ <Len>16</Len>
+ <Data>F7060000CD0000004709000075010000</Data>
+ </RectRecentFloat>
+ </Window>
+ <Window>
+ <RegID>1940</RegID>
+ <PaneID>1940</PaneID>
+ <IsVisible>0</IsVisible>
+ <IsFloating>0</IsFloating>
+ <IsTabbed>0</IsTabbed>
+ <IsActivated>0</IsActivated>
+ <MRUWidth>32767</MRUWidth>
+ <PinState>0</PinState>
+ <RecentFrameAlignment>4096</RecentFrameAlignment>
+ <RecentRowIndex>0</RecentRowIndex>
+ <RectRecentDocked>
+ <Len>16</Len>
+ <Data>03000000920200009D0400000A030000</Data>
+ </RectRecentDocked>
+ <RectRecentFloat>
+ <Len>16</Len>
+ <Data>F7060000CD0000004709000075010000</Data>
+ </RectRecentFloat>
+ </Window>
+ <Window>
+ <RegID>1941</RegID>
+ <PaneID>1941</PaneID>
+ <IsVisible>0</IsVisible>
+ <IsFloating>0</IsFloating>
+ <IsTabbed>0</IsTabbed>
+ <IsActivated>0</IsActivated>
+ <MRUWidth>32767</MRUWidth>
+ <PinState>0</PinState>
+ <RecentFrameAlignment>4096</RecentFrameAlignment>
+ <RecentRowIndex>0</RecentRowIndex>
+ <RectRecentDocked>
+ <Len>16</Len>
+ <Data>03000000920200009D0400000A030000</Data>
+ </RectRecentDocked>
+ <RectRecentFloat>
+ <Len>16</Len>
+ <Data>F7060000CD0000004709000075010000</Data>
+ </RectRecentFloat>
+ </Window>
+ <Window>
+ <RegID>1942</RegID>
+ <PaneID>1942</PaneID>
+ <IsVisible>0</IsVisible>
+ <IsFloating>0</IsFloating>
+ <IsTabbed>0</IsTabbed>
+ <IsActivated>0</IsActivated>
+ <MRUWidth>32767</MRUWidth>
+ <PinState>0</PinState>
+ <RecentFrameAlignment>4096</RecentFrameAlignment>
+ <RecentRowIndex>0</RecentRowIndex>
+ <RectRecentDocked>
+ <Len>16</Len>
+ <Data>03000000920200009D0400000A030000</Data>
+ </RectRecentDocked>
+ <RectRecentFloat>
+ <Len>16</Len>
+ <Data>F7060000CD0000004709000075010000</Data>
+ </RectRecentFloat>
+ </Window>
+ <Window>
+ <RegID>195</RegID>
+ <PaneID>195</PaneID>
+ <IsVisible>1</IsVisible>
+ <IsFloating>0</IsFloating>
+ <IsTabbed>0</IsTabbed>
+ <IsActivated>0</IsActivated>
+ <MRUWidth>32767</MRUWidth>
+ <PinState>0</PinState>
+ <RecentFrameAlignment>4096</RecentFrameAlignment>
+ <RecentRowIndex>0</RecentRowIndex>
+ <RectRecentDocked>
+ <Len>16</Len>
+ <Data>0300000066000000E900000046040000</Data>
+ </RectRecentDocked>
+ <RectRecentFloat>
+ <Len>16</Len>
+ <Data>F7060000CD000000E30700006F030000</Data>
+ </RectRecentFloat>
+ </Window>
+ <Window>
+ <RegID>196</RegID>
+ <PaneID>196</PaneID>
+ <IsVisible>1</IsVisible>
+ <IsFloating>0</IsFloating>
+ <IsTabbed>0</IsTabbed>
+ <IsActivated>0</IsActivated>
+ <MRUWidth>32767</MRUWidth>
+ <PinState>0</PinState>
+ <RecentFrameAlignment>4096</RecentFrameAlignment>
+ <RecentRowIndex>0</RecentRowIndex>
+ <RectRecentDocked>
+ <Len>16</Len>
+ <Data>0300000066000000E900000046040000</Data>
+ </RectRecentDocked>
+ <RectRecentFloat>
+ <Len>16</Len>
+ <Data>F7060000CD000000E30700006F030000</Data>
+ </RectRecentFloat>
+ </Window>
+ <Window>
+ <RegID>197</RegID>
+ <PaneID>197</PaneID>
+ <IsVisible>0</IsVisible>
+ <IsFloating>0</IsFloating>
+ <IsTabbed>0</IsTabbed>
+ <IsActivated>0</IsActivated>
+ <MRUWidth>32767</MRUWidth>
+ <PinState>0</PinState>
+ <RecentFrameAlignment>32768</RecentFrameAlignment>
+ <RecentRowIndex>0</RecentRowIndex>
+ <RectRecentDocked>
+ <Len>16</Len>
+ <Data>00000000A3020000A004000037030000</Data>
+ </RectRecentDocked>
+ <RectRecentFloat>
+ <Len>16</Len>
+ <Data>F7060000CD0000004709000075010000</Data>
+ </RectRecentFloat>
+ </Window>
+ <Window>
+ <RegID>198</RegID>
+ <PaneID>198</PaneID>
+ <IsVisible>0</IsVisible>
+ <IsFloating>0</IsFloating>
+ <IsTabbed>0</IsTabbed>
+ <IsActivated>0</IsActivated>
+ <MRUWidth>32767</MRUWidth>
+ <PinState>0</PinState>
+ <RecentFrameAlignment>32768</RecentFrameAlignment>
+ <RecentRowIndex>0</RecentRowIndex>
+ <RectRecentDocked>
+ <Len>16</Len>
+ <Data>000000007B020000A004000037030000</Data>
+ </RectRecentDocked>
+ <RectRecentFloat>
+ <Len>16</Len>
+ <Data>F7060000CD0000004709000075010000</Data>
+ </RectRecentFloat>
+ </Window>
+ <Window>
+ <RegID>199</RegID>
+ <PaneID>199</PaneID>
+ <IsVisible>0</IsVisible>
+ <IsFloating>0</IsFloating>
+ <IsTabbed>0</IsTabbed>
+ <IsActivated>0</IsActivated>
+ <MRUWidth>32767</MRUWidth>
+ <PinState>0</PinState>
+ <RecentFrameAlignment>4096</RecentFrameAlignment>
+ <RecentRowIndex>0</RecentRowIndex>
+ <RectRecentDocked>
+ <Len>16</Len>
+ <Data>03000000A60200009D0400001E030000</Data>
+ </RectRecentDocked>
+ <RectRecentFloat>
+ <Len>16</Len>
+ <Data>F7060000CD0000004709000075010000</Data>
+ </RectRecentFloat>
+ </Window>
+ <Window>
+ <RegID>203</RegID>
+ <PaneID>203</PaneID>
+ <IsVisible>0</IsVisible>
+ <IsFloating>0</IsFloating>
+ <IsTabbed>0</IsTabbed>
+ <IsActivated>0</IsActivated>
+ <MRUWidth>32767</MRUWidth>
+ <PinState>0</PinState>
+ <RecentFrameAlignment>8192</RecentFrameAlignment>
+ <RecentRowIndex>0</RecentRowIndex>
+ <RectRecentDocked>
+ <Len>16</Len>
+ <Data>F000000063000000A0040000F7000000</Data>
+ </RectRecentDocked>
+ <RectRecentFloat>
+ <Len>16</Len>
+ <Data>F7060000CD0000004709000075010000</Data>
+ </RectRecentFloat>
+ </Window>
+ <Window>
+ <RegID>204</RegID>
+ <PaneID>204</PaneID>
+ <IsVisible>0</IsVisible>
+ <IsFloating>0</IsFloating>
+ <IsTabbed>0</IsTabbed>
+ <IsActivated>0</IsActivated>
+ <MRUWidth>32767</MRUWidth>
+ <PinState>0</PinState>
+ <RecentFrameAlignment>4096</RecentFrameAlignment>
+ <RecentRowIndex>0</RecentRowIndex>
+ <RectRecentDocked>
+ <Len>16</Len>
+ <Data>F3000000660000009D040000DE000000</Data>
+ </RectRecentDocked>
+ <RectRecentFloat>
+ <Len>16</Len>
+ <Data>F7060000CD0000004709000075010000</Data>
+ </RectRecentFloat>
+ </Window>
+ <Window>
+ <RegID>221</RegID>
+ <PaneID>221</PaneID>
+ <IsVisible>0</IsVisible>
+ <IsFloating>0</IsFloating>
+ <IsTabbed>0</IsTabbed>
+ <IsActivated>0</IsActivated>
+ <MRUWidth>32767</MRUWidth>
+ <PinState>0</PinState>
+ <RecentFrameAlignment>4096</RecentFrameAlignment>
+ <RecentRowIndex>0</RecentRowIndex>
+ <RectRecentDocked>
+ <Len>16</Len>
+ <Data>00000000000000000000000000000000</Data>
+ </RectRecentDocked>
+ <RectRecentFloat>
+ <Len>16</Len>
+ <Data>0A0000000A0000006E0000006E000000</Data>
+ </RectRecentFloat>
+ </Window>
+ <Window>
+ <RegID>2506</RegID>
+ <PaneID>2506</PaneID>
+ <IsVisible>0</IsVisible>
+ <IsFloating>0</IsFloating>
+ <IsTabbed>0</IsTabbed>
+ <IsActivated>0</IsActivated>
+ <MRUWidth>32767</MRUWidth>
+ <PinState>0</PinState>
+ <RecentFrameAlignment>4096</RecentFrameAlignment>
+ <RecentRowIndex>0</RecentRowIndex>
+ <RectRecentDocked>
+ <Len>16</Len>
+ <Data>1003000063000000A00400008B020000</Data>
+ </RectRecentDocked>
+ <RectRecentFloat>
+ <Len>16</Len>
+ <Data>F7060000CD000000870800005D020000</Data>
+ </RectRecentFloat>
+ </Window>
+ <Window>
+ <RegID>2507</RegID>
+ <PaneID>2507</PaneID>
+ <IsVisible>0</IsVisible>
+ <IsFloating>0</IsFloating>
+ <IsTabbed>0</IsTabbed>
+ <IsActivated>0</IsActivated>
+ <MRUWidth>32767</MRUWidth>
+ <PinState>0</PinState>
+ <RecentFrameAlignment>4096</RecentFrameAlignment>
+ <RecentRowIndex>0</RecentRowIndex>
+ <RectRecentDocked>
+ <Len>16</Len>
+ <Data>000000008F020000A004000023030000</Data>
+ </RectRecentDocked>
+ <RectRecentFloat>
+ <Len>16</Len>
+ <Data>F7060000CD0000004709000075010000</Data>
+ </RectRecentFloat>
+ </Window>
+ <Window>
+ <RegID>343</RegID>
+ <PaneID>343</PaneID>
+ <IsVisible>0</IsVisible>
+ <IsFloating>0</IsFloating>
+ <IsTabbed>0</IsTabbed>
+ <IsActivated>0</IsActivated>
+ <MRUWidth>32767</MRUWidth>
+ <PinState>0</PinState>
+ <RecentFrameAlignment>4096</RecentFrameAlignment>
+ <RecentRowIndex>0</RecentRowIndex>
+ <RectRecentDocked>
+ <Len>16</Len>
+ <Data>F3000000660000009D040000DE000000</Data>
+ </RectRecentDocked>
+ <RectRecentFloat>
+ <Len>16</Len>
+ <Data>F7060000CD0000004709000075010000</Data>
+ </RectRecentFloat>
+ </Window>
+ <Window>
+ <RegID>346</RegID>
+ <PaneID>346</PaneID>
+ <IsVisible>0</IsVisible>
+ <IsFloating>0</IsFloating>
+ <IsTabbed>0</IsTabbed>
+ <IsActivated>0</IsActivated>
+ <MRUWidth>32767</MRUWidth>
+ <PinState>0</PinState>
+ <RecentFrameAlignment>4096</RecentFrameAlignment>
+ <RecentRowIndex>0</RecentRowIndex>
+ <RectRecentDocked>
+ <Len>16</Len>
+ <Data>F3000000660000009D040000DE000000</Data>
+ </RectRecentDocked>
+ <RectRecentFloat>
+ <Len>16</Len>
+ <Data>F7060000CD0000004709000075010000</Data>
+ </RectRecentFloat>
+ </Window>
+ <Window>
+ <RegID>35824</RegID>
+ <PaneID>35824</PaneID>
+ <IsVisible>0</IsVisible>
+ <IsFloating>0</IsFloating>
+ <IsTabbed>0</IsTabbed>
+ <IsActivated>0</IsActivated>
+ <MRUWidth>32767</MRUWidth>
+ <PinState>0</PinState>
+ <RecentFrameAlignment>4096</RecentFrameAlignment>
+ <RecentRowIndex>0</RecentRowIndex>
+ <RectRecentDocked>
+ <Len>16</Len>
+ <Data>F3000000660000009D040000DE000000</Data>
+ </RectRecentDocked>
+ <RectRecentFloat>
+ <Len>16</Len>
+ <Data>F7060000CD0000004709000075010000</Data>
+ </RectRecentFloat>
+ </Window>
+ <Window>
+ <RegID>35885</RegID>
+ <PaneID>35885</PaneID>
+ <IsVisible>0</IsVisible>
+ <IsFloating>0</IsFloating>
+ <IsTabbed>0</IsTabbed>
+ <IsActivated>0</IsActivated>
+ <MRUWidth>32767</MRUWidth>
+ <PinState>0</PinState>
+ <RecentFrameAlignment>4096</RecentFrameAlignment>
+ <RecentRowIndex>0</RecentRowIndex>
+ <RectRecentDocked>
+ <Len>16</Len>
+ <Data>13030000660000009D040000C6010000</Data>
+ </RectRecentDocked>
+ <RectRecentFloat>
+ <Len>16</Len>
+ <Data>F7060000CD000000870800005D020000</Data>
+ </RectRecentFloat>
+ </Window>
+ <Window>
+ <RegID>35886</RegID>
+ <PaneID>35886</PaneID>
+ <IsVisible>0</IsVisible>
+ <IsFloating>0</IsFloating>
+ <IsTabbed>0</IsTabbed>
+ <IsActivated>0</IsActivated>
+ <MRUWidth>32767</MRUWidth>
+ <PinState>0</PinState>
+ <RecentFrameAlignment>4096</RecentFrameAlignment>
+ <RecentRowIndex>0</RecentRowIndex>
+ <RectRecentDocked>
+ <Len>16</Len>
+ <Data>13030000660000009D040000C6010000</Data>
+ </RectRecentDocked>
+ <RectRecentFloat>
+ <Len>16</Len>
+ <Data>F7060000CD000000870800005D020000</Data>
+ </RectRecentFloat>
+ </Window>
+ <Window>
+ <RegID>35887</RegID>
+ <PaneID>35887</PaneID>
+ <IsVisible>0</IsVisible>
+ <IsFloating>0</IsFloating>
+ <IsTabbed>0</IsTabbed>
+ <IsActivated>0</IsActivated>
+ <MRUWidth>32767</MRUWidth>
+ <PinState>0</PinState>
+ <RecentFrameAlignment>4096</RecentFrameAlignment>
+ <RecentRowIndex>0</RecentRowIndex>
+ <RectRecentDocked>
+ <Len>16</Len>
+ <Data>13030000660000009D040000C6010000</Data>
+ </RectRecentDocked>
+ <RectRecentFloat>
+ <Len>16</Len>
+ <Data>F7060000CD000000870800005D020000</Data>
+ </RectRecentFloat>
+ </Window>
+ <Window>
+ <RegID>35888</RegID>
+ <PaneID>35888</PaneID>
+ <IsVisible>0</IsVisible>
+ <IsFloating>0</IsFloating>
+ <IsTabbed>0</IsTabbed>
+ <IsActivated>0</IsActivated>
+ <MRUWidth>32767</MRUWidth>
+ <PinState>0</PinState>
+ <RecentFrameAlignment>4096</RecentFrameAlignment>
+ <RecentRowIndex>0</RecentRowIndex>
+ <RectRecentDocked>
+ <Len>16</Len>
+ <Data>13030000660000009D040000C6010000</Data>
+ </RectRecentDocked>
+ <RectRecentFloat>
+ <Len>16</Len>
+ <Data>F7060000CD000000870800005D020000</Data>
+ </RectRecentFloat>
+ </Window>
+ <Window>
+ <RegID>35889</RegID>
+ <PaneID>35889</PaneID>
+ <IsVisible>0</IsVisible>
+ <IsFloating>0</IsFloating>
+ <IsTabbed>0</IsTabbed>
+ <IsActivated>0</IsActivated>
+ <MRUWidth>32767</MRUWidth>
+ <PinState>0</PinState>
+ <RecentFrameAlignment>4096</RecentFrameAlignment>
+ <RecentRowIndex>0</RecentRowIndex>
+ <RectRecentDocked>
+ <Len>16</Len>
+ <Data>13030000660000009D040000C6010000</Data>
+ </RectRecentDocked>
+ <RectRecentFloat>
+ <Len>16</Len>
+ <Data>F7060000CD000000870800005D020000</Data>
+ </RectRecentFloat>
+ </Window>
+ <Window>
+ <RegID>35890</RegID>
+ <PaneID>35890</PaneID>
+ <IsVisible>0</IsVisible>
+ <IsFloating>0</IsFloating>
+ <IsTabbed>0</IsTabbed>
+ <IsActivated>0</IsActivated>
+ <MRUWidth>32767</MRUWidth>
+ <PinState>0</PinState>
+ <RecentFrameAlignment>4096</RecentFrameAlignment>
+ <RecentRowIndex>0</RecentRowIndex>
+ <RectRecentDocked>
+ <Len>16</Len>
+ <Data>13030000660000009D040000C6010000</Data>
+ </RectRecentDocked>
+ <RectRecentFloat>
+ <Len>16</Len>
+ <Data>F7060000CD000000870800005D020000</Data>
+ </RectRecentFloat>
+ </Window>
+ <Window>
+ <RegID>35891</RegID>
+ <PaneID>35891</PaneID>
+ <IsVisible>0</IsVisible>
+ <IsFloating>0</IsFloating>
+ <IsTabbed>0</IsTabbed>
+ <IsActivated>0</IsActivated>
+ <MRUWidth>32767</MRUWidth>
+ <PinState>0</PinState>
+ <RecentFrameAlignment>4096</RecentFrameAlignment>
+ <RecentRowIndex>0</RecentRowIndex>
+ <RectRecentDocked>
+ <Len>16</Len>
+ <Data>13030000660000009D040000C6010000</Data>
+ </RectRecentDocked>
+ <RectRecentFloat>
+ <Len>16</Len>
+ <Data>F7060000CD000000870800005D020000</Data>
+ </RectRecentFloat>
+ </Window>
+ <Window>
+ <RegID>35892</RegID>
+ <PaneID>35892</PaneID>
+ <IsVisible>0</IsVisible>
+ <IsFloating>0</IsFloating>
+ <IsTabbed>0</IsTabbed>
+ <IsActivated>0</IsActivated>
+ <MRUWidth>32767</MRUWidth>
+ <PinState>0</PinState>
+ <RecentFrameAlignment>4096</RecentFrameAlignment>
+ <RecentRowIndex>0</RecentRowIndex>
+ <RectRecentDocked>
+ <Len>16</Len>
+ <Data>13030000660000009D040000C6010000</Data>
+ </RectRecentDocked>
+ <RectRecentFloat>
+ <Len>16</Len>
+ <Data>F7060000CD000000870800005D020000</Data>
+ </RectRecentFloat>
+ </Window>
+ <Window>
+ <RegID>35893</RegID>
+ <PaneID>35893</PaneID>
+ <IsVisible>0</IsVisible>
+ <IsFloating>0</IsFloating>
+ <IsTabbed>0</IsTabbed>
+ <IsActivated>0</IsActivated>
+ <MRUWidth>32767</MRUWidth>
+ <PinState>0</PinState>
+ <RecentFrameAlignment>4096</RecentFrameAlignment>
+ <RecentRowIndex>0</RecentRowIndex>
+ <RectRecentDocked>
+ <Len>16</Len>
+ <Data>13030000660000009D040000C6010000</Data>
+ </RectRecentDocked>
+ <RectRecentFloat>
+ <Len>16</Len>
+ <Data>F7060000CD000000870800005D020000</Data>
+ </RectRecentFloat>
+ </Window>
+ <Window>
+ <RegID>35894</RegID>
+ <PaneID>35894</PaneID>
+ <IsVisible>0</IsVisible>
+ <IsFloating>0</IsFloating>
+ <IsTabbed>0</IsTabbed>
+ <IsActivated>0</IsActivated>
+ <MRUWidth>32767</MRUWidth>
+ <PinState>0</PinState>
+ <RecentFrameAlignment>4096</RecentFrameAlignment>
+ <RecentRowIndex>0</RecentRowIndex>
+ <RectRecentDocked>
+ <Len>16</Len>
+ <Data>13030000660000009D040000C6010000</Data>
+ </RectRecentDocked>
+ <RectRecentFloat>
+ <Len>16</Len>
+ <Data>F7060000CD000000870800005D020000</Data>
+ </RectRecentFloat>
+ </Window>
+ <Window>
+ <RegID>35895</RegID>
+ <PaneID>35895</PaneID>
+ <IsVisible>0</IsVisible>
+ <IsFloating>0</IsFloating>
+ <IsTabbed>0</IsTabbed>
+ <IsActivated>0</IsActivated>
+ <MRUWidth>32767</MRUWidth>
+ <PinState>0</PinState>
+ <RecentFrameAlignment>4096</RecentFrameAlignment>
+ <RecentRowIndex>0</RecentRowIndex>
+ <RectRecentDocked>
+ <Len>16</Len>
+ <Data>13030000660000009D040000C6010000</Data>
+ </RectRecentDocked>
+ <RectRecentFloat>
+ <Len>16</Len>
+ <Data>F7060000CD000000870800005D020000</Data>
+ </RectRecentFloat>
+ </Window>
+ <Window>
+ <RegID>35896</RegID>
+ <PaneID>35896</PaneID>
+ <IsVisible>0</IsVisible>
+ <IsFloating>0</IsFloating>
+ <IsTabbed>0</IsTabbed>
+ <IsActivated>0</IsActivated>
+ <MRUWidth>32767</MRUWidth>
+ <PinState>0</PinState>
+ <RecentFrameAlignment>4096</RecentFrameAlignment>
+ <RecentRowIndex>0</RecentRowIndex>
+ <RectRecentDocked>
+ <Len>16</Len>
+ <Data>13030000660000009D040000C6010000</Data>
+ </RectRecentDocked>
+ <RectRecentFloat>
+ <Len>16</Len>
+ <Data>F7060000CD000000870800005D020000</Data>
+ </RectRecentFloat>
+ </Window>
+ <Window>
+ <RegID>35897</RegID>
+ <PaneID>35897</PaneID>
+ <IsVisible>0</IsVisible>
+ <IsFloating>0</IsFloating>
+ <IsTabbed>0</IsTabbed>
+ <IsActivated>0</IsActivated>
+ <MRUWidth>32767</MRUWidth>
+ <PinState>0</PinState>
+ <RecentFrameAlignment>4096</RecentFrameAlignment>
+ <RecentRowIndex>0</RecentRowIndex>
+ <RectRecentDocked>
+ <Len>16</Len>
+ <Data>13030000660000009D040000C6010000</Data>
+ </RectRecentDocked>
+ <RectRecentFloat>
+ <Len>16</Len>
+ <Data>F7060000CD000000870800005D020000</Data>
+ </RectRecentFloat>
+ </Window>
+ <Window>
+ <RegID>35898</RegID>
+ <PaneID>35898</PaneID>
+ <IsVisible>0</IsVisible>
+ <IsFloating>0</IsFloating>
+ <IsTabbed>0</IsTabbed>
+ <IsActivated>0</IsActivated>
+ <MRUWidth>32767</MRUWidth>
+ <PinState>0</PinState>
+ <RecentFrameAlignment>4096</RecentFrameAlignment>
+ <RecentRowIndex>0</RecentRowIndex>
+ <RectRecentDocked>
+ <Len>16</Len>
+ <Data>13030000660000009D040000C6010000</Data>
+ </RectRecentDocked>
+ <RectRecentFloat>
+ <Len>16</Len>
+ <Data>F7060000CD000000870800005D020000</Data>
+ </RectRecentFloat>
+ </Window>
+ <Window>
+ <RegID>35899</RegID>
+ <PaneID>35899</PaneID>
+ <IsVisible>0</IsVisible>
+ <IsFloating>0</IsFloating>
+ <IsTabbed>0</IsTabbed>
+ <IsActivated>0</IsActivated>
+ <MRUWidth>32767</MRUWidth>
+ <PinState>0</PinState>
+ <RecentFrameAlignment>4096</RecentFrameAlignment>
+ <RecentRowIndex>0</RecentRowIndex>
+ <RectRecentDocked>
+ <Len>16</Len>
+ <Data>13030000660000009D040000C6010000</Data>
+ </RectRecentDocked>
+ <RectRecentFloat>
+ <Len>16</Len>
+ <Data>F7060000CD000000870800005D020000</Data>
+ </RectRecentFloat>
+ </Window>
+ <Window>
+ <RegID>35900</RegID>
+ <PaneID>35900</PaneID>
+ <IsVisible>0</IsVisible>
+ <IsFloating>0</IsFloating>
+ <IsTabbed>0</IsTabbed>
+ <IsActivated>0</IsActivated>
+ <MRUWidth>32767</MRUWidth>
+ <PinState>0</PinState>
+ <RecentFrameAlignment>4096</RecentFrameAlignment>
+ <RecentRowIndex>0</RecentRowIndex>
+ <RectRecentDocked>
+ <Len>16</Len>
+ <Data>13030000660000009D040000C6010000</Data>
+ </RectRecentDocked>
+ <RectRecentFloat>
+ <Len>16</Len>
+ <Data>F7060000CD000000870800005D020000</Data>
+ </RectRecentFloat>
+ </Window>
+ <Window>
+ <RegID>35901</RegID>
+ <PaneID>35901</PaneID>
+ <IsVisible>0</IsVisible>
+ <IsFloating>0</IsFloating>
+ <IsTabbed>0</IsTabbed>
+ <IsActivated>0</IsActivated>
+ <MRUWidth>32767</MRUWidth>
+ <PinState>0</PinState>
+ <RecentFrameAlignment>4096</RecentFrameAlignment>
+ <RecentRowIndex>0</RecentRowIndex>
+ <RectRecentDocked>
+ <Len>16</Len>
+ <Data>13030000660000009D040000C6010000</Data>
+ </RectRecentDocked>
+ <RectRecentFloat>
+ <Len>16</Len>
+ <Data>F7060000CD000000870800005D020000</Data>
+ </RectRecentFloat>
+ </Window>
+ <Window>
+ <RegID>35902</RegID>
+ <PaneID>35902</PaneID>
+ <IsVisible>0</IsVisible>
+ <IsFloating>0</IsFloating>
+ <IsTabbed>0</IsTabbed>
+ <IsActivated>0</IsActivated>
+ <MRUWidth>32767</MRUWidth>
+ <PinState>0</PinState>
+ <RecentFrameAlignment>4096</RecentFrameAlignment>
+ <RecentRowIndex>0</RecentRowIndex>
+ <RectRecentDocked>
+ <Len>16</Len>
+ <Data>13030000660000009D040000C6010000</Data>
+ </RectRecentDocked>
+ <RectRecentFloat>
+ <Len>16</Len>
+ <Data>F7060000CD000000870800005D020000</Data>
+ </RectRecentFloat>
+ </Window>
+ <Window>
+ <RegID>35903</RegID>
+ <PaneID>35903</PaneID>
+ <IsVisible>0</IsVisible>
+ <IsFloating>0</IsFloating>
+ <IsTabbed>0</IsTabbed>
+ <IsActivated>0</IsActivated>
+ <MRUWidth>32767</MRUWidth>
+ <PinState>0</PinState>
+ <RecentFrameAlignment>4096</RecentFrameAlignment>
+ <RecentRowIndex>0</RecentRowIndex>
+ <RectRecentDocked>
+ <Len>16</Len>
+ <Data>13030000660000009D040000C6010000</Data>
+ </RectRecentDocked>
+ <RectRecentFloat>
+ <Len>16</Len>
+ <Data>F7060000CD000000870800005D020000</Data>
+ </RectRecentFloat>
+ </Window>
+ <Window>
+ <RegID>35904</RegID>
+ <PaneID>35904</PaneID>
+ <IsVisible>0</IsVisible>
+ <IsFloating>0</IsFloating>
+ <IsTabbed>0</IsTabbed>
+ <IsActivated>0</IsActivated>
+ <MRUWidth>32767</MRUWidth>
+ <PinState>0</PinState>
+ <RecentFrameAlignment>4096</RecentFrameAlignment>
+ <RecentRowIndex>0</RecentRowIndex>
+ <RectRecentDocked>
+ <Len>16</Len>
+ <Data>13030000660000009D040000C6010000</Data>
+ </RectRecentDocked>
+ <RectRecentFloat>
+ <Len>16</Len>
+ <Data>F7060000CD000000870800005D020000</Data>
+ </RectRecentFloat>
+ </Window>
+ <Window>
+ <RegID>35905</RegID>
+ <PaneID>35905</PaneID>
+ <IsVisible>0</IsVisible>
+ <IsFloating>0</IsFloating>
+ <IsTabbed>0</IsTabbed>
+ <IsActivated>0</IsActivated>
+ <MRUWidth>32767</MRUWidth>
+ <PinState>0</PinState>
+ <RecentFrameAlignment>4096</RecentFrameAlignment>
+ <RecentRowIndex>0</RecentRowIndex>
+ <RectRecentDocked>
+ <Len>16</Len>
+ <Data>13030000660000009D040000C6010000</Data>
+ </RectRecentDocked>
+ <RectRecentFloat>
+ <Len>16</Len>
+ <Data>F7060000CD000000870800005D020000</Data>
+ </RectRecentFloat>
+ </Window>
+ <Window>
+ <RegID>38003</RegID>
+ <PaneID>38003</PaneID>
+ <IsVisible>0</IsVisible>
+ <IsFloating>0</IsFloating>
+ <IsTabbed>0</IsTabbed>
+ <IsActivated>0</IsActivated>
+ <MRUWidth>32767</MRUWidth>
+ <PinState>0</PinState>
+ <RecentFrameAlignment>4096</RecentFrameAlignment>
+ <RecentRowIndex>0</RecentRowIndex>
+ <RectRecentDocked>
+ <Len>16</Len>
+ <Data>0300000066000000E90000001E030000</Data>
+ </RectRecentDocked>
+ <RectRecentFloat>
+ <Len>16</Len>
+ <Data>F7060000CD000000E30700006F030000</Data>
+ </RectRecentFloat>
+ </Window>
+ <Window>
+ <RegID>38007</RegID>
+ <PaneID>38007</PaneID>
+ <IsVisible>0</IsVisible>
+ <IsFloating>0</IsFloating>
+ <IsTabbed>0</IsTabbed>
+ <IsActivated>0</IsActivated>
+ <MRUWidth>32767</MRUWidth>
+ <PinState>0</PinState>
+ <RecentFrameAlignment>4096</RecentFrameAlignment>
+ <RecentRowIndex>0</RecentRowIndex>
+ <RectRecentDocked>
+ <Len>16</Len>
+ <Data>00000000A3020000A004000037030000</Data>
+ </RectRecentDocked>
+ <RectRecentFloat>
+ <Len>16</Len>
+ <Data>F7060000CD0000004709000075010000</Data>
+ </RectRecentFloat>
+ </Window>
+ <Window>
+ <RegID>436</RegID>
+ <PaneID>436</PaneID>
+ <IsVisible>0</IsVisible>
+ <IsFloating>0</IsFloating>
+ <IsTabbed>0</IsTabbed>
+ <IsActivated>0</IsActivated>
+ <MRUWidth>32767</MRUWidth>
+ <PinState>0</PinState>
+ <RecentFrameAlignment>4096</RecentFrameAlignment>
+ <RecentRowIndex>0</RecentRowIndex>
+ <RectRecentDocked>
+ <Len>16</Len>
+ <Data>03000000A60200009D0400001E030000</Data>
+ </RectRecentDocked>
+ <RectRecentFloat>
+ <Len>16</Len>
+ <Data>F7060000CD000000E30700006F030000</Data>
+ </RectRecentFloat>
+ </Window>
+ <Window>
+ <RegID>437</RegID>
+ <PaneID>437</PaneID>
+ <IsVisible>0</IsVisible>
+ <IsFloating>0</IsFloating>
+ <IsTabbed>0</IsTabbed>
+ <IsActivated>0</IsActivated>
+ <MRUWidth>32767</MRUWidth>
+ <PinState>0</PinState>
+ <RecentFrameAlignment>4096</RecentFrameAlignment>
+ <RecentRowIndex>0</RecentRowIndex>
+ <RectRecentDocked>
+ <Len>16</Len>
+ <Data>03000000920200009D0400000A030000</Data>
+ </RectRecentDocked>
+ <RectRecentFloat>
+ <Len>16</Len>
+ <Data>F7060000CD000000870800005D020000</Data>
+ </RectRecentFloat>
+ </Window>
+ <Window>
+ <RegID>440</RegID>
+ <PaneID>440</PaneID>
+ <IsVisible>0</IsVisible>
+ <IsFloating>0</IsFloating>
+ <IsTabbed>0</IsTabbed>
+ <IsActivated>0</IsActivated>
+ <MRUWidth>32767</MRUWidth>
+ <PinState>0</PinState>
+ <RecentFrameAlignment>4096</RecentFrameAlignment>
+ <RecentRowIndex>0</RecentRowIndex>
+ <RectRecentDocked>
+ <Len>16</Len>
+ <Data>03000000920200009D0400000A030000</Data>
+ </RectRecentDocked>
+ <RectRecentFloat>
+ <Len>16</Len>
+ <Data>F7060000CD000000870800005D020000</Data>
+ </RectRecentFloat>
+ </Window>
+ <Window>
+ <RegID>59392</RegID>
+ <PaneID>59392</PaneID>
+ <IsVisible>1</IsVisible>
+ <IsFloating>0</IsFloating>
+ <IsTabbed>0</IsTabbed>
+ <IsActivated>0</IsActivated>
+ <MRUWidth>32767</MRUWidth>
+ <PinState>0</PinState>
+ <RecentFrameAlignment>8192</RecentFrameAlignment>
+ <RecentRowIndex>0</RecentRowIndex>
+ <RectRecentDocked>
+ <Len>16</Len>
+ <Data>0000000000000000B70300001C000000</Data>
+ </RectRecentDocked>
+ <RectRecentFloat>
+ <Len>16</Len>
+ <Data>0A0000000A0000006E0000006E000000</Data>
+ </RectRecentFloat>
+ </Window>
+ <Window>
+ <RegID>59393</RegID>
+ <PaneID>0</PaneID>
+ <IsVisible>1</IsVisible>
+ <IsFloating>0</IsFloating>
+ <IsTabbed>0</IsTabbed>
+ <IsActivated>0</IsActivated>
+ <MRUWidth>32767</MRUWidth>
+ <PinState>0</PinState>
+ <RecentFrameAlignment>4096</RecentFrameAlignment>
+ <RecentRowIndex>0</RecentRowIndex>
+ <RectRecentDocked>
+ <Len>16</Len>
+ <Data>000000005F0400004006000072040000</Data>
+ </RectRecentDocked>
+ <RectRecentFloat>
+ <Len>16</Len>
+ <Data>0A0000000A0000006E0000006E000000</Data>
+ </RectRecentFloat>
+ </Window>
+ <Window>
+ <RegID>59399</RegID>
+ <PaneID>59399</PaneID>
+ <IsVisible>1</IsVisible>
+ <IsFloating>0</IsFloating>
+ <IsTabbed>0</IsTabbed>
+ <IsActivated>0</IsActivated>
+ <MRUWidth>32767</MRUWidth>
+ <PinState>0</PinState>
+ <RecentFrameAlignment>8192</RecentFrameAlignment>
+ <RecentRowIndex>1</RecentRowIndex>
+ <RectRecentDocked>
+ <Len>16</Len>
+ <Data>000000001C000000DA01000038000000</Data>
+ </RectRecentDocked>
+ <RectRecentFloat>
+ <Len>16</Len>
+ <Data>0A0000000A0000006E0000006E000000</Data>
+ </RectRecentFloat>
+ </Window>
+ <Window>
+ <RegID>59400</RegID>
+ <PaneID>59400</PaneID>
+ <IsVisible>0</IsVisible>
+ <IsFloating>0</IsFloating>
+ <IsTabbed>0</IsTabbed>
+ <IsActivated>0</IsActivated>
+ <MRUWidth>32767</MRUWidth>
+ <PinState>0</PinState>
+ <RecentFrameAlignment>8192</RecentFrameAlignment>
+ <RecentRowIndex>2</RecentRowIndex>
+ <RectRecentDocked>
+ <Len>16</Len>
+ <Data>00000000380000006F02000054000000</Data>
+ </RectRecentDocked>
+ <RectRecentFloat>
+ <Len>16</Len>
+ <Data>0A0000000A0000006E0000006E000000</Data>
+ </RectRecentFloat>
+ </Window>
+ <DockMan>
+ <Len>2619</Len>
+ <Data>000000000B000000000000000020000000000000FFFFFFFFFFFFFFFFF0000000F7000000A0040000FB000000000000000100001004000000010000000000000000000000FFFFFFFF06000000CB00000057010000CC000000F08B00005A01000079070000FFFF02000B004354616262656450616E650020000000000000F7060000CD0000004709000075010000F00000004F000000A0040000F70000000000000040280046060000000B446973617373656D626C7900000000CB00000001000000FFFFFFFFFFFFFFFF14506572666F726D616E636520416E616C797A6572000000005701000001000000FFFFFFFFFFFFFFFF14506572666F726D616E636520416E616C797A657200000000CC00000001000000FFFFFFFFFFFFFFFF0E4C6F67696320416E616C797A657200000000F08B000001000000FFFFFFFFFFFFFFFF0D436F646520436F766572616765000000005A01000001000000FFFFFFFFFFFFFFFF11496E737472756374696F6E205472616365000000007907000001000000FFFFFFFFFFFFFFFFFFFFFFFF000000000000000000000000000000000000000001000000FFFFFFFFCB00000001000000FFFFFFFFCB000000000000000040000000000000FFFFFFFFFFFFFFFF0C0300004F000000100300008B020000000000000200001004000000010000000000000000000000FFFFFFFF17000000E2050000CA0900002D8C00002E8C00002F8C0000308C0000318C0000328C0000338C0000348C0000358C0000368C0000378C0000388C0000398C00003A8C00003B8C00003C8C00003D8C00003E8C00003F8C0000408C0000418C000001800040000000000000F7060000CD000000870800005D020000100300004F000000A00400008B0200000000000040410046170000000753796D626F6C7300000000E205000001000000FFFFFFFFFFFFFFFF0A5472616365204461746100000000CA09000001000000FFFFFFFFFFFFFFFF00000000002D8C000001000000FFFFFFFFFFFFFFFF00000000002E8C000001000000FFFFFFFFFFFFFFFF00000000002F8C000001000000FFFFFFFFFFFFFFFF0000000000308C000001000000FFFFFFFFFFFFFFFF0000000000318C000001000000FFFFFFFFFFFFFFFF0000000000328C000001000000FFFFFFFFFFFFFFFF0000000000338C000001000000FFFFFFFFFFFFFFFF0000000000348C000001000000FFFFFFFFFFFFFFFF0000000000358C000001000000FFFFFFFFFFFFFFFF0000000000368C000001000000FFFFFFFFFFFFFFFF0000000000378C000001000000FFFFFFFFFFFFFFFF0000000000388C000001000000FFFFFFFFFFFFFFFF0000000000398C000001000000FFFFFFFFFFFFFFFF00000000003A8C000001000000FFFFFFFFFFFFFFFF00000000003B8C000001000000FFFFFFFFFFFFFFFF00000000003C8C000001000000FFFFFFFFFFFFFFFF00000000003D8C000001000000FFFFFFFFFFFFFFFF00000000003E8C000001000000FFFFFFFFFFFFFFFF00000000003F8C000001000000FFFFFFFFFFFFFFFF0000000000408C000001000000FFFFFFFFFFFFFFFF0000000000418C000001000000FFFFFFFFFFFFFFFFFFFFFFFF000000000000000000000000000000000000000001000000FFFFFFFFE205000001000000FFFFFFFFE2050000000000000010000001000000FFFFFFFFFFFFFFFFEC0000004F000000F00000005F040000010000000200001004000000010000000000000000000000FFFFFFFF05000000ED0300006D000000C3000000C40000007394000001800010000001000000F7060000CD000000E30700006F030000000000004F000000EC0000005F0400000000000040140056050000000750726F6A65637401000000ED03000001000000FFFFFFFFFFFFFFFF05426F6F6B73010000006D00000001000000FFFFFFFFFFFFFFFF0946756E6374696F6E7301000000C300000001000000FFFFFFFFFFFFFFFF0954656D706C6174657301000000C400000001000000FFFFFFFFFFFFFFFF09526567697374657273000000007394000001000000FFFFFFFFFFFFFFFF00000000000000000000000000000000000000000000000001000000FFFFFFFFED03000001000000FFFFFFFFED030000000000000080000000000000FFFFFFFFFFFFFFFF0000000077020000A00400007B02000000000000010000100400000001000000000000000000000000000000000000000000000001000000C6000000FFFFFFFF0E0000008F070000930700009407000095070000960700009007000091070000B5010000B8010000B9050000BA050000BB050000BC050000CB09000001800040000000000000F7060000CD000000870800005D020000000000007B020000A00400003703000000000000404100460E0000001343616C6C20537461636B202B204C6F63616C73000000008F07000001000000FFFFFFFFFFFFFFFF0755415254202331000000009307000001000000FFFFFFFFFFFFFFFF0755415254202332000000009407000001000000FFFFFFFFFFFFFFFF0755415254202333000000009507000001000000FFFFFFFFFFFFFFFF15446562756720287072696E74662920566965776572000000009607000001000000FFFFFFFFFFFFFFFF0757617463682031000000009007000001000000FFFFFFFFFFFFFFFF0757617463682032000000009107000001000000FFFFFFFFFFFFFFFF10547261636520457863657074696F6E7300000000B501000001000000FFFFFFFFFFFFFFFF0E4576656E7420436F756E7465727300000000B801000001000000FFFFFFFFFFFFFFFF084D656D6F7279203100000000B905000001000000FFFFFFFFFFFFFFFF084D656D6F7279203200000000BA05000001000000FFFFFFFFFFFFFFFF084D656D6F7279203300000000BB05000001000000FFFFFFFFFFFFFFFF084D656D6F7279203400000000BC05000001000000FFFFFFFFFFFFFFFF105472616365204E617669676174696F6E00000000CB09000001000000FFFFFFFFFFFFFFFFFFFFFFFF0000000001000000000000000000000001000000FFFFFFFF500200007B020000540200003703000000000000020000000400000000000000000000000000000000000000000000000000000002000000C6000000FFFFFFFF8F07000001000000FFFFFFFF8F07000001000000C6000000000000000080000000000000FFFFFFFFFFFFFFFF000000008B020000A00400008F020000000000000100001004000000010000000000000000000000FFFFFFFF04000000C5000000C7000000B40100007794000001800080000000000000F7060000CD0000004709000075010000000000008F020000A0040000370300000000000040820046040000000C4275696C64204F757470757401000000C500000001000000FFFFFFFFFFFFFFFF0D46696E6420496E2046696C657300000000C700000001000000FFFFFFFFFFFFFFFF0A4572726F72204C69737400000000B401000001000000FFFFFFFFFFFFFFFF0742726F77736572000000007794000001000000FFFFFFFFFFFFFFFF00000000000000000000000000000000000000000000000001000000FFFFFFFFC500000001000000FFFFFFFFC5000000000000000000000000000000</Data>
+ </DockMan>
+ <ToolBar>
+ <RegID>59392</RegID>
+ <Name>File</Name>
+ <Buttons>
+ <Len>2093</Len>
+ <Data>00200000010000002800FFFF01001100434D4643546F6F6C426172427574746F6E00E100000000000000000000000000000000000000000000000100000001000000018001E100000000000001000000000000000000000000000000000100000001000000018003E1000000000000020000000000000000000000000000000001000000010000000180CD7F0000000000000300000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000018023E100000000040004000000000000000000000000000000000100000001000000018022E100000000040005000000000000000000000000000000000100000001000000018025E10000000000000600000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001802BE10000000004000700000000000000000000000000000000010000000100000001802CE10000000004000800000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001807A8A0000000004000900000000000000000000000000000000010000000100000001807B8A0000000004000A00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180D3B00000000000000B000000000000000000000000000000000100000001000000018015B10000000004000C0000000000000000000000000000000001000000010000000180F4B00000000004000D000000000000000000000000000000000100000001000000018036B10000000004000E00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180FF88000000000400460000000000000000000000000000000001000000010000000180FE880000000004004500000000000000000000000000000000010000000100000001800B810000000004001300000000000000000000000000000000010000000100000001800C810000000004001400000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180F0880000020000000F000000000000000000000000000000000100000001000000FFFF0100120043555646696E64436F6D626F427574746F6EE803000000000000000000000000000000000000000000000001000000010000009600000002002050000000001D41524D5F4D43495F4556454E545F434F4D4D414E445F54494D454F5554960000000000000003001D41524D5F4D43495F4556454E545F434F4D4D414E445F54494D454F55540E5254455F53445F434C4B5F50494E04696E6974000000000000000000000000018024E10000000000001100000000000000000000000000000000010000000100000001800A810000000000001200000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000018022800000020000001500000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180C488000000000000160000000000000000000000000000000001000000010000000180C988000000000400180000000000000000000000000000000001000000010000000180C788000000000000190000000000000000000000000000000001000000010000000180C8880000000000001700000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000FFFF01001500434D4643546F6F6C4261724D656E75427574746F6E4C010000020001001A0000000F50726F6A6563742057696E646F7773000000000000000000000000010000000100000000000000000000000100000008002880DD880000000000001A0000000750726F6A656374000000000000000000000000010000000100000000000000000000000100000000002880DC8B0000000000003A00000005426F6F6B73000000000000000000000000010000000100000000000000000000000100000000002880E18B0000000000003B0000000946756E6374696F6E73000000000000000000000000010000000100000000000000000000000100000000002880E28B000000000000400000000954656D706C6174657300000000000000000000000001000000010000000000000000000000010000000000288018890000000000003D0000000E536F757263652042726F777365720000000000000000000000000100000001000000000000000000000001000000000028800000000000000400FFFFFFFF00000000000000000000000000010000000100000000000000000000000100000000002880D988000000000000390000000C4275696C64204F7574707574000000000000000000000000010000000100000000000000000000000100000000002880E38B000000000000410000000B46696E64204F75747075740000000000000000000000000100000001000000000000000000000001000000000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180FB7F0000000000001B000000000000000000000000000000000100000001000000000000000446696C65FF7F0000</Data>
+ </Buttons>
+ <OriginalItems>
+ <Len>1423</Len>
+ <Data>2800FFFF01001100434D4643546F6F6C426172427574746F6E00E1000000000000FFFFFFFF000100000000000000010000000000000001000000018001E1000000000000FFFFFFFF000100000000000000010000000000000001000000018003E1000000000000FFFFFFFF0001000000000000000100000000000000010000000180CD7F000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF000000000000000000010000000000000001000000018023E1000000000000FFFFFFFF000100000000000000010000000000000001000000018022E1000000000000FFFFFFFF000100000000000000010000000000000001000000018025E1000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF00000000000000000001000000000000000100000001802BE1000000000000FFFFFFFF00010000000000000001000000000000000100000001802CE1000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF00000000000000000001000000000000000100000001807A8A000000000000FFFFFFFF00010000000000000001000000000000000100000001807B8A000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF0000000000000000000100000000000000010000000180D3B0000000000000FFFFFFFF000100000000000000010000000000000001000000018015B1000000000000FFFFFFFF0001000000000000000100000000000000010000000180F4B0000000000000FFFFFFFF000100000000000000010000000000000001000000018036B1000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF0000000000000000000100000000000000010000000180FF88000000000000FFFFFFFF0001000000000000000100000000000000010000000180FE88000000000000FFFFFFFF00010000000000000001000000000000000100000001800B81000000000000FFFFFFFF00010000000000000001000000000000000100000001800C81000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF0000000000000000000100000000000000010000000180F088000000000000FFFFFFFF0001000000000000000100000000000000010000000180EE7F000000000000FFFFFFFF000100000000000000010000000000000001000000018024E1000000000000FFFFFFFF00010000000000000001000000000000000100000001800A81000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF00000000000000000001000000000000000100000001802280000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF0000000000000000000100000000000000010000000180C488000000000000FFFFFFFF0001000000000000000100000000000000010000000180C988000000000000FFFFFFFF0001000000000000000100000000000000010000000180C788000000000000FFFFFFFF0001000000000000000100000000000000010000000180C888000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF0000000000000000000100000000000000010000000180DD88000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF0000000000000000000100000000000000010000000180FB7F000000000000FFFFFFFF000100000000000000010000000000000001000000</Data>
+ </OriginalItems>
+ <OrigResetItems>
+ <Len>1423</Len>
+ <Data>2800FFFF01001100434D4643546F6F6C426172427574746F6E00E100000000000000000000000000000000000000000000000100000001000000018001E100000000000001000000000000000000000000000000000100000001000000018003E1000000000000020000000000000000000000000000000001000000010000000180CD7F0000000000000300000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000018023E100000000000004000000000000000000000000000000000100000001000000018022E100000000000005000000000000000000000000000000000100000001000000018025E10000000000000600000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001802BE10000000000000700000000000000000000000000000000010000000100000001802CE10000000000000800000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001807A8A0000000000000900000000000000000000000000000000010000000100000001807B8A0000000000000A00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180D3B00000000000000B000000000000000000000000000000000100000001000000018015B10000000000000C0000000000000000000000000000000001000000010000000180F4B00000000000000D000000000000000000000000000000000100000001000000018036B10000000000000E00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180FF880000000000000F0000000000000000000000000000000001000000010000000180FE880000000000001000000000000000000000000000000000010000000100000001800B810000000000001100000000000000000000000000000000010000000100000001800C810000000000001200000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180F088000000000000130000000000000000000000000000000001000000010000000180EE7F00000000000014000000000000000000000000000000000100000001000000018024E10000000000001500000000000000000000000000000000010000000100000001800A810000000000001600000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000018022800000000000001700000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180C488000000000000180000000000000000000000000000000001000000010000000180C988000000000000190000000000000000000000000000000001000000010000000180C7880000000000001A0000000000000000000000000000000001000000010000000180C8880000000000001B00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180DD880000000000001C00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180FB7F0000000000001D000000000000000000000000000000000100000001000000</Data>
+ </OrigResetItems>
+ </ToolBar>
+ <ToolBar>
+ <RegID>59399</RegID>
+ <Name>Build</Name>
+ <Buttons>
+ <Len>704</Len>
+ <Data>00200000010000001000FFFF01001100434D4643546F6F6C426172427574746F6ECF7F0000000004001C0000000000000000000000000000000001000000010000000180D07F0000000000001D000000000000000000000000000000000100000001000000018030800000000000001E00000000000000000000000000000000010000000100000001809E8A0000000004001F0000000000000000000000000000000001000000010000000180D17F0000000004002000000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001804C8A0000000000002100000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000FFFF01001900434D4643546F6F6C426172436F6D626F426F78427574746F6EBA00000000000000000000000000000000000000000000000001000000010000009600000003002050000000000D4C50433138353720466C617368960000000000000002000D4C50433138353720466C6173680B4C5043313835372052414D00000000000000000180EB880000000000002200000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180C07F000000000000230000000000000000000000000000000001000000010000000180B08A000000000400240000000000000000000000000000000001000000010000000180A8010000000000004E00000000000000000000000000000000010000000100000001807202000000000000530000000000000000000000000000000001000000010000000180BE010000000000005000000000000000000000000000000000010000000100000000000000054275696C64FF7F0000</Data>
+ </Buttons>
+ <OriginalItems>
+ <Len>583</Len>
+ <Data>1000FFFF01001100434D4643546F6F6C426172427574746F6ECF7F000000000000FFFFFFFF0001000000000000000100000000000000010000000180D07F000000000000FFFFFFFF00010000000000000001000000000000000100000001803080000000000000FFFFFFFF00010000000000000001000000000000000100000001809E8A000000000000FFFFFFFF0001000000000000000100000000000000010000000180D17F000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF00000000000000000001000000000000000100000001804C8A000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF00000000000000000001000000000000000100000001806680000000000000FFFFFFFF0001000000000000000100000000000000010000000180EB88000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF0000000000000000000100000000000000010000000180C07F000000000000FFFFFFFF0001000000000000000100000000000000010000000180B08A000000000000FFFFFFFF0001000000000000000100000000000000010000000180A801000000000000FFFFFFFF00010000000000000001000000000000000100000001807202000000000000FFFFFFFF0001000000000000000100000000000000010000000180BE01000000000000FFFFFFFF000100000000000000010000000000000001000000</Data>
+ </OriginalItems>
+ <OrigResetItems>
+ <Len>583</Len>
+ <Data>1000FFFF01001100434D4643546F6F6C426172427574746F6ECF7F000000000000000000000000000000000000000000000001000000010000000180D07F00000000000001000000000000000000000000000000000100000001000000018030800000000000000200000000000000000000000000000000010000000100000001809E8A000000000000030000000000000000000000000000000001000000010000000180D17F0000000000000400000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001804C8A0000000000000500000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001806680000000000000060000000000000000000000000000000001000000010000000180EB880000000000000700000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180C07F000000000000080000000000000000000000000000000001000000010000000180B08A000000000000090000000000000000000000000000000001000000010000000180A8010000000000000A000000000000000000000000000000000100000001000000018072020000000000000B0000000000000000000000000000000001000000010000000180BE010000000000000C000000000000000000000000000000000100000001000000</Data>
+ </OrigResetItems>
+ </ToolBar>
+ <ToolBar>
+ <RegID>59400</RegID>
+ <Name>Debug</Name>
+ <Buttons>
+ <Len>2220</Len>
+ <Data>00200000000000001900FFFF01001100434D4643546F6F6C426172427574746F6ECC880000000000002500000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000018017800000000000002600000000000000000000000000000000010000000100000001801D800000000000002700000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001801A800000000000002800000000000000000000000000000000010000000100000001801B80000000000000290000000000000000000000000000000001000000010000000180E57F0000000000002A00000000000000000000000000000000010000000100000001801C800000000000002B00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000018000890000000000002C00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180E48B0000000000002D0000000000000000000000000000000001000000010000000180F07F0000000000002E0000000000000000000000000000000001000000010000000180E8880000000000003700000000000000000000000000000000010000000100000001803B010000000000002F0000000000000000000000000000000001000000010000000180BB8A00000000000030000000000000000000000000000000000100000001000000FFFF01001500434D4643546F6F6C4261724D656E75427574746F6E0E01000000000000310000000D57617463682057696E646F7773000000000000000000000000010000000100000000000000000000000100000002001380D88B000000000000310000000757617463682031000000000000000000000000010000000100000000000000000000000100000000001380D98B0000000000003100000007576174636820320000000000000000000000000100000001000000000000000000000001000000000013800F01000000000000320000000E4D656D6F72792057696E646F7773000000000000000000000000010000000100000000000000000000000100000004001380D28B00000000000032000000084D656D6F72792031000000000000000000000000010000000100000000000000000000000100000000001380D38B00000000000032000000084D656D6F72792032000000000000000000000000010000000100000000000000000000000100000000001380D48B00000000000032000000084D656D6F72792033000000000000000000000000010000000100000000000000000000000100000000001380D58B00000000000032000000084D656D6F727920340000000000000000000000000100000001000000000000000000000001000000000013801001000000000000330000000E53657269616C2057696E646F77730000000000000000000000000100000001000000000000000000000001000000040013809307000000000000330000000755415254202331000000000000000000000000010000000100000000000000000000000100000000001380940700000000000033000000075541525420233200000000000000000000000001000000010000000000000000000000010000000000138095070000000000003300000007554152542023330000000000000000000000000100000001000000000000000000000001000000000013809607000000000000330000000E49544D2F525441205669657765720000000000000000000000000100000001000000000000000000000001000000000013803C010000000000003400000010416E616C797369732057696E646F7773000000000000000000000000010000000100000000000000000000000100000003001380658A000000000000340000000E4C6F67696320416E616C797A6572000000000000000000000000010000000100000000000000000000000100000000001380DC7F0000000000003E00000014506572666F726D616E636520416E616C797A6572000000000000000000000000010000000100000000000000000000000100000000001380E788000000000000380000000D436F646520436F76657261676500000000000000000000000001000000010000000000000000000000010000000000138053010000000000003F0000000D54726163652057696E646F77730000000000000000000000000100000001000000000000000000000001000000010013805401000000000000FFFFFFFF115472616365204D656E7520416E63686F720100000000000000000000000100000001000000000000000000000001000000000013802901000000000000350000001553797374656D205669657765722057696E646F77730000000000000000000000000100000001000000000000000000000001000000010013804B01000000000000FFFFFFFF1453797374656D2056696577657220416E63686F720100000000000000000000000100000001000000000000000000000001000000000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000138001890000000000003600000007546F6F6C626F7800000000000000000000000001000000010000000000000000000000010000000300138044C5000000000000FFFFFFFF0E5570646174652057696E646F77730100000000000000000000000100000001000000000000000000000001000000000013800000000000000400FFFFFFFF000000000000000000000000000100000001000000000000000000000001000000000013805B01000000000000FFFFFFFF12546F6F6C626F78204D656E75416E63686F720100000000000000000000000100000001000000000000000000000001000000000000000000054465627567FF7F0000</Data>
+ </Buttons>
+ <OriginalItems>
+ <Len>898</Len>
+ <Data>1900FFFF01001100434D4643546F6F6C426172427574746F6ECC88000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF00000000000000000001000000000000000100000001801780000000000000FFFFFFFF00010000000000000001000000000000000100000001801D80000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF00000000000000000001000000000000000100000001801A80000000000000FFFFFFFF00010000000000000001000000000000000100000001801B80000000000000FFFFFFFF0001000000000000000100000000000000010000000180E57F000000000000FFFFFFFF00010000000000000001000000000000000100000001801C80000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF00000000000000000001000000000000000100000001800089000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF0000000000000000000100000000000000010000000180E48B000000000000FFFFFFFF0001000000000000000100000000000000010000000180F07F000000000000FFFFFFFF0001000000000000000100000000000000010000000180E888000000000000FFFFFFFF00010000000000000001000000000000000100000001803B01000000000000FFFFFFFF0001000000000000000100000000000000010000000180BB8A000000000000FFFFFFFF0001000000000000000100000000000000010000000180D88B000000000000FFFFFFFF0001000000000000000100000000000000010000000180D28B000000000000FFFFFFFF00010000000000000001000000000000000100000001809307000000000000FFFFFFFF0001000000000000000100000000000000010000000180658A000000000000FFFFFFFF0001000000000000000100000000000000010000000180C18A000000000000FFFFFFFF0001000000000000000100000000000000010000000180EE8B000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF00000000000000000001000000000000000100000001800189000000000000FFFFFFFF000100000000000000010000000000000001000000</Data>
+ </OriginalItems>
+ <OrigResetItems>
+ <Len>898</Len>
+ <Data>1900FFFF01001100434D4643546F6F6C426172427574746F6ECC880000000000000000000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000018017800000000000000100000000000000000000000000000000010000000100000001801D800000000000000200000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001801A800000000000000300000000000000000000000000000000010000000100000001801B80000000000000040000000000000000000000000000000001000000010000000180E57F0000000000000500000000000000000000000000000000010000000100000001801C800000000000000600000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000018000890000000000000700000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180E48B000000000000080000000000000000000000000000000001000000010000000180F07F000000000000090000000000000000000000000000000001000000010000000180E8880000000000000A00000000000000000000000000000000010000000100000001803B010000000000000B0000000000000000000000000000000001000000010000000180BB8A0000000000000C0000000000000000000000000000000001000000010000000180D88B0000000000000D0000000000000000000000000000000001000000010000000180D28B0000000000000E000000000000000000000000000000000100000001000000018093070000000000000F0000000000000000000000000000000001000000010000000180658A000000000000100000000000000000000000000000000001000000010000000180C18A000000000000110000000000000000000000000000000001000000010000000180EE8B0000000000001200000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180018900000000000013000000000000000000000000000000000100000001000000</Data>
+ </OrigResetItems>
+ </ToolBar>
+ <ControlBarsSummary>
+ <Bars>0</Bars>
+ <ScreenCX>1600</ScreenCX>
+ <ScreenCY>1200</ScreenCY>
+ </ControlBarsSummary>
+ </ViewEx>
+ </WinLayoutEx>
+
+ <MDIGroups>
+ <Orientation>1</Orientation>
+ <ActiveMDIGroup>0</ActiveMDIGroup>
+ <MDIGroup>
+ <Size>100</Size>
+ <ActiveTab>0</ActiveTab>
+ <Doc>
+ <Name>.\Abstract.txt</Name>
+ <ColumnNumber>0</ColumnNumber>
+ <TopLine>1</TopLine>
+ <CurrentLine>1</CurrentLine>
+ <Folding>1</Folding>
+ <ContractedFolders></ContractedFolders>
+ <PaneID>0</PaneID>
+ </Doc>
+ </MDIGroup>
+ </MDIGroups>
+
+</ProjectGui>
diff --git a/CMSIS/RTOS2/RTX/Examples/Simulation/RTX5_Blinky/Blinky.uvoptx b/CMSIS/RTOS2/RTX/Examples/Simulation/RTX5_Blinky/Blinky.uvoptx
new file mode 100644
index 0000000..bb7c033
--- /dev/null
+++ b/CMSIS/RTOS2/RTX/Examples/Simulation/RTX5_Blinky/Blinky.uvoptx
@@ -0,0 +1,257 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no" ?>
+<ProjectOpt xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="project_optx.xsd">
+
+ <SchemaVersion>1.0</SchemaVersion>
+
+ <Header>### uVision Project, (C) Keil Software</Header>
+
+ <Extensions>
+ <cExt>*.c</cExt>
+ <aExt>*.s*; *.src; *.a*</aExt>
+ <oExt>*.obj</oExt>
+ <lExt>*.lib</lExt>
+ <tExt>*.txt; *.h; *.inc</tExt>
+ <pExt>*.plm</pExt>
+ <CppX>*.cpp</CppX>
+ <nMigrate>0</nMigrate>
+ </Extensions>
+
+ <DaveTm>
+ <dwLowDateTime>0</dwLowDateTime>
+ <dwHighDateTime>0</dwHighDateTime>
+ </DaveTm>
+
+ <Target>
+ <TargetName>Simulation</TargetName>
+ <ToolsetNumber>0x4</ToolsetNumber>
+ <ToolsetName>ARM-ADS</ToolsetName>
+ <TargetOption>
+ <CLKADS>12000000</CLKADS>
+ <OPTTT>
+ <gFlags>1</gFlags>
+ <BeepAtEnd>1</BeepAtEnd>
+ <RunSim>0</RunSim>
+ <RunTarget>1</RunTarget>
+ <RunAbUc>0</RunAbUc>
+ </OPTTT>
+ <OPTHX>
+ <HexSelection>1</HexSelection>
+ <FlashByte>65535</FlashByte>
+ <HexRangeLowAddress>0</HexRangeLowAddress>
+ <HexRangeHighAddress>0</HexRangeHighAddress>
+ <HexOffset>0</HexOffset>
+ </OPTHX>
+ <OPTLEX>
+ <PageWidth>79</PageWidth>
+ <PageLength>66</PageLength>
+ <TabStop>8</TabStop>
+ <ListingPath>.\Flash\</ListingPath>
+ </OPTLEX>
+ <ListingPage>
+ <CreateCListing>1</CreateCListing>
+ <CreateAListing>1</CreateAListing>
+ <CreateLListing>1</CreateLListing>
+ <CreateIListing>0</CreateIListing>
+ <AsmCond>1</AsmCond>
+ <AsmSymb>1</AsmSymb>
+ <AsmXref>0</AsmXref>
+ <CCond>1</CCond>
+ <CCode>0</CCode>
+ <CListInc>0</CListInc>
+ <CSymb>0</CSymb>
+ <LinkerCodeListing>0</LinkerCodeListing>
+ </ListingPage>
+ <OPTXL>
+ <LMap>1</LMap>
+ <LComments>1</LComments>
+ <LGenerateSymbols>1</LGenerateSymbols>
+ <LLibSym>1</LLibSym>
+ <LLines>1</LLines>
+ <LLocSym>1</LLocSym>
+ <LPubSym>1</LPubSym>
+ <LXref>0</LXref>
+ <LExpSel>0</LExpSel>
+ </OPTXL>
+ <OPTFL>
+ <tvExp>1</tvExp>
+ <tvExpOptDlg>0</tvExpOptDlg>
+ <IsCurrentTarget>1</IsCurrentTarget>
+ </OPTFL>
+ <CpuCode>7</CpuCode>
+ <DebugOpt>
+ <uSim>1</uSim>
+ <uTrg>0</uTrg>
+ <sLdApp>1</sLdApp>
+ <sGomain>1</sGomain>
+ <sRbreak>1</sRbreak>
+ <sRwatch>1</sRwatch>
+ <sRmem>1</sRmem>
+ <sRfunc>1</sRfunc>
+ <sRbox>1</sRbox>
+ <tLdApp>1</tLdApp>
+ <tGomain>1</tGomain>
+ <tRbreak>1</tRbreak>
+ <tRwatch>1</tRwatch>
+ <tRmem>1</tRmem>
+ <tRfunc>0</tRfunc>
+ <tRbox>1</tRbox>
+ <tRtrace>1</tRtrace>
+ <sRSysVw>1</sRSysVw>
+ <tRSysVw>1</tRSysVw>
+ <sRunDeb>0</sRunDeb>
+ <sLrtime>0</sLrtime>
+ <nTsel>0</nTsel>
+ <sDll></sDll>
+ <sDllPa></sDllPa>
+ <sDlgDll></sDlgDll>
+ <sDlgPa></sDlgPa>
+ <sIfile></sIfile>
+ <tDll></tDll>
+ <tDllPa></tDllPa>
+ <tDlgDll></tDlgDll>
+ <tDlgPa></tDlgPa>
+ <tIfile></tIfile>
+ <pMon>BIN\UL2CM3.DLL</pMon>
+ </DebugOpt>
+ <TargetDriverDllRegistry>
+ <SetRegEntry>
+ <Number>0</Number>
+ <Key>ARMRTXEVENTFLAGS</Key>
+ <Name>-L70 -Z18 -C0 -M0 -T1</Name>
+ </SetRegEntry>
+ <SetRegEntry>
+ <Number>0</Number>
+ <Key>DLGDARM</Key>
+ <Name>(1010=-1,-1,-1,-1,0)(1007=-1,-1,-1,-1,0)(1008=-1,-1,-1,-1,0)(1009=-1,-1,-1,-1,0)(1012=-1,-1,-1,-1,0)</Name>
+ </SetRegEntry>
+ <SetRegEntry>
+ <Number>0</Number>
+ <Key>DLGTARM</Key>
+ <Name>(1010=-1,-1,-1,-1,0)(1007=-1,-1,-1,-1,0)(1008=-1,-1,-1,-1,0)(1009=-1,-1,-1,-1,0)(1012=-1,-1,-1,-1,0)</Name>
+ </SetRegEntry>
+ <SetRegEntry>
+ <Number>0</Number>
+ <Key>ARMDBGFLAGS</Key>
+ <Name>-T0</Name>
+ </SetRegEntry>
+ <SetRegEntry>
+ <Number>0</Number>
+ <Key>DLGUARM</Key>
+ <Name>(105=-1,-1,-1,-1,0)</Name>
+ </SetRegEntry>
+ <SetRegEntry>
+ <Number>0</Number>
+ <Key>UL2CM3</Key>
+ <Name>-UV0510N9E -O207 -S0 -C0 -P00 -N00("ARM CoreSight SW-DP") -D00(2BA01477) -L00(0) -TO18 -TC10000000 -TP21 -TDS8007 -TDT0 -TDC1F -TIEFFFFFFFF -TIP8 -FO15 -FC1000 -FD20000000</Name>
+ </SetRegEntry>
+ </TargetDriverDllRegistry>
+ <Breakpoint/>
+ <Tracepoint>
+ <THDelay>0</THDelay>
+ </Tracepoint>
+ <DebugFlag>
+ <trace>0</trace>
+ <periodic>1</periodic>
+ <aLwin>1</aLwin>
+ <aCover>0</aCover>
+ <aSer1>0</aSer1>
+ <aSer2>0</aSer2>
+ <aPa>0</aPa>
+ <viewmode>1</viewmode>
+ <vrSel>0</vrSel>
+ <aSym>0</aSym>
+ <aTbox>0</aTbox>
+ <AscS1>0</AscS1>
+ <AscS2>0</AscS2>
+ <AscS3>0</AscS3>
+ <aSer3>0</aSer3>
+ <eProf>0</eProf>
+ <aLa>0</aLa>
+ <aPa1>0</aPa1>
+ <AscS4>0</AscS4>
+ <aSer4>1</aSer4>
+ <StkLoc>0</StkLoc>
+ <TrcWin>0</TrcWin>
+ <newCpu>0</newCpu>
+ <uProt>0</uProt>
+ </DebugFlag>
+ <LintExecutable></LintExecutable>
+ <LintConfigFile></LintConfigFile>
+ <bLintAuto>0</bLintAuto>
+ <Lin2Executable></Lin2Executable>
+ <Lin2ConfigFile></Lin2ConfigFile>
+ <bLin2Auto>0</bLin2Auto>
+ <DebugDescription>
+ <Enable>1</Enable>
+ <EnableLog>0</EnableLog>
+ <Protocol>2</Protocol>
+ <DbgClock>10000000</DbgClock>
+ </DebugDescription>
+ </TargetOption>
+ </Target>
+
+ <Group>
+ <GroupName>Source Files</GroupName>
+ <tvExp>1</tvExp>
+ <tvExpOptDlg>0</tvExpOptDlg>
+ <cbSel>0</cbSel>
+ <RteFlg>0</RteFlg>
+ <File>
+ <GroupNumber>1</GroupNumber>
+ <FileNumber>1</FileNumber>
+ <FileType>1</FileType>
+ <tvExp>0</tvExp>
+ <tvExpOptDlg>0</tvExpOptDlg>
+ <bDave2>0</bDave2>
+ <PathWithFileName>.\Blinky.c</PathWithFileName>
+ <FilenameWithoutPath>Blinky.c</FilenameWithoutPath>
+ <RteFlg>0</RteFlg>
+ <bShared>0</bShared>
+ </File>
+ </Group>
+
+ <Group>
+ <GroupName>Documentation</GroupName>
+ <tvExp>1</tvExp>
+ <tvExpOptDlg>0</tvExpOptDlg>
+ <cbSel>0</cbSel>
+ <RteFlg>0</RteFlg>
+ <File>
+ <GroupNumber>2</GroupNumber>
+ <FileNumber>2</FileNumber>
+ <FileType>5</FileType>
+ <tvExp>0</tvExp>
+ <tvExpOptDlg>0</tvExpOptDlg>
+ <bDave2>0</bDave2>
+ <PathWithFileName>.\Abstract.txt</PathWithFileName>
+ <FilenameWithoutPath>Abstract.txt</FilenameWithoutPath>
+ <RteFlg>0</RteFlg>
+ <bShared>0</bShared>
+ </File>
+ </Group>
+
+ <Group>
+ <GroupName>::CMSIS</GroupName>
+ <tvExp>1</tvExp>
+ <tvExpOptDlg>0</tvExpOptDlg>
+ <cbSel>0</cbSel>
+ <RteFlg>1</RteFlg>
+ </Group>
+
+ <Group>
+ <GroupName>::Compiler</GroupName>
+ <tvExp>0</tvExp>
+ <tvExpOptDlg>0</tvExpOptDlg>
+ <cbSel>0</cbSel>
+ <RteFlg>1</RteFlg>
+ </Group>
+
+ <Group>
+ <GroupName>::Device</GroupName>
+ <tvExp>1</tvExp>
+ <tvExpOptDlg>0</tvExpOptDlg>
+ <cbSel>0</cbSel>
+ <RteFlg>1</RteFlg>
+ </Group>
+
+</ProjectOpt>
diff --git a/CMSIS/RTOS2/RTX/Examples/Simulation/RTX5_Blinky/Blinky.uvprojx b/CMSIS/RTOS2/RTX/Examples/Simulation/RTX5_Blinky/Blinky.uvprojx
new file mode 100644
index 0000000..b5cf581
--- /dev/null
+++ b/CMSIS/RTOS2/RTX/Examples/Simulation/RTX5_Blinky/Blinky.uvprojx
@@ -0,0 +1,498 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no" ?>
+<Project xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="project_projx.xsd">
+
+ <SchemaVersion>2.1</SchemaVersion>
+
+ <Header>### uVision Project, (C) Keil Software</Header>
+
+ <Targets>
+ <Target>
+ <TargetName>Simulation</TargetName>
+ <ToolsetNumber>0x4</ToolsetNumber>
+ <ToolsetName>ARM-ADS</ToolsetName>
+ <pCCUsed>5060300::V5.06 update 3 (build 300)::ARMCC</pCCUsed>
+ <TargetOption>
+ <TargetCommonOption>
+ <Device>ARMCM3</Device>
+ <Vendor>ARM</Vendor>
+ <PackID>ARM.CMSIS.5.0.0-Beta11</PackID>
+ <PackURL>http://www.keil.com/pack/</PackURL>
+ <Cpu>IRAM(0x20000000,0x00020000) IROM(0x00000000,0x00040000) CPUTYPE("Cortex-M3") CLOCK(12000000) ESEL ELITTLE</Cpu>
+ <FlashUtilSpec></FlashUtilSpec>
+ <StartupFile></StartupFile>
+ <FlashDriverDll>UL2CM3(-S0 -C0 -P0 -FD20000000 -FC1000)</FlashDriverDll>
+ <DeviceId>0</DeviceId>
+ <RegisterFile>$$Device:ARMCM3$Device\ARM\ARMCM3\Include\ARMCM3.h</RegisterFile>
+ <MemoryEnv></MemoryEnv>
+ <Cmp></Cmp>
+ <Asm></Asm>
+ <Linker></Linker>
+ <OHString></OHString>
+ <InfinionOptionDll></InfinionOptionDll>
+ <SLE66CMisc></SLE66CMisc>
+ <SLE66AMisc></SLE66AMisc>
+ <SLE66LinkerMisc></SLE66LinkerMisc>
+ <SFDFile>$$Device:ARMCM3$Device\ARM\SVD\ARMCM3.svd</SFDFile>
+ <bCustSvd>0</bCustSvd>
+ <UseEnv>0</UseEnv>
+ <BinPath></BinPath>
+ <IncludePath></IncludePath>
+ <LibPath></LibPath>
+ <RegisterFilePath></RegisterFilePath>
+ <DBRegisterFilePath></DBRegisterFilePath>
+ <TargetStatus>
+ <Error>0</Error>
+ <ExitCodeStop>0</ExitCodeStop>
+ <ButtonStop>0</ButtonStop>
+ <NotGenerated>0</NotGenerated>
+ <InvalidFlash>1</InvalidFlash>
+ </TargetStatus>
+ <OutputDirectory>.\Flash\</OutputDirectory>
+ <OutputName>Blinky</OutputName>
+ <CreateExecutable>1</CreateExecutable>
+ <CreateLib>0</CreateLib>
+ <CreateHexFile>0</CreateHexFile>
+ <DebugInformation>1</DebugInformation>
+ <BrowseInformation>1</BrowseInformation>
+ <ListingPath>.\Flash\</ListingPath>
+ <HexFormatSelection>1</HexFormatSelection>
+ <Merge32K>0</Merge32K>
+ <CreateBatchFile>0</CreateBatchFile>
+ <BeforeCompile>
+ <RunUserProg1>0</RunUserProg1>
+ <RunUserProg2>0</RunUserProg2>
+ <UserProg1Name></UserProg1Name>
+ <UserProg2Name></UserProg2Name>
+ <UserProg1Dos16Mode>0</UserProg1Dos16Mode>
+ <UserProg2Dos16Mode>0</UserProg2Dos16Mode>
+ <nStopU1X>0</nStopU1X>
+ <nStopU2X>0</nStopU2X>
+ </BeforeCompile>
+ <BeforeMake>
+ <RunUserProg1>0</RunUserProg1>
+ <RunUserProg2>0</RunUserProg2>
+ <UserProg1Name></UserProg1Name>
+ <UserProg2Name></UserProg2Name>
+ <UserProg1Dos16Mode>0</UserProg1Dos16Mode>
+ <UserProg2Dos16Mode>0</UserProg2Dos16Mode>
+ <nStopB1X>0</nStopB1X>
+ <nStopB2X>0</nStopB2X>
+ </BeforeMake>
+ <AfterMake>
+ <RunUserProg1>0</RunUserProg1>
+ <RunUserProg2>0</RunUserProg2>
+ <UserProg1Name>$K/ARM/BIN/ElfDwT.exe !L BASEADDRESS(0x1A000000)</UserProg1Name>
+ <UserProg2Name></UserProg2Name>
+ <UserProg1Dos16Mode>0</UserProg1Dos16Mode>
+ <UserProg2Dos16Mode>0</UserProg2Dos16Mode>
+ <nStopA1X>0</nStopA1X>
+ <nStopA2X>0</nStopA2X>
+ </AfterMake>
+ <SelectedForBatchBuild>0</SelectedForBatchBuild>
+ <SVCSIdString></SVCSIdString>
+ </TargetCommonOption>
+ <CommonProperty>
+ <UseCPPCompiler>0</UseCPPCompiler>
+ <RVCTCodeConst>0</RVCTCodeConst>
+ <RVCTZI>0</RVCTZI>
+ <RVCTOtherData>0</RVCTOtherData>
+ <ModuleSelection>0</ModuleSelection>
+ <IncludeInBuild>1</IncludeInBuild>
+ <AlwaysBuild>0</AlwaysBuild>
+ <GenerateAssemblyFile>0</GenerateAssemblyFile>
+ <AssembleAssemblyFile>0</AssembleAssemblyFile>
+ <PublicsOnly>0</PublicsOnly>
+ <StopOnExitCode>3</StopOnExitCode>
+ <CustomArgument></CustomArgument>
+ <IncludeLibraryModules></IncludeLibraryModules>
+ <ComprImg>1</ComprImg>
+ </CommonProperty>
+ <DllOption>
+ <SimDllName>SARMCM3.DLL</SimDllName>
+ <SimDllArguments> -MPU</SimDllArguments>
+ <SimDlgDll>DCM.DLL</SimDlgDll>
+ <SimDlgDllArguments>-pCM3</SimDlgDllArguments>
+ <TargetDllName>SARMCM3.DLL</TargetDllName>
+ <TargetDllArguments> -MPU</TargetDllArguments>
+ <TargetDlgDll>TCM.DLL</TargetDlgDll>
+ <TargetDlgDllArguments>-pCM3</TargetDlgDllArguments>
+ </DllOption>
+ <DebugOption>
+ <OPTHX>
+ <HexSelection>1</HexSelection>
+ <HexRangeLowAddress>0</HexRangeLowAddress>
+ <HexRangeHighAddress>0</HexRangeHighAddress>
+ <HexOffset>0</HexOffset>
+ <Oh166RecLen>16</Oh166RecLen>
+ </OPTHX>
+ </DebugOption>
+ <Utilities>
+ <Flash1>
+ <UseTargetDll>1</UseTargetDll>
+ <UseExternalTool>0</UseExternalTool>
+ <RunIndependent>0</RunIndependent>
+ <UpdateFlashBeforeDebugging>1</UpdateFlashBeforeDebugging>
+ <Capability>1</Capability>
+ <DriverSelection>4097</DriverSelection>
+ </Flash1>
+ <bUseTDR>1</bUseTDR>
+ <Flash2>BIN\UL2CM3.DLL</Flash2>
+ <Flash3></Flash3>
+ <Flash4></Flash4>
+ <pFcarmOut></pFcarmOut>
+ <pFcarmGrp></pFcarmGrp>
+ <pFcArmRoot></pFcArmRoot>
+ <FcArmLst>0</FcArmLst>
+ </Utilities>
+ <TargetArmAds>
+ <ArmAdsMisc>
+ <GenerateListings>0</GenerateListings>
+ <asHll>1</asHll>
+ <asAsm>1</asAsm>
+ <asMacX>1</asMacX>
+ <asSyms>1</asSyms>
+ <asFals>1</asFals>
+ <asDbgD>1</asDbgD>
+ <asForm>1</asForm>
+ <ldLst>0</ldLst>
+ <ldmm>1</ldmm>
+ <ldXref>1</ldXref>
+ <BigEnd>0</BigEnd>
+ <AdsALst>1</AdsALst>
+ <AdsACrf>1</AdsACrf>
+ <AdsANop>0</AdsANop>
+ <AdsANot>0</AdsANot>
+ <AdsLLst>1</AdsLLst>
+ <AdsLmap>1</AdsLmap>
+ <AdsLcgr>1</AdsLcgr>
+ <AdsLsym>1</AdsLsym>
+ <AdsLszi>1</AdsLszi>
+ <AdsLtoi>1</AdsLtoi>
+ <AdsLsun>1</AdsLsun>
+ <AdsLven>1</AdsLven>
+ <AdsLsxf>1</AdsLsxf>
+ <RvctClst>0</RvctClst>
+ <GenPPlst>0</GenPPlst>
+ <AdsCpuType>"Cortex-M3"</AdsCpuType>
+ <RvctDeviceName></RvctDeviceName>
+ <mOS>0</mOS>
+ <uocRom>0</uocRom>
+ <uocRam>0</uocRam>
+ <hadIROM>1</hadIROM>
+ <hadIRAM>1</hadIRAM>
+ <hadXRAM>0</hadXRAM>
+ <uocXRam>0</uocXRam>
+ <RvdsVP>0</RvdsVP>
+ <hadIRAM2>0</hadIRAM2>
+ <hadIROM2>0</hadIROM2>
+ <StupSel>8</StupSel>
+ <useUlib>0</useUlib>
+ <EndSel>1</EndSel>
+ <uLtcg>0</uLtcg>
+ <nSecure>0</nSecure>
+ <RoSelD>3</RoSelD>
+ <RwSelD>3</RwSelD>
+ <CodeSel>0</CodeSel>
+ <OptFeed>0</OptFeed>
+ <NoZi1>0</NoZi1>
+ <NoZi2>0</NoZi2>
+ <NoZi3>0</NoZi3>
+ <NoZi4>0</NoZi4>
+ <NoZi5>0</NoZi5>
+ <Ro1Chk>0</Ro1Chk>
+ <Ro2Chk>0</Ro2Chk>
+ <Ro3Chk>0</Ro3Chk>
+ <Ir1Chk>1</Ir1Chk>
+ <Ir2Chk>0</Ir2Chk>
+ <Ra1Chk>0</Ra1Chk>
+ <Ra2Chk>0</Ra2Chk>
+ <Ra3Chk>0</Ra3Chk>
+ <Im1Chk>1</Im1Chk>
+ <Im2Chk>0</Im2Chk>
+ <OnChipMemories>
+ <Ocm1>
+ <Type>0</Type>
+ <StartAddress>0x0</StartAddress>
+ <Size>0x0</Size>
+ </Ocm1>
+ <Ocm2>
+ <Type>0</Type>
+ <StartAddress>0x0</StartAddress>
+ <Size>0x0</Size>
+ </Ocm2>
+ <Ocm3>
+ <Type>0</Type>
+ <StartAddress>0x0</StartAddress>
+ <Size>0x0</Size>
+ </Ocm3>
+ <Ocm4>
+ <Type>0</Type>
+ <StartAddress>0x0</StartAddress>
+ <Size>0x0</Size>
+ </Ocm4>
+ <Ocm5>
+ <Type>0</Type>
+ <StartAddress>0x0</StartAddress>
+ <Size>0x0</Size>
+ </Ocm5>
+ <Ocm6>
+ <Type>0</Type>
+ <StartAddress>0x0</StartAddress>
+ <Size>0x0</Size>
+ </Ocm6>
+ <IRAM>
+ <Type>0</Type>
+ <StartAddress>0x20000000</StartAddress>
+ <Size>0x20000</Size>
+ </IRAM>
+ <IROM>
+ <Type>1</Type>
+ <StartAddress>0x0</StartAddress>
+ <Size>0x40000</Size>
+ </IROM>
+ <XRAM>
+ <Type>0</Type>
+ <StartAddress>0x0</StartAddress>
+ <Size>0x0</Size>
+ </XRAM>
+ <OCR_RVCT1>
+ <Type>1</Type>
+ <StartAddress>0x0</StartAddress>
+ <Size>0x0</Size>
+ </OCR_RVCT1>
+ <OCR_RVCT2>
+ <Type>1</Type>
+ <StartAddress>0x0</StartAddress>
+ <Size>0x0</Size>
+ </OCR_RVCT2>
+ <OCR_RVCT3>
+ <Type>1</Type>
+ <StartAddress>0x0</StartAddress>
+ <Size>0x0</Size>
+ </OCR_RVCT3>
+ <OCR_RVCT4>
+ <Type>1</Type>
+ <StartAddress>0x0</StartAddress>
+ <Size>0x40000</Size>
+ </OCR_RVCT4>
+ <OCR_RVCT5>
+ <Type>1</Type>
+ <StartAddress>0x0</StartAddress>
+ <Size>0x0</Size>
+ </OCR_RVCT5>
+ <OCR_RVCT6>
+ <Type>0</Type>
+ <StartAddress>0x0</StartAddress>
+ <Size>0x0</Size>
+ </OCR_RVCT6>
+ <OCR_RVCT7>
+ <Type>0</Type>
+ <StartAddress>0x0</StartAddress>
+ <Size>0x0</Size>
+ </OCR_RVCT7>
+ <OCR_RVCT8>
+ <Type>0</Type>
+ <StartAddress>0x0</StartAddress>
+ <Size>0x0</Size>
+ </OCR_RVCT8>
+ <OCR_RVCT9>
+ <Type>0</Type>
+ <StartAddress>0x20000000</StartAddress>
+ <Size>0x20000</Size>
+ </OCR_RVCT9>
+ <OCR_RVCT10>
+ <Type>0</Type>
+ <StartAddress>0x0</StartAddress>
+ <Size>0x0</Size>
+ </OCR_RVCT10>
+ </OnChipMemories>
+ <RvctStartVector></RvctStartVector>
+ </ArmAdsMisc>
+ <Cads>
+ <interw>1</interw>
+ <Optim>1</Optim>
+ <oTime>0</oTime>
+ <SplitLS>0</SplitLS>
+ <OneElfS>0</OneElfS>
+ <Strict>0</Strict>
+ <EnumInt>0</EnumInt>
+ <PlainCh>0</PlainCh>
+ <Ropi>0</Ropi>
+ <Rwpi>0</Rwpi>
+ <wLevel>0</wLevel>
+ <uThumb>0</uThumb>
+ <uSurpInc>0</uSurpInc>
+ <uC99>0</uC99>
+ <useXO>0</useXO>
+ <v6Lang>0</v6Lang>
+ <v6LangP>0</v6LangP>
+ <vShortEn>0</vShortEn>
+ <vShortWch>0</vShortWch>
+ <v6Lto>0</v6Lto>
+ <v6WtE>0</v6WtE>
+ <VariousControls>
+ <MiscControls></MiscControls>
+ <Define></Define>
+ <Undefine></Undefine>
+ <IncludePath></IncludePath>
+ </VariousControls>
+ </Cads>
+ <Aads>
+ <interw>1</interw>
+ <Ropi>0</Ropi>
+ <Rwpi>0</Rwpi>
+ <thumb>0</thumb>
+ <SplitLS>0</SplitLS>
+ <SwStkChk>0</SwStkChk>
+ <NoWarn>0</NoWarn>
+ <uSurpInc>0</uSurpInc>
+ <useXO>0</useXO>
+ <uClangAs>0</uClangAs>
+ <VariousControls>
+ <MiscControls></MiscControls>
+ <Define></Define>
+ <Undefine></Undefine>
+ <IncludePath></IncludePath>
+ </VariousControls>
+ </Aads>
+ <LDads>
+ <umfTarg>1</umfTarg>
+ <Ropi>0</Ropi>
+ <Rwpi>0</Rwpi>
+ <noStLib>0</noStLib>
+ <RepFail>1</RepFail>
+ <useFile>0</useFile>
+ <TextAddressRange>0x1A000000</TextAddressRange>
+ <DataAddressRange>0x10000000</DataAddressRange>
+ <pXoBase></pXoBase>
+ <ScatterFile></ScatterFile>
+ <IncludeLibs></IncludeLibs>
+ <IncludeLibsPath></IncludeLibsPath>
+ <Misc></Misc>
+ <LinkerInputFile></LinkerInputFile>
+ <DisabledWarnings></DisabledWarnings>
+ </LDads>
+ </TargetArmAds>
+ </TargetOption>
+ <Groups>
+ <Group>
+ <GroupName>Source Files</GroupName>
+ <Files>
+ <File>
+ <FileName>Blinky.c</FileName>
+ <FileType>1</FileType>
+ <FilePath>.\Blinky.c</FilePath>
+ </File>
+ </Files>
+ </Group>
+ <Group>
+ <GroupName>Documentation</GroupName>
+ <Files>
+ <File>
+ <FileName>Abstract.txt</FileName>
+ <FileType>5</FileType>
+ <FilePath>.\Abstract.txt</FilePath>
+ </File>
+ </Files>
+ </Group>
+ <Group>
+ <GroupName>::CMSIS</GroupName>
+ </Group>
+ <Group>
+ <GroupName>::Compiler</GroupName>
+ </Group>
+ <Group>
+ <GroupName>::Device</GroupName>
+ </Group>
+ </Groups>
+ </Target>
+ </Targets>
+
+ <RTE>
+ <apis>
+ <api Capiversion="2.0" Cclass="CMSIS" Cgroup="RTOS2" exclusive="1">
+ <package name="CMSIS" schemaVersion="1.3" url="http://www.keil.com/pack/" vendor="ARM" version="5.0.0-Beta11"/>
+ <targetInfos>
+ <targetInfo name="Simulation"/>
+ </targetInfos>
+ </api>
+ </apis>
+ <components>
+ <component Cclass="CMSIS" Cgroup="CORE" Cvendor="ARM" Cversion="5.0.0" condition="Cortex-M ARMv8-M Device">
+ <package name="CMSIS" schemaVersion="1.3" url="http://www.keil.com/pack/" vendor="ARM" version="5.0.0-Beta11"/>
+ <targetInfos>
+ <targetInfo name="Simulation"/>
+ </targetInfos>
+ </component>
+ <component Capiversion="2.0" Cclass="CMSIS" Cgroup="RTOS2" Csub="Keil RTX5" Cvendor="ARM" Cversion="5.0.0-Alpha" condition="RTOS2 RTX5 Dependency">
+ <package name="CMSIS" schemaVersion="1.3" url="http://www.keil.com/pack/" vendor="ARM" version="5.0.0-Beta11"/>
+ <targetInfos>
+ <targetInfo name="Simulation"/>
+ </targetInfos>
+ </component>
+ <component Cclass="Device" Cgroup="Startup" Cvendor="ARM" Cversion="1.0.1" condition="ARMCM3 CMSIS">
+ <package name="CMSIS" schemaVersion="1.3" url="http://www.keil.com/pack/" vendor="ARM" version="5.0.0-Beta11"/>
+ <targetInfos>
+ <targetInfo name="Simulation"/>
+ </targetInfos>
+ </component>
+ <component Cclass="Compiler" Cgroup="I/O" Csub="STDOUT" Cvariant="ITM" Cvendor="Keil" Cversion="1.1.0" condition="ARMCC Cortex-M with ITM">
+ <package name="ARM_Compiler" schemaVersion="1.3" url="http://www.keil.com/pack/" vendor="Keil" version="1.2.0-Dev3"/>
+ <targetInfos>
+ <targetInfo name="Simulation"/>
+ </targetInfos>
+ </component>
+ </components>
+ <files>
+ <file attr="config" category="source" name="CMSIS\RTOS\RTX\Templates\RTX_Conf_CM.c" version="4.70.1">
+ <instance index="0" removed="1">RTE\CMSIS\RTX_Conf_CM.c</instance>
+ <component Capiversion="1.0" Cclass="CMSIS" Cgroup="RTOS" Csub="Keil RTX" Cvendor="ARM" Cversion="4.81.0" condition="RTOS RTX Dependency"/>
+ <package name="CMSIS" schemaVersion="1.3" url="http://www.keil.com/pack/" vendor="ARM" version="5.0.0-Beta11"/>
+ <targetInfos/>
+ </file>
+ <file attr="config" category="source" name="CMSIS\RTOS2\RTX\Config\RTX_Config.c" version="5.0.0">
+ <instance index="0">RTE\CMSIS\RTX_Config.c</instance>
+ <component Capiversion="2.0" Cclass="CMSIS" Cgroup="RTOS2" Csub="Keil RTX5" Cvendor="ARM" Cversion="5.0.0-Alpha" condition="RTOS2 RTX5 Dependency"/>
+ <package name="CMSIS" schemaVersion="1.3" url="http://www.keil.com/pack/" vendor="ARM" version="5.0.0-Beta11"/>
+ <targetInfos>
+ <targetInfo name="Simulation"/>
+ </targetInfos>
+ </file>
+ <file attr="config" category="sourceAsm" condition="ARMCC" name="Device\ARM\ARMCM3\Source\ARM\startup_ARMCM3.s" version="1.0.0">
+ <instance index="0">RTE\Device\ARMCM3\startup_ARMCM3.s</instance>
+ <component Cclass="Device" Cgroup="Startup" Cvendor="ARM" Cversion="1.0.1" condition="ARMCM3 CMSIS"/>
+ <package name="CMSIS" schemaVersion="1.3" url="http://www.keil.com/pack/" vendor="ARM" version="5.0.0-Beta11"/>
+ <targetInfos>
+ <targetInfo name="Simulation"/>
+ </targetInfos>
+ </file>
+ <file attr="config" category="sourceC" name="Device\ARM\ARMCM3\Source\system_ARMCM3.c" version="1.0.0">
+ <instance index="0">RTE\Device\ARMCM3\system_ARMCM3.c</instance>
+ <component Cclass="Device" Cgroup="Startup" Cvendor="ARM" Cversion="1.0.1" condition="ARMCM3 CMSIS"/>
+ <package name="CMSIS" schemaVersion="1.3" url="http://www.keil.com/pack/" vendor="ARM" version="5.0.0-Beta11"/>
+ <targetInfos>
+ <targetInfo name="Simulation"/>
+ </targetInfos>
+ </file>
+ <file attr="config" category="header" name="RTE_Driver\Config\RTE_Device.h" version="2.00">
+ <instance index="0" removed="1">RTE\Device\LPC1857\RTE_Device.h</instance>
+ <component Cclass="Device" Cgroup="Startup" Cvendor="Keil" Cversion="1.0.0" condition="LPC1800 CMSIS"/>
+ <package name="LPC1800_DFP" schemaVersion="1.3" url="http://www.keil.com/pack/" vendor="Keil" version="2.6.0"/>
+ <targetInfos/>
+ </file>
+ <file attr="config" category="source" condition="ARM Compiler" name="Device\Source\ARM\startup_LPC18xx.s" version="1.0.0">
+ <instance index="0" removed="1">RTE\Device\LPC1857\startup_LPC18xx.s</instance>
+ <component Cclass="Device" Cgroup="Startup" Cvendor="Keil" Cversion="1.0.0" condition="LPC1800 CMSIS"/>
+ <package name="LPC1800_DFP" schemaVersion="1.3" url="http://www.keil.com/pack/" vendor="Keil" version="2.6.0"/>
+ <targetInfos/>
+ </file>
+ <file attr="config" category="source" name="Device\Source\system_LPC18xx.c" version="1.0.1">
+ <instance index="0" removed="1">RTE\Device\LPC1857\system_LPC18xx.c</instance>
+ <component Cclass="Device" Cgroup="Startup" Cvendor="Keil" Cversion="1.0.0" condition="LPC1800 CMSIS"/>
+ <package name="LPC1800_DFP" schemaVersion="1.3" url="http://www.keil.com/pack/" vendor="Keil" version="2.6.0"/>
+ <targetInfos/>
+ </file>
+ </files>
+ </RTE>
+
+</Project>
diff --git a/CMSIS/RTOS2/RTX/Examples/Simulation/RTX5_Blinky/DebugConfig/Simulation_LPC1857.dbgconf b/CMSIS/RTOS2/RTX/Examples/Simulation/RTX5_Blinky/DebugConfig/Simulation_LPC1857.dbgconf
new file mode 100644
index 0000000..6bda414
--- /dev/null
+++ b/CMSIS/RTOS2/RTX/Examples/Simulation/RTX5_Blinky/DebugConfig/Simulation_LPC1857.dbgconf
@@ -0,0 +1,31 @@
+// <<< Use Configuration Wizard in Context Menu >>>
+
+// <h> Debug Setup
+
+// <o> Vector Reset
+// <0=> Processor Only
+// <1=> Processor and Peripherals
+// <i> Select if to additionally reset peripherals after a Vector Reset
+VecResetWithPeriph = 1;
+
+// </h>
+
+// <h> TPIU Pin Routing (TRACECLK fixed on PF_4)
+// <i> Configure the TPIU pin routing as used on your target platform.
+// <o.1> TRACEDATA0
+// <0=> Pin PF_5
+// <1=> Pin P7_4
+// <o.2> TRACEDATA1
+// <0=> Pin PF_6
+// <1=> Pin P7_5
+// <o.3> TRACEDATA2
+// <0=> Pin PF_7
+// <1=> Pin P7_6
+// <o.4> TRACEDATA3
+// <0=> Pin PF_8
+// <1=> Pin P7_7
+RoutingTPIU = 0x00000000;
+
+// </h>
+
+// <<< end of configuration section >>>
\ No newline at end of file
diff --git a/CMSIS/RTOS2/RTX/Examples/Simulation/RTX5_Blinky/RTE/CMSIS/RTX_Config.c b/CMSIS/RTOS2/RTX/Examples/Simulation/RTX5_Blinky/RTE/CMSIS/RTX_Config.c
new file mode 100644
index 0000000..051249d
--- /dev/null
+++ b/CMSIS/RTOS2/RTX/Examples/Simulation/RTX5_Blinky/RTE/CMSIS/RTX_Config.c
@@ -0,0 +1,285 @@
+/*
+ * Copyright (c) 2013-2016 ARM Limited. All rights reserved.
+ *
+ * SPDX-License-Identifier: Apache-2.0
+ *
+ * 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.
+ *
+ * -----------------------------------------------------------------------------
+ *
+ * $Revision: V5.0.0
+ *
+ * Project: CMSIS-RTOS RTX
+ * Title: RTX Configuration
+ *
+ * -----------------------------------------------------------------------------
+ */
+
+//-------- <<< Use Configuration Wizard in Context Menu >>> --------------------
+
+// <h>Thread Configuration
+// =======================
+
+// <e>Static Resources
+// <i> Enables static resources allocation.
+#define OS_THREAD_STATIC 1
+
+// <o>Number of user Threads (total) <1-1000>
+// <i> Defines maximum number of user threads that can be active at the same time.
+#define OS_THREAD_NUM 6
+
+// <o>Number of user Threads with user-provided Stack size <0-1000>
+// <i> Defines maximum number of user threads with user-provided stack size.
+// <i> Default: 0
+#define OS_THREAD_USER_STACK_NUM 0
+
+// </e>
+
+// <o>Default Thread Stack size [bytes] <96-1073741824:8>
+// <i> Defines stack size for threads with zero stack size specified.
+// <i> Default: 200
+#define OS_STACK_SIZE 400
+
+// <o>Idle Thread Stack size [bytes] <72-1073741824:8>
+// <i> Defines stack size for Idle thread.
+// <i> Default: 200
+#define OS_IDLE_THREAD_STACK_SIZE 200
+
+// <q>Stack overrun checking
+// <i> Enable stack overrun checks at thread switch.
+// <i> Enabling this option increases slightly the execution time of a thread switch.
+#define OS_STACK_CHECK 1
+
+// <q>Stack usage watermark
+// <i> Initialize thread stack with watermark pattern for analyzing stack usage.
+// <i> Enabling this option increases significantly the execution time of thread creation.
+#define OS_STACK_WATERMARK 1
+
+// <o>Processor mode for Thread execution
+// <0=> Unprivileged mode
+// <1=> Privileged mode
+// <i> Default: Privileged mode
+#define OS_PRIVILEGE_MODE 1
+
+// </h>
+
+// <h>Timer Configuration
+// ======================
+
+// <e>Static Resources
+// <i> Enables static resources allocation.
+#define OS_TIMER_STATIC 0
+
+// <o>Number of user Timers <1-1000>
+// <i> Defines maximum number of user timers that can be active at the same time.
+#define OS_TIMER_NUM 1
+
+// </e>
+
+// <o>Timer Thread Priority
+// <8=> Low
+// <16=> Below Normal <24=> Normal <32=> Above Normal
+// <40=> High
+// <48=> Realtime
+// <i> Defines priority for timer thread
+// <i> Default: High
+#define OS_TIMER_THREAD_PRIO 40
+
+// <o>Timer Thread Stack size [bytes] <0-1073741824:8>
+// <i> Defines stack size for Timer thread.
+// <i> May be set to 0 when timers are not used.
+// <i> Default: 200
+#define OS_TIMER_THREAD_STACK_SIZE 200
+
+// <o>Timer Callback Queue entries <0-256>
+// <i> Number of concurrent active timer callback functions.
+// <i> May be set to 0 when timers are not used.
+// <i> Default: 4
+#define OS_TIMER_CB_QUEUE 4
+
+// </h>
+
+// <h>Event Flags Configuration
+// ============================
+
+// <e>Static Resources
+// <i> Enables static resources allocation.
+#define OS_EVFLAGS_STATIC 0
+
+// <o>Number of Event Flags objects <1-1000>
+// <i> Defines maximum number of objects that can be active at the same time.
+#define OS_EVFLAGS_NUM 1
+
+// </e>
+
+// </h>
+
+// <h>Mutex Configuration
+// ======================
+
+// <e>Static Resources
+// <i> Enables static resources allocation.
+#define OS_MUTEX_STATIC 0
+
+// <o>Number of Mutex objects <1-1000>
+// <i> Defines maximum number of objects that can be active at the same time.
+#define OS_MUTEX_NUM 1
+
+// </e>
+
+// </h>
+
+// <h>Semaphore Configuration
+// ==========================
+
+// <e>Static Resources
+// <i> Enables static resources allocation.
+#define OS_SEMAPHORE_STATIC 0
+
+// <o>Number of Semaphore objects <1-1000>
+// <i> Defines maximum number of objects that can be active at the same time.
+#define OS_SEMAPHORE_NUM 1
+
+// </e>
+
+// </h>
+
+// <h>Memory Pool Configuration
+// ============================
+
+// <e>Static Resources
+// <i> Enables static resources allocation.
+#define OS_MEMPOOL_STATIC 0
+
+// <o>Number of Memory Pool objects <1-1000>
+// <i> Defines maximum number of objects that can be active at the same time.
+#define OS_MEMPOOL_NUM 1
+
+// </e>
+
+// </h>
+
+// <h>Message Queue Configuration
+// ==============================
+
+// <e>Static Resources
+// <i> Enables static resources allocation.
+#define OS_MSGQUEUE_STATIC 0
+
+// <o>Number of Message Queue objects <1-1000>
+// <i> Defines maximum number of objects that can be active at the same time.
+#define OS_MSGQUEUE_NUM 1
+
+// </e>
+
+// </h>
+
+// <h>System Configuration
+// =======================
+
+// <e>Dynamic Resources
+// <i> Enables dynamic resources allocation
+#define OS_DYNAMIC 0
+
+// <o>Memory size [bytes] for Control Blocks <0-1073741824:4>
+// <i> Defines the combined memory size for control blocks.
+// <i> Excluding objects with static resources.
+// <i> Default: 0
+#define OS_DYNAMIC_MEM_CB_SIZE 0
+
+// <o>Memory size [bytes] for Data Storage <0-1073741824:4>
+// <i> Defines the combined memory size for data storage (Memory Pool and Message Queue).
+// <i> Default: 0
+#define OS_DYNAMIC_MEM_DATA_SIZE 0
+
+// <o>Memory size [bytes] for Stack <0-1073741824:8>
+// <i> Defines the combined memory size for stack (Thread).
+// <i> Excluding threads with static resources and default stack size.
+// <i> Default: 0
+#define OS_DYNAMIC_MEM_STACK_SIZE 0
+
+// </e>
+
+// <o>Dynamic Memory size [bytes] <0-1073741824:8>
+// <i> Defines the combined dynamic memory size (excluding static and dynamic resources).
+// <i> Default: 4096
+#define OS_DYNAMIC_MEM_SIZE 4096
+
+// <e>Round-Robin Thread switching
+// <i> Enables Round-Robin Thread switching.
+#define OS_ROBIN_ENABLE 1
+
+// <o>Round-Robin Timeout [ms] <1-1000>
+// <i> Defines how long a thread will execute before a thread switch.
+// <i> Default: 5
+#define OS_ROBIN_TIMEOUT 5
+
+// </e>
+
+// <o>ISR FIFO Queue
+// <4=> 4 entries <8=> 8 entries <12=> 12 entries <16=> 16 entries
+// <24=> 24 entries <32=> 32 entries <48=> 48 entries <64=> 64 entries
+// <96=> 96 entries <128=> 128 entries <196=> 196 entries <256=> 256 entries
+// <i> RTOS Functions called from ISR store requests to this buffer.
+// <i> Default: 16 entries
+#define OS_ISR_FIFO_QUEUE 16
+
+// </h>
+
+// Number of Threads which use standard C/C++ library libspace
+// (when static thread resource allocation is not used).
+#if (OS_THREAD_STATIC == 0)
+#define OS_THREAD_LIBSPACE_NUM 4
+#else
+#define OS_THREAD_LIBSPACE_NUM OS_THREAD_NUM
+#endif
+
+//------------- <<< end of configuration section >>> ---------------------------
+
+#include "rtx_os.h"
+
+// OS Idle Thread
+void *os_IdleThread (void *argument) {
+ (void)argument;
+
+ for (;;) {}
+}
+
+// OS Error Callback function
+uint32_t os_Error (uint32_t code, void *object_id) {
+ (void)object_id;
+
+ switch (code) {
+ case os_ErrorStackUnderflow:
+ // Stack underflow detected for thread (thread_id=object_id)
+ break;
+ case os_ErrorISRQueueOverflow:
+ // ISR Queue overflow detected when inserting object (object_id)
+ break;
+ case os_ErrorTimerQueueOverflow:
+ // User Timer Callback Queue overflow detected for timer (timer_id=object_id)
+ break;
+ case os_ErrorClibSpace:
+ // Standard C/C++ library libspace not available: increase OS_THREAD_LIBSPACE_NUM
+ break;
+ case os_ErrorClibMutex:
+ // Standard C/C++ library mutex initialization failed
+ break;
+ default:
+ break;
+ }
+ for (;;) {}
+//return 0U;
+}
+
+#include "rtx_config.h"
diff --git a/CMSIS/RTOS2/RTX/Examples/Simulation/RTX5_Blinky/RTE/Device/ARMCM3/startup_ARMCM3.s b/CMSIS/RTOS2/RTX/Examples/Simulation/RTX5_Blinky/RTE/Device/ARMCM3/startup_ARMCM3.s
new file mode 100644
index 0000000..b625dfa
--- /dev/null
+++ b/CMSIS/RTOS2/RTX/Examples/Simulation/RTX5_Blinky/RTE/Device/ARMCM3/startup_ARMCM3.s
@@ -0,0 +1,262 @@
+;/**************************************************************************//**
+; * @file startup_ARMCM3.s
+; * @brief CMSIS Core Device Startup File for
+; * ARMCM3 Device Series
+; * @version V5.00
+; * @date 02. March 2016
+; ******************************************************************************/
+;/*
+; * Copyright (c) 2009-2016 ARM Limited. All rights reserved.
+; *
+; * SPDX-License-Identifier: Apache-2.0
+; *
+; * 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.
+; */
+
+;/*
+;//-------- <<< Use Configuration Wizard in Context Menu >>> ------------------
+;*/
+
+
+; <h> Stack Configuration
+; <o> Stack Size (in Bytes) <0x0-0xFFFFFFFF:8>
+; </h>
+
+Stack_Size EQU 0x00000400
+
+ AREA STACK, NOINIT, READWRITE, ALIGN=3
+Stack_Mem SPACE Stack_Size
+__initial_sp
+
+
+; <h> Heap Configuration
+; <o> Heap Size (in Bytes) <0x0-0xFFFFFFFF:8>
+; </h>
+
+Heap_Size EQU 0x00000C00
+
+ AREA HEAP, NOINIT, READWRITE, ALIGN=3
+__heap_base
+Heap_Mem SPACE Heap_Size
+__heap_limit
+
+
+ PRESERVE8
+ THUMB
+
+
+; Vector Table Mapped to Address 0 at Reset
+
+ AREA RESET, DATA, READONLY
+ EXPORT __Vectors
+ EXPORT __Vectors_End
+ EXPORT __Vectors_Size
+
+__Vectors DCD __initial_sp ; Top of Stack
+ DCD Reset_Handler ; Reset Handler
+ DCD NMI_Handler ; NMI Handler
+ DCD HardFault_Handler ; Hard Fault Handler
+ DCD MemManage_Handler ; MPU Fault Handler
+ DCD BusFault_Handler ; Bus Fault Handler
+ DCD UsageFault_Handler ; Usage Fault Handler
+ DCD 0 ; Reserved
+ DCD 0 ; Reserved
+ DCD 0 ; Reserved
+ DCD 0 ; Reserved
+ DCD SVC_Handler ; SVCall Handler
+ DCD DebugMon_Handler ; Debug Monitor Handler
+ DCD 0 ; Reserved
+ DCD PendSV_Handler ; PendSV Handler
+ DCD SysTick_Handler ; SysTick Handler
+
+ ; External Interrupts
+ DCD WDT_IRQHandler ; 0: Watchdog Timer
+ DCD RTC_IRQHandler ; 1: Real Time Clock
+ DCD TIM0_IRQHandler ; 2: Timer0 / Timer1
+ DCD TIM2_IRQHandler ; 3: Timer2 / Timer3
+ DCD MCIA_IRQHandler ; 4: MCIa
+ DCD MCIB_IRQHandler ; 5: MCIb
+ DCD UART0_IRQHandler ; 6: UART0 - DUT FPGA
+ DCD UART1_IRQHandler ; 7: UART1 - DUT FPGA
+ DCD UART2_IRQHandler ; 8: UART2 - DUT FPGA
+ DCD UART4_IRQHandler ; 9: UART4 - not connected
+ DCD AACI_IRQHandler ; 10: AACI / AC97
+ DCD CLCD_IRQHandler ; 11: CLCD Combined Interrupt
+ DCD ENET_IRQHandler ; 12: Ethernet
+ DCD USBDC_IRQHandler ; 13: USB Device
+ DCD USBHC_IRQHandler ; 14: USB Host Controller
+ DCD CHLCD_IRQHandler ; 15: Character LCD
+ DCD FLEXRAY_IRQHandler ; 16: Flexray
+ DCD CAN_IRQHandler ; 17: CAN
+ DCD LIN_IRQHandler ; 18: LIN
+ DCD I2C_IRQHandler ; 19: I2C ADC/DAC
+ DCD 0 ; 20: Reserved
+ DCD 0 ; 21: Reserved
+ DCD 0 ; 22: Reserved
+ DCD 0 ; 23: Reserved
+ DCD 0 ; 24: Reserved
+ DCD 0 ; 25: Reserved
+ DCD 0 ; 26: Reserved
+ DCD 0 ; 27: Reserved
+ DCD CPU_CLCD_IRQHandler ; 28: Reserved - CPU FPGA CLCD
+ DCD 0 ; 29: Reserved - CPU FPGA
+ DCD UART3_IRQHandler ; 30: UART3 - CPU FPGA
+ DCD SPI_IRQHandler ; 31: SPI Touchscreen - CPU FPGA
+__Vectors_End
+
+__Vectors_Size EQU __Vectors_End - __Vectors
+
+ AREA |.text|, CODE, READONLY
+
+
+; Reset Handler
+
+Reset_Handler PROC
+ EXPORT Reset_Handler [WEAK]
+ IMPORT SystemInit
+ IMPORT __main
+ LDR R0, =SystemInit
+ BLX R0
+ LDR R0, =__main
+ BX R0
+ ENDP
+
+
+; Dummy Exception Handlers (infinite loops which can be modified)
+
+NMI_Handler PROC
+ EXPORT NMI_Handler [WEAK]
+ B .
+ ENDP
+HardFault_Handler\
+ PROC
+ EXPORT HardFault_Handler [WEAK]
+ B .
+ ENDP
+MemManage_Handler\
+ PROC
+ EXPORT MemManage_Handler [WEAK]
+ B .
+ ENDP
+BusFault_Handler\
+ PROC
+ EXPORT BusFault_Handler [WEAK]
+ B .
+ ENDP
+UsageFault_Handler\
+ PROC
+ EXPORT UsageFault_Handler [WEAK]
+ B .
+ ENDP
+SVC_Handler PROC
+ EXPORT SVC_Handler [WEAK]
+ B .
+ ENDP
+DebugMon_Handler\
+ PROC
+ EXPORT DebugMon_Handler [WEAK]
+ B .
+ ENDP
+PendSV_Handler PROC
+ EXPORT PendSV_Handler [WEAK]
+ B .
+ ENDP
+SysTick_Handler PROC
+ EXPORT SysTick_Handler [WEAK]
+ B .
+ ENDP
+
+Default_Handler PROC
+
+ EXPORT WDT_IRQHandler [WEAK]
+ EXPORT RTC_IRQHandler [WEAK]
+ EXPORT TIM0_IRQHandler [WEAK]
+ EXPORT TIM2_IRQHandler [WEAK]
+ EXPORT MCIA_IRQHandler [WEAK]
+ EXPORT MCIB_IRQHandler [WEAK]
+ EXPORT UART0_IRQHandler [WEAK]
+ EXPORT UART1_IRQHandler [WEAK]
+ EXPORT UART2_IRQHandler [WEAK]
+ EXPORT UART3_IRQHandler [WEAK]
+ EXPORT UART4_IRQHandler [WEAK]
+ EXPORT AACI_IRQHandler [WEAK]
+ EXPORT CLCD_IRQHandler [WEAK]
+ EXPORT ENET_IRQHandler [WEAK]
+ EXPORT USBDC_IRQHandler [WEAK]
+ EXPORT USBHC_IRQHandler [WEAK]
+ EXPORT CHLCD_IRQHandler [WEAK]
+ EXPORT FLEXRAY_IRQHandler [WEAK]
+ EXPORT CAN_IRQHandler [WEAK]
+ EXPORT LIN_IRQHandler [WEAK]
+ EXPORT I2C_IRQHandler [WEAK]
+ EXPORT CPU_CLCD_IRQHandler [WEAK]
+ EXPORT SPI_IRQHandler [WEAK]
+
+WDT_IRQHandler
+RTC_IRQHandler
+TIM0_IRQHandler
+TIM2_IRQHandler
+MCIA_IRQHandler
+MCIB_IRQHandler
+UART0_IRQHandler
+UART1_IRQHandler
+UART2_IRQHandler
+UART3_IRQHandler
+UART4_IRQHandler
+AACI_IRQHandler
+CLCD_IRQHandler
+ENET_IRQHandler
+USBDC_IRQHandler
+USBHC_IRQHandler
+CHLCD_IRQHandler
+FLEXRAY_IRQHandler
+CAN_IRQHandler
+LIN_IRQHandler
+I2C_IRQHandler
+CPU_CLCD_IRQHandler
+SPI_IRQHandler
+ B .
+
+ ENDP
+
+
+ ALIGN
+
+
+; User Initial Stack & Heap
+
+ IF :DEF:__MICROLIB
+
+ EXPORT __initial_sp
+ EXPORT __heap_base
+ EXPORT __heap_limit
+
+ ELSE
+
+ IMPORT __use_two_region_memory
+ EXPORT __user_initial_stackheap
+
+__user_initial_stackheap PROC
+ LDR R0, = Heap_Mem
+ LDR R1, =(Stack_Mem + Stack_Size)
+ LDR R2, = (Heap_Mem + Heap_Size)
+ LDR R3, = Stack_Mem
+ BX LR
+ ENDP
+
+ ALIGN
+
+ ENDIF
+
+
+ END
diff --git a/CMSIS/RTOS2/RTX/Examples/Simulation/RTX5_Blinky/RTE/Device/ARMCM3/system_ARMCM3.c b/CMSIS/RTOS2/RTX/Examples/Simulation/RTX5_Blinky/RTE/Device/ARMCM3/system_ARMCM3.c
new file mode 100644
index 0000000..3c9aa3a
--- /dev/null
+++ b/CMSIS/RTOS2/RTX/Examples/Simulation/RTX5_Blinky/RTE/Device/ARMCM3/system_ARMCM3.c
@@ -0,0 +1,68 @@
+/**************************************************************************//**
+ * @file system_ARMCM3.c
+ * @brief CMSIS Device System Source File for
+ * ARMCM3 Device Series
+ * @version V5.00
+ * @date 08. April 2016
+ ******************************************************************************/
+/*
+ * Copyright (c) 2009-2016 ARM Limited. All rights reserved.
+ *
+ * SPDX-License-Identifier: Apache-2.0
+ *
+ * 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.
+ */
+
+#include "ARMCM3.h"
+
+/*----------------------------------------------------------------------------
+ Define clocks
+ *----------------------------------------------------------------------------*/
+#define XTAL ( 5000000U) /* Oscillator frequency */
+
+#define SYSTEM_CLOCK (5 * XTAL)
+
+
+/*----------------------------------------------------------------------------
+ Externals
+ *----------------------------------------------------------------------------*/
+#if defined (__VTOR_PRESENT) && (__VTOR_PRESENT == 1)
+ extern uint32_t __Vectors;
+#endif
+
+/*----------------------------------------------------------------------------
+ System Core Clock Variable
+ *----------------------------------------------------------------------------*/
+uint32_t SystemCoreClock = SYSTEM_CLOCK;
+
+
+/*----------------------------------------------------------------------------
+ System Core Clock update function
+ *----------------------------------------------------------------------------*/
+void SystemCoreClockUpdate (void)
+{
+ SystemCoreClock = SYSTEM_CLOCK;
+}
+
+/*----------------------------------------------------------------------------
+ System initialization function
+ *----------------------------------------------------------------------------*/
+void SystemInit (void)
+{
+
+#if defined (__VTOR_PRESENT) && (__VTOR_PRESENT == 1)
+ SCB->VTOR = (uint32_t) &__Vectors;
+#endif
+
+ SystemCoreClock = SYSTEM_CLOCK;
+}
diff --git a/CMSIS/RTOS2/RTX/Examples/Simulation/RTX5_Blinky/RTE/RTE_Components.h b/CMSIS/RTOS2/RTX/Examples/Simulation/RTX5_Blinky/RTE/RTE_Components.h
new file mode 100644
index 0000000..a5250d7
--- /dev/null
+++ b/CMSIS/RTOS2/RTX/Examples/Simulation/RTX5_Blinky/RTE/RTE_Components.h
@@ -0,0 +1,24 @@
+
+/*
+ * Auto generated Run-Time-Environment Component Configuration File
+ * *** Do not modify ! ***
+ *
+ * Project: 'Blinky'
+ * Target: 'Simulation'
+ */
+
+#ifndef RTE_COMPONENTS_H
+#define RTE_COMPONENTS_H
+
+
+/*
+ * Define the Device Header File:
+ */
+#define CMSIS_device_header "ARMCM3.h"
+
+#define RTE_CMSIS_RTOS2 /* CMSIS-RTOS2 */
+ #define RTE_CMSIS_RTOS2_RTX5 /* CMSIS-RTOS2 Keil RTX5 */
+#define RTE_Compiler_IO_STDOUT /* Compiler I/O: STDOUT */
+ #define RTE_Compiler_IO_STDOUT_ITM /* Compiler I/O: STDOUT ITM */
+
+#endif /* RTE_COMPONENTS_H */
diff --git a/CMSIS/RTOS2/RTX/RTX5.scvd b/CMSIS/RTOS2/RTX/RTX5.scvd
new file mode 100644
index 0000000..29e63ee
--- /dev/null
+++ b/CMSIS/RTOS2/RTX/RTX5.scvd
@@ -0,0 +1,840 @@
+<?xml version="1.0" encoding="utf-8"?>
+
+<component_viewer schemaVersion="0.1" xmlns:xs="http://www.w3.org/2001/XMLSchema-instance" xs:noNamespaceSchemaLocation="Component_Viewer.xsd">
+ <component name="RTOS" version="5.0.0"/> <!-- name and version of the component -->
+
+ <typedefs>
+ <!-- Thread Control Block (rtx_os.h line 111) -->
+ <typedef name="os_thread_t" info="" size="60">
+ <member name="id" type="uint8_t" offset="0" info="Object Identifier"/>
+ <member name="state" type="uint8_t" offset="1" info="Object State">
+ <enum name="osThreadInactive" value="0" info=""/>
+ <enum name="osThreadReady" value="1" info=""/>
+ <enum name="osThreadRunning" value="2" info=""/>
+ <enum name="osThreadWaiting" value="3" info=""/>
+ <enum name="osThreadSuspended" value="4" info=""/>
+ <enum name="osThreadTerminated" value="5" info=""/>
+ <enum name="osThreadError" value="-1" info=""/>
+
+ <enum name="Waiting Delay" value="0x13" info=""/>
+ <enum name="Waiting Join" value="0x23" info=""/>
+ <enum name="Waiting ThreadFlags" value="0x33" info=""/>
+ <enum name="Waiting EventFlags" value="0x43" info=""/>
+ <enum name="Waiting Mutex" value="0x53" info=""/>
+ <enum name="Waiting Semaphore" value="0x63" info=""/>
+ <enum name="Waiting MemoryPool" value="0x73" info=""/>
+ <enum name="Waiting MessageGet" value="0x83" info=""/>
+ <enum name="Waiting MessagePut" value="0x93" info=""/>
+ </member>
+ <member name="flags" type="uint8_t" offset="2" info="Object Flags"/>
+ <member name="attr" type="uint8_t" offset="3" info="Object Attributes"/>
+ <member name="name" type="uint32_t" offset="4" info="Object name (type is *uint8_t)"/>
+
+ <member name="thread_next" type="*os_thread_t" offset="8" info="Link pointer to next Thread in Object list"/>
+ <member name="thread_prev" type="*os_thread_t" offset="12" info="Link pointer to previous Thread in Object list"/>
+ <member name="delay_next" type="*os_thread_t" offset="16" info="Link pointer to next Thread in Delay list"/>
+ <member name="delay_prev" type="*os_thread_t" offset="20" info="Link pointer to previous Thread in Delay list"/>
+ <member name="thread_join" type="*os_thread_t" offset="24" info="Thread waiting to Join"/>
+
+ <member name="delay" type="uint32_t" offset="28" info="Delay time"/>
+ <member name="priority" type="int8_t" offset="32" info="Thread priority">
+ <enum name="osPriorityNone" value="0" info=""/>
+ <enum name="osPriorityIdle" value="1" info=""/>
+ <enum name="osPriorityLow" value="8" info=""/>
+ <enum name="osPriorityLow1" value="8+1" info=""/>
+ <enum name="osPriorityLow2" value="8+2" info=""/>
+ <enum name="osPriorityLow3" value="8+3" info=""/>
+ <enum name="osPriorityLow4" value="8+4" info=""/>
+ <enum name="osPriorityLow5" value="8+5" info=""/>
+ <enum name="osPriorityLow6" value="8+6" info=""/>
+ <enum name="osPriorityLow7" value="8+7" info=""/>
+ <enum name="osPriorityBelowNormal" value="16" info=""/>
+ <enum name="osPriorityBelowNormal1" value="16+1" info=""/>
+ <enum name="osPriorityBelowNormal2" value="16+2" info=""/>
+ <enum name="osPriorityBelowNormal3" value="16+3" info=""/>
+ <enum name="osPriorityBelowNormal4" value="16+4" info=""/>
+ <enum name="osPriorityBelowNormal5" value="16+5" info=""/>
+ <enum name="osPriorityBelowNormal6" value="16+6" info=""/>
+ <enum name="osPriorityBelowNormal7" value="16+7" info=""/>
+ <enum name="osPriorityNormal" value="24" info=""/>
+ <enum name="osPriorityNormal1" value="24+1" info=""/>
+ <enum name="osPriorityNormal2" value="24+2" info=""/>
+ <enum name="osPriorityNormal3" value="24+3" info=""/>
+ <enum name="osPriorityNormal4" value="24+4" info=""/>
+ <enum name="osPriorityNormal5" value="24+5" info=""/>
+ <enum name="osPriorityNormal6" value="24+6" info=""/>
+ <enum name="osPriorityNormal7" value="24+7" info=""/>
+ <enum name="osPriorityAboveNormal" value="32" info=""/>
+ <enum name="osPriorityAboveNormal1" value="32+1" info=""/>
+ <enum name="osPriorityAboveNormal2" value="32+2" info=""/>
+ <enum name="osPriorityAboveNormal3" value="32+3" info=""/>
+ <enum name="osPriorityAboveNormal4" value="32+4" info=""/>
+ <enum name="osPriorityAboveNormal5" value="32+5" info=""/>
+ <enum name="osPriorityAboveNormal6" value="32+6" info=""/>
+ <enum name="osPriorityAboveNormal7" value="32+7" info=""/>
+ <enum name="osPriorityHigh" value="40" info=""/>
+ <enum name="osPriorityHigh1" value="40+1" info=""/>
+ <enum name="osPriorityHigh2" value="40+2" info=""/>
+ <enum name="osPriorityHigh3" value="40+3" info=""/>
+ <enum name="osPriorityHigh4" value="40+4" info=""/>
+ <enum name="osPriorityHigh5" value="40+5" info=""/>
+ <enum name="osPriorityHigh6" value="40+6" info=""/>
+ <enum name="osPriorityHigh7" value="40+7" info=""/>
+ <enum name="osPriorityRealtime" value="48" info=""/>
+ <enum name="osPriorityRealtime1" value="48+1" info=""/>
+ <enum name="osPriorityRealtime2" value="48+2" info=""/>
+ <enum name="osPriorityRealtime3" value="48+3" info=""/>
+ <enum name="osPriorityRealtime4" value="48+4" info=""/>
+ <enum name="osPriorityRealtime5" value="48+5" info=""/>
+ <enum name="osPriorityRealtime6" value="48+6" info=""/>
+ <enum name="osPriorityRealtime7" value="48+7" info=""/>
+ <enum name="osPriorityISR" value="56" info=""/>
+ <enum name="osPriorityError" value="-1" info=""/>
+ </member>
+ <member name="priority_base" type="int8_t" offset="33" info="Base priority"/>
+ <member name="stack_frame" type="uint8_t" offset="34" info="Stack frame"/>
+ <member name="flags_options" type="uint8_t" offset="35" info="Thread/Event flags options"/>
+ <member name="wait_flags" type="int32_t" offset="36" info="Waiting Thread/Event flags"/>
+ <member name="thread_flags" type="int32_t" offset="40" info="Thread flags"/>
+ <member name="mutex_list" type="*os_mutex_t" offset="44" info="Link pointer to list of owned mutexes"/>
+ <member name="stack_mem" type="uint32_t" offset="48" info="Stack memory (type is void *)"/>
+ <member name="stack_size" type="uint32_t" offset="52" info="Stack size"/>
+ <member name="sp" type="uint32_t" offset="56" info="Current stack pointer"/>
+
+ <var name="cb_id" type="uint8_t" size="1" info="Component View ID"/>
+ <var name="cb_valid" type="uint32_t" size="1" info="Control Block validation status (valid=1, invalid=0)"/>
+
+ <var name="ex_delay" type="uint32_t" size="1" info="Calculated execution delay"/>
+
+ <var name="stack_val" type="uint32_t" size="1" info="Stack usage: analysis result"/>
+ <var name="stack_cur" type="uint32_t" size="1" info="Stack usage: current (in percent)"/>
+ <var name="stack_maxb" type="uint32_t" size="1" info="Stack usage: maximum (in bytes)"/>
+ <var name="stack_maxp" type="uint32_t" size="1" info="Stack usage: maximum (in percent)"/>
+ <var name="stack_over" type="uint8_t" size="1" info="Stack usage: overflow"/>
+ </typedef>
+
+ <!-- Timer Control Block (rtx_os.h line 153) -->
+ <typedef name="os_timer_t" info="" size="32">
+ <member name="id" type="uint8_t" offset="0" info="Object Identifier"/>
+ <member name="state" type="uint8_t" offset="1" info="Object State">
+ <enum name="Inactive" value="0" info="Timer is not active"/>
+ <enum name="Stopped" value="1" info="Timer is stopped"/>
+ <enum name="Running" value="2" info="Timer is running"/>
+ </member>
+ <member name="flags" type="uint8_t" offset="2" info="Object Flags"/>
+ <member name="type" type="uint8_t" offset="3" info="Timer Type">
+ <enum name="osTimerOnce" value="0" info="One-shot timer"/>
+ <enum name="osTimerPeriodic" value="1" info="Periodic timer"/>
+ </member>
+ <member name="name" type="uint32_t" offset="4" info="Object name (type is *uint8_t)"/>
+ <member name="prev" type="*os_timer_t" offset="8" info="Pointer to previous active timer"/>
+ <member name="next" type="*os_timer_t" offset="12" info="Pointer to next active timer"/>
+ <member name="tick" type="uint32_t" offset="16" info="Timer current tick"/>
+ <member name="load" type="uint32_t" offset="20" info="Timer load value"/>
+ <!-- Inlined "os_timer_finfo_t" structure (rtx_os.h line 147) -->
+ <member name="finfo_fp" type="uint32_t" offset="24" info="Timer function pointer (type is void *)"/>
+ <member name="finfo_arg" type="uint32_t" offset="28" info="Timer function argument (type is void *)"/>
+
+ <var name="cb_valid" type="uint32_t" size="1" info="Control Block validation status (valid=1, invalid=0)"/>
+ <var name="ex_tick" type="uint32_t" size="1" info="Calculated absolute tick time"/>
+ </typedef>
+
+ <!-- Event Flags Control Block (rtx_os.h line 170) -->
+ <typedef name="os_event_flags_t" info="" size="16">
+ <member name="id" type="uint8_t" offset="0" info="Object Identifier"/>
+ <member name="state" type="uint8_t" offset="1" info="Object State"/>
+ <member name="flags" type="uint8_t" offset="2" info="Object Flags"/>
+ <member name="reserved" type="uint8_t" offset="3" info=""/>
+ <member name="name" type="uint32_t" offset="4" info="Object name (type is *uint8_t)"/>
+ <member name="thread_list" type="*os_thread_t" offset="8" info="Waiting threads list"/>
+ <member name="event_flags" type="int32_t" offset="12" info="Event flags"/>
+
+ <var name="cb_valid" type="uint32_t" size="1" info="Control Block validation status (valid=1, invalid=0)"/>
+ <var name="wl_idx" type="uint32_t" size="1" info="EventFlags waiting list (EWL) index" />
+ <var name="wl_cnt" type="uint32_t" size="1" info="Number of threads waiting for event flags" />
+ </typedef>
+
+ <!-- Mutex Control Block (rtx_os.h line 184) -->
+ <typedef name="os_mutex_t" info="" size="28">
+ <member name="id" type="uint8_t" offset="0" info="Object Identifier"/>
+ <member name="state" type="uint8_t" offset="1" info="Object State"/>
+ <member name="flags" type="uint8_t" offset="2" info="Object Flags"/>
+ <member name="attr" type="uint8_t" offset="3" info="Object Attributes"/>
+ <member name="name" type="uint32_t" offset="4" info="Object name (type is *uint8_t)"/>
+ <member name="thread_list" type="*os_thread_t" offset="8" info="Waiting threads list"/>
+ <member name="owner_thread" type="*os_thread_t" offset="12" info="Owner thread"/>
+ <member name="owner_prev" type="*os_mutex_t" offset="16" info="Pointer to previous owned mutex"/>
+ <member name="owner_next" type="*os_mutex_t" offset="20" info="Pointer to next owned mutex"/>
+ <member name="lock" type="uint8_t" offset="24" info="Lock counter"/>
+
+ <var name="cb_valid" type="uint32_t" size="1" info="Control Block validation status (valid=1, invalid=0)"/>
+ <var name="wl_idx" type="uint32_t" size="1" info="Mutex waiting list (MWL) index" />
+ <var name="wl_cnt" type="uint32_t" size="1" info="Number of threads waiting for current mutex" />
+ </typedef>
+
+ <!-- Semaphore Control Block (rtx_os.h line 202) -->
+ <typedef name="os_semaphore_t" info="" size="16">
+ <member name="id" type="uint8_t" offset="0" info="Object Identifier"/>
+ <member name="state" type="uint8_t" offset="1" info="Object State"/>
+ <member name="flags" type="uint8_t" offset="2" info="Object Flags"/>
+ <member name="reserved" type="uint8_t" offset="3" info=""/>
+ <member name="name" type="uint32_t" offset="4" info="Object name (type is *uint8_t)"/>
+ <member name="thread_list" type="*os_thread_t" offset="8" info="Waiting threads list"/>
+ <member name="tokens" type="uint16_t" offset="12" info="Current number of tokens"/>
+ <member name="max_tokens" type="uint16_t" offset="14" info="Maximum number of tokens"/>
+
+ <var name="cb_valid" type="uint32_t" size="1" info="Control Block validation status (valid=1, invalid=0)"/>
+ <var name="wl_idx" type="uint32_t" size="1" info="Semaphore waiting list (SWL) index" />
+ <var name="wl_cnt" type="uint32_t" size="1" info="Number of threads waiting for current semaphore" />
+ </typedef>
+
+ <!-- Memory Pool Information (rtx_os.h line 217) -->
+ <typedef name="os_mp_info_t" info="Memory pool information" size="24">
+ <member name="max_blocks" type="uint32_t" offset="0" info="Maximum number of blocks"/>
+ <member name="used_blocks" type="uint32_t" offset="4" info="Number of used blocks"/>
+ <member name="block_size" type="uint32_t" offset="8" info="Block size"/>
+ <member name="block_base" type="uint32_t" offset="12" info="Block memory base address (type is void *)"/>
+ <member name="block_lim" type="uint32_t" offset="16" info="Block memory limit address (type is void *)"/>
+ <member name="block_free" type="uint32_t" offset="20" info="First free block address (type is void *)"/>
+ </typedef>
+
+ <!-- Memory Pool Control Block (rtx_os.h line 227) -->
+ <typedef name="os_memory_pool_t" info="" size="36">
+ <member name="id" type="uint8_t" offset="0" info="Object Identifier"/>
+ <member name="state" type="uint8_t" offset="1" info="Object State"/>
+ <member name="flags" type="uint8_t" offset="2" info="Object Flags"/>
+ <member name="reserved" type="uint8_t" offset="3" info=""/>
+ <member name="name" type="uint32_t" offset="4" info="Object name (type is *uint8_t)"/>
+ <member name="thread_list" type="*os_thread_t" offset="8" info="Waiting threads list"/>
+
+ <!-- Inlined "os_mp_info_t" structure (rtx_os.h line 217) -->
+ <member name="max_blocks" type="uint32_t" offset="12+0" info="Maximum number of blocks"/>
+ <member name="used_blocks" type="uint32_t" offset="12+4" info="Number of used blocks"/>
+ <member name="block_size" type="uint32_t" offset="12+8" info="Block size"/>
+ <member name="block_base" type="uint32_t" offset="12+12" info="Block memory base address (type is void *)"/>
+ <member name="block_lim" type="uint32_t" offset="12+16" info="Block memory limit address (type is void *)"/>
+ <member name="block_free" type="uint32_t" offset="12+20" info="First free block address (type is void *)"/>
+
+ <var name="cb_valid" type="uint32_t" size="1" info="Control Block validation status (valid=1, invalid=0)"/>
+ <var name="wl_idx" type="uint32_t" size="1" info="Memory Pool waiting list (PWL) index" />
+ <var name="wl_cnt" type="uint32_t" size="1" info="Number of threads waiting for memory pool" />
+ </typedef>
+
+ <!-- Message Control Block (rtx_os.h line 241) -->
+ <typedef name="os_message_t" info="" size="12">
+ <member name="id" type="uint8_t" offset="0" info="Object Identifier"/>
+ <member name="state" type="uint8_t" offset="1" info="Object State"/>
+ <member name="flags" type="uint8_t" offset="2" info="Object Flags"/>
+ <member name="priority" type="uint8_t" offset="3" info="Message priority"/>
+ <member name="prev" type="*os_message_t" offset="4" info="Pointer to previous message"/>
+ <member name="next" type="*os_message_t" offset="8" info="Pointer to next message"/>
+ </typedef>
+
+ <!-- Message Queue Control Block (rtx_os.h line 251) -->
+ <typedef name="os_message_queue_t" info="" size="52">
+ <member name="id" type="uint8_t" offset="0" info="Object Identifier"/>
+ <member name="state" type="uint8_t" offset="1" info="Object State"/>
+ <member name="flags" type="uint8_t" offset="2" info="Object Flags"/>
+ <member name="reserved" type="uint8_t" offset="3" info=""/>
+ <member name="name" type="uint32_t" offset="4" info="Object name (type is *uint8_t)"/>
+ <member name="thread_list" type="*os_thread_t" offset="8" info="Waiting threads list"/>
+
+ <!-- Inlined "os_mp_info_t" structure (rtx_os.h line 217) -->
+ <member name="max_blocks" type="uint32_t" offset="12+0" info="Maximum number of blocks"/>
+ <member name="used_blocks" type="uint32_t" offset="12+4" info="Number of used blocks"/>
+ <member name="block_size" type="uint32_t" offset="12+8" info="Block size"/>
+ <member name="block_base" type="uint32_t" offset="12+12" info="Block memory base address (type is void *)"/>
+ <member name="block_lim" type="uint32_t" offset="12+16" info="Block memory limit address (type is void *)"/>
+ <member name="block_free" type="uint32_t" offset="12+20" info="First free block address (type is void *)"/>
+
+ <member name="msg_size" type="uint32_t" offset="36" info="Message size"/>
+ <member name="msg_count" type="uint32_t" offset="40" info="Number of queued messages"/>
+ <member name="msg_first" type="*os_message_t" offset="44" info="Pointer to first message"/>
+ <member name="msg_last" type="*os_message_t" offset="48" info="Pointer to last message"/>
+
+ <var name="cb_valid" type="uint32_t" size="1" info="Control Block validation status (valid=1, invalid=0)"/>
+ <var name="wl_idx" type="uint32_t" size="1" info="Waiting list index (QWL)" />
+ <var name="wl_cnt" type="uint32_t" size="1" info="Number of threads waiting" />
+ </typedef>
+
+ <!-- Generic Object Control Block (rtx_os.h line 269) -->
+ <typedef name="os_object_t" info="" size="12">
+ <member name="id" type="uint8_t" offset="0" info="Object Identifier"/>
+ <member name="state" type="uint8_t" offset="1" info="Object State"/>
+ <member name="flags" type="uint8_t" offset="2" info="Object Flags"/>
+ <member name="reserved" type="uint8_t" offset="3" info=""/>
+ <member name="name" type="uint32_t" offset="4" info="Object name (type is *uint8_t)"/>
+ <member name="thread_list" type="*os_thread_t" offset="8" info="Threads list"/>
+ </typedef>
+
+ <!-- OS Runtime Information structure (rtx_os.h line 282) -->
+ <typedef name="os_info_t" info="OS Runtime Information" size="168">
+ <member name="os_id" type="uint32_t" offset="0" info="OS Identification (type is *uint8_t)"/>
+ <member name="version" type="uint32_t" offset="4" info="OS Version"/>
+ <member name="kernel_state" type="uint8_t" offset="8" info="Kernel state">
+ <enum name="osKernelInactive" value="0" info="Inactive"/>
+ <enum name="osKernelReady" value="1" info="Ready"/>
+ <enum name="osKernelRunning" value="2" info="Running"/>
+ <enum name="osKernelLocked" value="3" info="Locked"/>
+ <enum name="osKernelSuspended" value="4" info="Suspended"/>
+ <enum name="osKernelError" value="5" info="Error"/>
+ </member>
+ <member name="kernel_blocked" type="uint8_t" offset="9" info="Kernel blocked"/>
+ <member name="kernel_pendISR" type="uint8_t" offset="10" info="Kernel pending ISR"/>
+ <member name="kernel_pendSV" type="uint8_t" offset="11" info="Kernel pending SV"/>
+ <member name="kernel_usec_ticks" type="uint32_t" offset="12" info="Kernel microsec ticks"/>
+ <member name="kernel_time" type="uint64_t" offset="16" info="Kernel time in milisec"/>
+
+ <member name="tick_irqn" type="int32_t" offset="24" info="Tick timer IRQ number"/>
+
+ <member name="thread_run_curr" type="*os_thread_t" offset="28" info="Current running thread"/>
+ <member name="thread_run_next" type="*os_thread_t" offset="32" info="Next thread to run"/>
+
+ <!-- Inlined "os_object_t" structure at offset: 36 (rtx_os.h line 269) -->
+ <!-- <member name="thread_ready" type="os_object_t" offset="36" info="Ready list object"/>-->
+ <member name="thread_ready_id" type="uint8_t" offset="36+0" info="Object Identifier" />
+ <member name="thread_ready_state" type="uint8_t" offset="36+1" info="Object State" />
+ <member name="thread_ready_flags" type="uint8_t" offset="36+2" info="Object Flags" />
+ <member name="thread_ready_rsvd" type="uint8_t" offset="36+3" info="Reserved" />
+ <member name="thread_ready_name" type="uint32_t" offset="36+4" info="Object Name (type is *uint8_t)" />
+ <member name="thread_ready_thread_list" type="*os_thread_t" offset="36+8" info="Threads List" />
+
+ <member name="thread_idle" type="*os_thread_t" offset="48" info="Idle thread"/>
+ <member name="thread_delay_list" type="*os_thread_t" offset="52" info="Delay list"/>
+ <member name="thread_suspended_list" type="*os_thread_t" offset="56" info="Suspended thread list"/>
+ <member name="thread_terminated_list" type="*os_thread_t" offset="60" info="Terminated thread list"/>
+
+ <member name="thread_robin_thread" type="*os_thread_t" offset="64" info="Round Robin thread"/>
+ <member name="thread_robin_tick" type="uint32_t" offset="68" info="Round Robin time tick"/>
+ <member name="thread_timeout" type="uint32_t" offset="72" info="Round Robin timeout"/>
+
+ <member name="timer_list" type="*os_timer_t" offset="76" info="Active timer list"/>
+ <member name="timer_thread" type="*os_thread_t" offset="80" info="Timer thread"/>
+ <member name="timer_mq" type="*os_message_queue_t" offset="84" info="Timer message queue"/>
+
+ <member name="isr_queue_max" type="uint16_t" offset="88" info="Maximum items"/>
+ <member name="isr_queue_cnt" type="uint16_t" offset="90" info="Item count"/>
+ <member name="isr_queue_in" type="uint16_t" offset="92" info="Incoming item index"/>
+ <member name="isr_queue_out" type="uint16_t" offset="94" info="Outgoing item index"/>
+ <member name="isr_queue_data" type="uint32_t" offset="96" info="Queue data (value is void **)"/>
+
+ <member name="post_process_thread" type="uint32_t" offset="100" info="Thread post processing function (value is func *)"/>
+ <member name="post_process_event_flags" type="uint32_t" offset="104" info="Event flags post processing function (value is func *)"/>
+ <member name="post_process_semaphore" type="uint32_t" offset="108" info="Semaphore post processing function (value is func *)"/>
+ <member name="post_process_memory_pool" type="uint32_t" offset="112" info="Memory pool post processing function (value is func *)"/>
+ <member name="post_process_message_queue" type="uint32_t" offset="116" info="Message queue post processing function (value is func *)"/>
+
+ <member name="mem_cb" type="uint32_t" offset="120" info="Control blocks memory (value is void *)"/>
+ <member name="mem_data" type="uint32_t" offset="124" info="Data memory (value is void *)"/>
+ <member name="mem_stack" type="uint32_t" offset="128" info="Stack memory (value is void *)"/>
+ <member name="mem_common" type="uint32_t" offset="132" info="Common memory address (value is void *)"/>
+
+ <member name="mpi_stack" type="*os_mp_info_t" offset="136" info="Stack for threads"/>
+ <member name="mpi_thread" type="*os_mp_info_t" offset="140" info="Thread control blocks"/>
+ <member name="mpi_timer" type="*os_mp_info_t" offset="144" info="Timer control blocks"/>
+ <member name="mpi_event_flags" type="*os_mp_info_t" offset="148" info="Event flags control blocks"/>
+ <member name="mpi_mutex" type="*os_mp_info_t" offset="152" info="Mutex control blocks"/>
+ <member name="mpi_semaphore" type="*os_mp_info_t" offset="156" info="Semaphore control blocks"/>
+ <member name="mpi_memory_pool" type="*os_mp_info_t" offset="160" info="Memory pool control blocks"/>
+ <member name="mpi_message_queue" type="*os_mp_info_t" offset="164" info="Message queue control blocks"/>
+ </typedef>
+
+ <!-- OS Configuration structure (rtx_os.h line 433) -->
+ <typedef name="os_config_t" info="OS Configuration Structure" size="100">
+ <member name="flags" type="uint32_t" offset="0" info="OS configuration flags"/>
+ <member name="robin_timeout" type="uint32_t" offset="4" info="Round Robim timeout tick"/>
+ <member name="isr_queue_data" type="uint32_t" offset="8" info="ISR post processing queue (value is void **)"/>
+ <member name="isr_queue_max" type="uint16_t" offset="12" info="Maximum data"/>
+ <member name="isr_queue_padding" type="uint16_t" offset="14" info="Padding bytes"/>
+
+ <member name="mem_cb_addr" type="uint32_t" offset="16" info="Control block memory address"/>
+ <member name="mem_cb_size" type="uint32_t" offset="20" info="Control block memory size"/>
+ <member name="mem_data_addr" type="uint32_t" offset="24" info="Data memory address"/>
+ <member name="mem_data_size" type="uint32_t" offset="28" info="Data memory size"/>
+ <member name="mem_stack_addr" type="uint32_t" offset="32" info="Stack memory address"/>
+ <member name="mem_stack_size" type="uint32_t" offset="36" info="Stack memory size"/>
+ <member name="mem_common_addr" type="uint32_t" offset="40" info="Common memory address"/>
+ <member name="mem_common_size" type="uint32_t" offset="44" info="Common memory size"/>
+
+ <member name="mpi_stack" type="*os_mp_info_t" offset="48" info="Stack for threads"/>
+ <member name="mpi_thread" type="*os_mp_info_t" offset="52" info="Thread control blocks"/>
+ <member name="mpi_timer" type="*os_mp_info_t" offset="56" info="Timer control blocks"/>
+ <member name="mpi_event_flags" type="*os_mp_info_t" offset="60" info="Event flags control blocks"/>
+ <member name="mpi_mutex" type="*os_mp_info_t" offset="64" info="Mutex control blocks"/>
+ <member name="mpi_semaphore" type="*os_mp_info_t" offset="68" info="Semaphore control blocks"/>
+ <member name="mpi_memory_pool" type="*os_mp_info_t" offset="72" info="Memory pool control blocks"/>
+ <member name="mpi_message_queue" type="*os_mp_info_t" offset="76" info="Message queue control blocks"/>
+
+ <member name="thread_stack_size" type="uint32_t" offset="80" info="Default thread stack size"/>
+ <member name="idle_thread_attr" type="uint32_t" offset="84" info="Idle thread attributes (value is osThreadAttr_s *)"/>
+ <member name="timer_thread_attr" type="uint32_t" offset="88" info="Timer thread attributes (value is osThreadAttr_s *)"/>
+ <member name="timer_mq_attr" type="uint32_t" offset="92" info="Timer message queue attributes (value is osMessageQueueAttr_s *)"/>
+ <member name="timer_mq_mcnt" type="uint32_t" offset="96" info="Timer message queue maximum messages"/>
+ </typedef>
+
+ <!-- Memory Pool Header -->
+ <typedef name="mem_head_t" info="Memory Pool Header Structure" size="8">
+ <member name="size" type="uint32_t" offset="0" info="Memory pool size"/>
+ <member name="used" type="uint32_t" offset="4" info="Size of used memory"/>
+ </typedef>
+
+ <!-- Memory Block Header + Object Header -->
+ <typedef name="mem_block_t" info="Memory Block Header Structure" size="9">
+ <member name="next" type="*mem_block_t" offset="0" info="Next memory block"/>
+ <member name="len" type="uint32_t" offset="4" info="Memory block size"/>
+ <member name="id" type="uint8_t" offset="8" info="Object Identifier"/>
+ </typedef>
+
+ </typedefs>
+
+ <objects>
+ <object name="RTX RTOS Object">
+ <var name="i" type="uint32_t" value="0" />
+ <var name="j" type="uint32_t" value="0" />
+ <var name="k" type="uint32_t" value="0" />
+ <var name="sp" type="uint32_t" value="0" />
+ <var name="addr" type="uint32_t" value="0" />
+
+ <var name="TCB_En" type="uint8_t" value="0" />
+ <var name="CCB_En" type="uint8_t" value="0" />
+ <var name="SCB_En" type="uint8_t" value="0" />
+ <var name="MCB_En" type="uint8_t" value="0" />
+ <var name="ECB_En" type="uint8_t" value="0" />
+ <var name="PCB_En" type="uint8_t" value="0" />
+ <var name="QCB_En" type="uint8_t" value="0" />
+
+ <!-- Read main OS information and configuration structures -->
+ <readlist name="os_Info" type="os_info_t" symbol="os_Info" count="1" init="1"/>
+ <readlist name="os_Config" type="os_config_t" symbol="os_Config" count="1" init="1"/>
+
+ <var name="stack_check" type="uint8_t" value="__Symbol_exists("os_ThreadStackCheck")"/>
+ <var name="stack_wmark" type="uint8_t" value="(os_Config.flags >> 1) & 1"/>
+
+ <!-- Read ISR FIFO queue -->
+ <read name="ISR_FIFO" type="uint32_t" offset="os_Config.isr_queue_data" size="os_Config.isr_queue_max" init="1"/>
+
+ <!-- Read idle and timer thread control blocks -->
+ <readlist name="TCB" cond="os_Info.thread_idle" type="os_thread_t" offset="os_Info.thread_idle" count="1" />
+ <readlist name="TCB" cond="os_Info.timer_thread" type="os_thread_t" offset="os_Info.timer_thread" count="1" />
+
+ <!-- Read thread control blocks (MPI) -->
+ <readlist name="mp_thread" cond="os_Info.mpi_thread" type="os_mp_info_t" offset="os_Info.mpi_thread" count="1" init="1"/>
+ <readlist name="TCB" cond="os_Info.mpi_thread" type="os_thread_t" offset="mp_thread.block_base" count="mp_thread.max_blocks" />
+
+ <!-- Read timer control blocks (MPI) -->
+ <readlist name="mp_timer" cond="os_Info.mpi_timer" type="os_mp_info_t" offset="os_Info.mpi_timer" count="1" init="1"/>
+ <readlist name="CCB" cond="os_Info.mpi_timer" type="os_timer_t" offset="mp_timer.block_base" count="mp_timer.max_blocks" />
+
+ <!-- Read event flags control blocks (MPI) -->
+ <readlist name="mp_events" cond="os_Info.mpi_event_flags" type="os_mp_info_t" offset="os_Info.mpi_event_flags" count="1" init="1"/>
+ <readlist name="ECB" cond="os_Info.mpi_event_flags" type="os_event_flags_t" offset="mp_events.block_base" count="mp_events.max_blocks" />
+
+ <!-- Read mutex control blocks (MPI) -->
+ <readlist name="mp_mutex" cond="os_Info.mpi_mutex" type="os_mp_info_t" offset="os_Info.mpi_mutex" count="1" init="1"/>
+ <readlist name="MCB" cond="os_Info.mpi_mutex" type="os_mutex_t" offset="mp_mutex.block_base" count="mp_mutex.max_blocks" />
+
+ <!-- Read semaphore control blocks (MPI) -->
+ <readlist name="mp_semaphore" cond="os_Info.mpi_semaphore" type="os_mp_info_t" offset="os_Info.mpi_semaphore" count="1" init="1"/>
+ <readlist name="SCB" cond="os_Info.mpi_semaphore" type="os_semaphore_t" offset="mp_semaphore.block_base" count="mp_semaphore.max_blocks" />
+
+ <!-- Read memory pool control blocks (MPI) -->
+ <readlist name="mp_mpool" cond="os_Info.mpi_memory_pool" type="os_mp_info_t" offset="os_Info.mpi_memory_pool" count="1" init="1"/>
+ <readlist name="PCB" cond="os_Info.mpi_memory_pool" type="os_memory_pool_t" offset="mp_mpool.block_base" count="mp_mpool.max_blocks" />
+
+ <!-- Read message queue control blocks (MPI) -->
+ <readlist name="mp_mqueue" cond="os_Info.mpi_message_queue" type="os_mp_info_t" offset="os_Info.mpi_message_queue" count="1" init="1"/>
+ <readlist name="QCB" cond="os_Info.mpi_message_queue" type="os_message_queue_t" offset="mp_mqueue.block_base" count="mp_mqueue.max_blocks" />
+
+ <!-- Read control block memory pool info (MEM) -->
+ <readlist name="mem_cb_head" cond="os_Info.mem_cb" type="mem_head_t" offset="os_Info.mem_cb" count="1" init="1"/>
+ <readlist name="mem_cb" cond="os_Info.mem_cb" type="mem_block_t" offset="os_Info.mem_cb + 8" next="next"/>
+
+ <list cond="mem_cb._count > 1" name="i" start="0" limit="mem_cb._count-1">
+ <calc>
+ addr = mem_cb[i]._addr;
+ addr += 8;
+ </calc>
+
+ <!-- Read Thread Control Block -->
+ <readlist cond="mem_cb[i].id == 1" name="TCB" type="os_thread_t" offset="addr" count="1" />
+
+ <!-- Read Timer Control Block -->
+ <readlist cond="mem_cb[i].id == 2" name="CCB" type="os_timer_t" offset="addr" count="1" />
+
+ <!-- Read EventFlags Control Block -->
+ <readlist cond="mem_cb[i].id == 3" name="ECB" type="os_event_flags_t" offset="addr" count="1" />
+
+ <!-- Read Mutex Control Block -->
+ <readlist cond="mem_cb[i].id == 4" name="MCB" type="os_mutex_t" offset="addr" count="1" />
+
+ <!-- Read Semaphore Control Block -->
+ <readlist cond="mem_cb[i].id == 5" name="SCB" type="os_semaphore_t" offset="addr" count="1" />
+
+ <!-- Read MemoryPool Control Block -->
+ <readlist cond="mem_cb[i].id == 6" name="PCB" type="os_memory_pool_t" offset="addr" count="1" />
+
+ <!-- Read MessageQueue Control Block -->
+ <readlist cond="mem_cb[i].id == 8" name="QCB" type="os_message_queue_t" offset="addr" count="1" />
+ </list>
+
+ <!-- Validate and process Thread control blocks -->
+ <list name="i" start="0" limit="TCB._count">
+ <calc>
+ TCB[i].cb_valid = (TCB[i].id == 1) && (TCB[i].state != 0) && (TCB[i].sp != 0);
+ TCB[i].cb_id = 2;
+ </calc>
+ <calc cond="TCB[i]._addr == os_Info.timer_thread">
+ TCB[i].cb_id = 1;
+ </calc>
+ <calc cond="TCB[i]._addr == os_Info.thread_idle">
+ TCB[i].cb_id = 0;
+ </calc>
+
+ <!-- Determine stack usage -->
+ <calc cond="TCB[i].sp != 0">
+ TCB[i].stack_val = __CalcMemUsed (TCB[i].stack_mem, TCB[i].stack_size, 0xCCCCCCCC, 0xE25A2EA5);
+ TCB[i].stack_over = TCB[i].stack_val >> 31;
+ TCB[i].stack_maxb = TCB[i].stack_over ? TCB[i].stack_size : TCB[i].stack_val & 0xFFFFF;
+ TCB[i].stack_maxp = TCB[i].stack_over ? 100 : (TCB[i].stack_val >> 20) & 0x1FF;
+ </calc>
+
+ <!-- Stack pointer for running thread -->
+ <calc cond="TCB[i].state == 2">
+ sp = __GetRegVal ("PSP");
+ </calc>
+
+ <!-- Stack pointer for waiting thread -->
+ <calc cond="TCB[i].state != 2">
+ sp = TCB[i].sp;
+ </calc>
+
+ <!-- Determine current stack usage -->
+ <calc cond="TCB[i].sp != 0">
+ TCB[i].stack_cur = TCB[i].stack_mem + TCB[i].stack_size;
+ TCB[i].stack_cur -= sp;
+ TCB[i].stack_cur *= 100;
+ TCB[i].stack_cur /= TCB[i].stack_size;
+ </calc>
+
+ <calc>
+ TCB[i].ex_delay = TCB[i].delay;
+ </calc>
+
+ <!-- Create Thread Delay List (TDL) -->
+ <readlist name="TDL" type="os_thread_t" offset="TCB[i].delay_prev" next="delay_prev" while="TCB[i].delay_prev != 0" init="1"/>
+
+ <list name="j" start="0" limit="TDL._count" >
+ <calc>
+ TCB[i].ex_delay += TDL[j].delay;
+ </calc>
+ </list>
+ </list>
+
+ <!-- Validate and process Timer control blocks -->
+ <list name="i" start="0" limit="CCB._count">
+ <calc>
+ CCB[i].cb_valid = (CCB[i].id == 2) && (CCB[i].state != 0);
+ CCB[i].ex_tick = CCB[i].tick;
+ </calc>
+
+ <!-- Create Timer Execution List (TEL) -->
+ <readlist name="TEL" type="os_timer_t" offset="CCB[i].prev" next="prev" while="CCB[i].prev != 0" init="1"/>
+
+ <list name="j" start="0" limit="TEL._count">
+ <calc>
+ CCB[i].ex_tick += TEL[j].tick;
+ </calc>
+ </list>
+ </list>
+
+ <!-- Validate and process EventFlags control blocks -->
+ <calc> k = 0; </calc>
+
+ <list name="i" start="0" limit="ECB._count">
+ <calc>
+ ECB[i].cb_valid = (ECB[i].id == 3) && (ECB[i].state == 1);
+ ECB[i].wl_idx = k;
+ </calc>
+
+ <!-- Create a list of threads waiting for event flags -->
+ <readlist name="EWL" type="os_thread_t" offset="ECB[i].thread_list" next="thread_next" />
+
+ <calc>
+ ECB[i].wl_cnt = (EWL._count - k);
+ k = EWL._count;
+ </calc>
+ </list>
+
+ <!-- Validate and process Mutex control blocks -->
+ <calc> k = 0; </calc>
+
+ <list cond="MCB._count" name="i" start="0" limit="MCB._count">
+ <calc>
+ MCB[i].cb_valid = (MCB[i].id == 4) && (MCB[i].state == 1);
+ MCB[i].wl_idx = k;
+ </calc>
+
+ <!-- Create a list of threads waiting for mutex -->
+ <readlist name="MWL" type="os_thread_t" offset="MCB[i].thread_list" next="thread_next" />
+
+ <calc>
+ MCB[i].wl_cnt = (MWL._count - k);
+ k = MWL._count;
+ </calc>
+ </list>
+
+
+ <!-- Validate and process semaphore control blocks -->
+ <calc> k = 0; </calc>
+
+ <list cond="SCB._count" name="i" start="0" limit="SCB._count">
+ <calc>
+ SCB[i].cb_valid = (SCB[i].id == 5) && (SCB[i].state == 1);
+ SCB[i].wl_idx = k;
+ </calc>
+
+ <!-- Create a list of threads waiting for semaphore -->
+ <readlist name="SWL" type="os_thread_t" offset="SCB[i].thread_list" next="thread_next" />
+
+ <calc>
+ SCB[i].wl_cnt = (SWL._count - k);
+ k = SWL._count;
+ </calc>
+ </list>
+
+ <!-- Validate and process MemoryPool control blocks -->
+ <calc> k = 0; </calc>
+
+ <list cond="PCB._count" name="i" start="0" limit="PCB._count">
+ <calc>
+ PCB[i].cb_valid = (PCB[i].id == 6) && (PCB[i].state == 1);
+ PCB[i].wl_idx = k;
+ </calc>
+
+ <!-- Create a list of threads waiting for memory pool -->
+ <readlist name="PWL" type="os_thread_t" offset="PCB[i].thread_list" next="thread_next" />
+
+ <calc>
+ PCB[i].wl_cnt = (PWL._count - k);
+ k = PWL._count;
+ </calc>
+ </list>
+
+
+ <!-- Validate and process MessageQueue control blocks -->
+ <calc> k = 0; </calc>
+
+ <list cond="QCB._count" name="i" start="0" limit="QCB._count">
+ <calc>
+ QCB[i].cb_valid = (QCB[i].id == 8) && (QCB[i].state == 1);
+ QCB[i].wl_idx = k;
+ </calc>
+
+ <!-- Create a list of threads waiting for message queue -->
+ <readlist name="QWL" type="os_thread_t" offset="QCB[i].thread_list" next="thread_next" />
+
+ <calc>
+ QCB[i].wl_cnt = (QWL._count - k);
+ k = QWL._count;
+ </calc>
+ </list>
+
+ <!-- Determine what to display -->
+ <list cond="TCB._count" name="i" start="0" limit="TCB._count">
+ <calc>TCB_En += TCB[i].cb_valid; </calc>
+ </list>
+ <list cond="CCB._count" name="i" start="0" limit="CCB._count">
+ <calc>CCB_En += CCB[i].cb_valid; </calc>
+ </list>
+ <list cond="SCB._count" name="i" start="0" limit="SCB._count">
+ <calc>SCB_En += SCB[i].cb_valid; </calc>
+ </list>
+ <list cond="MCB._count" name="i" start="0" limit="MCB._count">
+ <calc>MCB_En += MCB[i].cb_valid; </calc>
+ </list>
+ <list cond="ECB._count" name="i" start="0" limit="ECB._count">
+ <calc>ECB_En += ECB[i].cb_valid; </calc>
+ </list>
+ <list cond="PCB._count" name="i" start="0" limit="PCB._count">
+ <calc>PCB_En += PCB[i].cb_valid; </calc>
+ </list>
+ <list cond="QCB._count" name="i" start="0" limit="QCB._count">
+ <calc>QCB_En += QCB[i].cb_valid; </calc>
+ </list>
+
+ <out name="RTX RTOS">
+ <!-- System -->
+ <item property="System" value="">
+ <item property="Kernel State" value="%E[os_Info.kernel_state]" />
+ <item property="Round Robin Timeout" cond="os_Config.robin_timeout > 0" value="%d[os_Config.robin_timeout]ms" />
+ <item property="Round Robin Timeout" cond="os_Config.robin_timeout == 0" value="Disabled" />
+ <item property="Stack Overrun Check" value="%t[stack_check ? "Enabled" : "Disabled"]" />
+ <item property="Stack Usage Watermark" value="%t[stack_wmark ? "Enabled" : "Disabled"]" />
+ <item property="Default Thread Stack Size" value="%d[os_Config.thread_stack_size]" />
+
+ <item property="ISR FIFO Queue" value="Size: %d[os_Info.isr_queue_max], Used: %d[os_Info.isr_queue_cnt]">
+ <list name="i" start="0" limit="os_Info.isr_queue_max">
+ <item property="data[%d[i]]" value="%x[ISR_FIFO[i]]" />
+ </list>
+ </item>
+ </item>
+
+ <!-- Threads -->
+ <item cond="TCB_En" property="Threads" value="">
+ <list name="i" start="0" limit="TCB._count">
+
+ <!-- Idle Thread -->
+ <item cond="TCB[i].cb_valid && (TCB[i].cb_id == 0)" property="id: %x[TCB[i]._addr], Idle thread" value="%E[TCB[i].state & 0x07], %E[TCB[i].priority]">
+
+ <item property="Stack Usage" value="Cur: %d[TCB[i].stack_cur]%%, Max: %d[TCB[i].stack_maxp]%% [ %d[TCB[i].stack_maxb]/%d[TCB[i].stack_size] ]"
+ cond="stack_wmark != 0"/>
+
+ <item property="Stack Usage" value="Cur: %d[TCB[i].stack_cur]%%"
+ cond="stack_wmark == 0"/>
+
+ <item property="Stack Overflow" cond="TCB[i].stack_over != 0" value="Overflow detected"/>
+ </item>
+
+ <!-- Timer Thread -->
+ <item cond="TCB[i].cb_valid && (TCB[i].cb_id == 1)" property="id: %x[TCB[i]._addr], Timer thread" value="%E[TCB[i].state & 0x07], %E[TCB[i].priority]">
+
+ <item property="Stack Usage" value="Cur: %d[TCB[i].stack_cur]%%, Max: %d[TCB[i].stack_maxp]%% [ %d[TCB[i].stack_maxb]/%d[TCB[i].stack_size] ]"
+ cond="stack_wmark != 0"/>
+
+ <item property="Stack Usage" value="Cur: %d[TCB[i].stack_cur]%%"
+ cond="stack_wmark == 0"/>
+
+ <item property="Stack Overflow" cond="TCB[i].stack_over != 0" value="Overflow detected"/>
+ </item>
+
+ <!-- Application threads -->
+ <item cond="TCB[i].cb_valid && (TCB[i].cb_id > 1)" property="id: %x[TCB[i]._addr]" value="%E[TCB[i].state & 0x07], %E[TCB[i].priority]">
+ <item property="Delay time" value="%d[TCB[i].ex_delay]ms"/>
+ <item property="Delay reason" value="%E[TCB[i].state]" cond="(TCB[i].state & 0x07) == 3"/>
+
+ <item property="Stack Usage" value="Cur: %d[TCB[i].stack_cur]%%, Max: %d[TCB[i].stack_maxp]%% [ %d[TCB[i].stack_maxb]/%d[TCB[i].stack_size] ]"
+ cond="stack_wmark != 0"/>
+
+ <item property="Stack Usage" value="Cur: %d[TCB[i].stack_cur]%%"
+ cond="stack_wmark == 0"/>
+
+ <item property="Stack Overrun" cond="TCB[i].stack_over != 0" value="Overrun detected"/>
+ </item>
+ </list>
+ </item>
+
+ <!-- Timers -->
+ <item cond="CCB_En" property="Timers" value="">
+ <list name="i" start="0" limit="CCB._count">
+ <item cond="CCB[i].cb_valid" property="id: %x[CCB[i]._addr], %E[CCB[i].type]" value="Tick: %d[CCB[i].ex_tick]ms, Period: %d[CCB[i].load]ms">
+ <item property="State" value="%E[CCB[i].state]" />
+ <item property="Registered callback" value="Func: %S[CCB[i].finfo_fp], Arg: %x[CCB[i].finfo_arg]" />
+ </item>
+ </list>
+ </item>
+
+ <!-- Semaphores -->
+ <item cond="SCB_En" property="Semaphores" value="">
+ <list name="i" start="0" limit="SCB._count">
+ <item cond="SCB[i].cb_valid" property="id: %x[SCB[i]._addr]" value="Tokens: %d[SCB[i].tokens], Max: %d[SCB[i].max_tokens]">
+
+ <!-- Waiting thread list -->
+ <item cond="SCB[i].wl_cnt" property="Threads waiting (%d[SCB[i].wl_cnt])" value="">
+
+ <list name="j" start="SCB[i].wl_idx" limit="SCB[i].wl_idx + SCB[i].wl_cnt">
+ <list name="k" start="0" limit="TCB._count">
+ <item cond="SWL[j].stack_mem == TCB[k].stack_mem" property="id: %x[TCB[k]._addr]" value="Delay: %d[TCB[k].ex_delay], %E[TCB[k].priority]"/>
+ </list>
+ </list>
+
+ </item>
+ </item>
+ </list>
+ </item>
+
+ <!-- Mutexes -->
+ <item cond="MCB_En" property="Mutexes" value="">
+ <list name="i" start="0" limit="MCB._count">
+ <item cond="MCB[i].cb_valid" property="id: %x[MCB[i]._addr]" value="Lock counter: %d[MCB[i].lock]">
+
+ <item property="Owner thread" value="id: %x[MCB[i].owner_thread]"/>
+
+ <!-- Waiting thread list -->
+ <item cond="MCB[i].wl_cnt" property="Threads waiting (%d[MCB[i].wl_cnt])" value="">
+
+ <list name="j" start="MCB[i].wl_idx" limit="MCB[i].wl_idx + MCB[i].wl_cnt">
+ <list name="k" start="0" limit="TCB._count">
+ <item cond="MWL[j].stack_mem == TCB[k].stack_mem" property="id: %x[TCB[k]._addr]" value="Delay: %d[TCB[k].ex_delay], %E[TCB[k].priority]"/>
+ </list>
+ </list>
+
+ </item>
+ </item>
+ </list>
+ </item>
+
+ <!-- Event Flags -->
+ <item cond="ECB_En" property="Event Flags" value="">
+ <list name="i" start="0" limit="ECB._count">
+ <item cond="ECB[i].cb_valid" property="id: %x[ECB[i]._addr]" value="Flags: %x[ECB[i].event_flags]">
+
+ <!-- Waiting thread list -->
+ <item cond="ECB[i].wl_cnt" property="Threads waiting (%d[ECB[i].wl_cnt])" value="">
+
+ <list name="j" start="ECB[i].wl_idx" limit="ECB[i].wl_idx + ECB[i].wl_cnt">
+ <list name="k" start="0" limit="TCB._count">
+ <item cond="EWL[j].stack_mem == TCB[k].stack_mem" property="id: %x[TCB[k]._addr]" value="Delay: %d[TCB[k].ex_delay], %E[TCB[k].priority]"/>
+ </list>
+ </list>
+
+ </item>
+ </item>
+ </list>
+ </item>
+
+ <!-- Memory Pool -->
+ <item cond="PCB_En" property="Memory Pool" value="">
+ <list name="i" start="0" limit="PCB._count">
+ <item cond="PCB[i].cb_valid" property="id: %x[PCB[i]._addr]" value="Blocks Used: %d[PCB[i].used_blocks], Max: %d[PCB[i].max_blocks]">
+
+ <item property="Block size" value="%d[PCB[i].block_size] bytes"/>
+
+ <!-- Waiting thread list -->
+ <item cond="PCB[i].wl_cnt" property="Threads waiting (%d[PCB[i].wl_cnt])" value="">
+
+ <list name="j" start="PCB[i].wl_idx" limit="PCB[i].wl_idx + PCB[i].wl_cnt">
+ <list name="k" start="0" limit="TCB._count">
+ <item cond="PWL[j].stack_mem == TCB[k].stack_mem" property="id: %x[TCB[k]._addr]" value="Delay: %d[TCB[k].ex_delay], %E[TCB[k].priority]"/>
+ </list>
+ </list>
+
+ </item>
+ </item>
+ </list>
+ </item>
+
+ <!-- Message Queue -->
+ <item cond="QCB_En" property="Message Queue" value="">
+ <list name="i" start="0" limit="QCB._count">
+ <item cond="QCB[i].cb_valid" property="id: %x[QCB[i]._addr]" value="Messages: %d[QCB[i].used_blocks], Max: %d[QCB[i].max_blocks]">
+
+ <item property="Message size" value="Max: %d[QCB[i].msg_size] bytes"/>
+
+ <!-- Waiting thread list -->
+ <item cond="QCB[i].wl_cnt" property="Threads waiting (%d[QCB[i].wl_cnt])" value="">
+
+ <list name="j" start="QCB[i].wl_idx" limit="QCB[i].wl_idx + QCB[i].wl_cnt">
+ <list name="k" start="0" limit="TCB._count">
+ <item cond="QWL[j].stack_mem == TCB[k].stack_mem" property="id: %x[TCB[k]._addr]" value="Delay: %d[TCB[k].ex_delay], %E[TCB[k].priority]"/>
+ </list>
+ </list>
+
+ </item>
+ </item>
+ </list>
+ </item>
+
+ </out>
+ </object>
+ </objects>
+</component_viewer>