This commit is contained in:
Quantum Leaps 2017-05-17 13:16:32 -04:00
parent 4a262e38c6
commit 28ef7ac6ce
636 changed files with 110638 additions and 85664 deletions

View File

@ -1,8 +1,8 @@
/**************************************************************************//** /**************************************************************************//**
* @file cmsis_armcc.h * @file cmsis_armcc.h
* @brief CMSIS compiler ARMCC (ARM compiler V5) header file * @brief CMSIS compiler ARMCC (ARM compiler V5) header file
* @version V5.0.1 * @version V5.0.2
* @date 03. February 2017 * @date 13. February 2017
******************************************************************************/ ******************************************************************************/
/* /*
* Copyright (c) 2009-2017 ARM Limited. All rights reserved. * Copyright (c) 2009-2017 ARM Limited. All rights reserved.
@ -67,18 +67,30 @@
#ifndef __WEAK #ifndef __WEAK
#define __WEAK __attribute__((weak)) #define __WEAK __attribute__((weak))
#endif #endif
#ifndef __UNALIGNED_UINT32
#define __UNALIGNED_UINT32(x) (*((__packed uint32_t *)(x)))
#endif
#ifndef __ALIGNED
#define __ALIGNED(x) __attribute__((aligned(x)))
#endif
#ifndef __PACKED #ifndef __PACKED
#define __PACKED __attribute__((packed)) #define __PACKED __attribute__((packed))
#endif #endif
#ifndef __PACKED_STRUCT #ifndef __PACKED_STRUCT
#define __PACKED_STRUCT __packed struct #define __PACKED_STRUCT __packed struct
#endif #endif
#ifndef __UNALIGNED_UINT32 /* deprecated */
#define __UNALIGNED_UINT32(x) (*((__packed uint32_t *)(x)))
#endif
#ifndef __UNALIGNED_UINT16_WRITE
#define __UNALIGNED_UINT16_WRITE(addr, val) ((*((__packed uint16_t *)(addr))) = (val))
#endif
#ifndef __UNALIGNED_UINT16_READ
#define __UNALIGNED_UINT16_READ(addr) (*((const __packed uint16_t *)(addr)))
#endif
#ifndef __UNALIGNED_UINT32_WRITE
#define __UNALIGNED_UINT32_WRITE(addr, val) ((*((__packed uint32_t *)(addr))) = (val))
#endif
#ifndef __UNALIGNED_UINT32_READ
#define __UNALIGNED_UINT32_READ(addr) (*((const __packed uint32_t *)(addr)))
#endif
#ifndef __ALIGNED
#define __ALIGNED(x) __attribute__((aligned(x)))
#endif
/* ########################### Core Function Access ########################### */ /* ########################### Core Function Access ########################### */

View File

@ -1,8 +1,8 @@
/**************************************************************************//** /**************************************************************************//**
* @file cmsis_armclang.h * @file cmsis_armclang.h
* @brief CMSIS compiler ARMCLANG (ARM compiler V6) header file * @brief CMSIS compiler ARMCLANG (ARM compiler V6) header file
* @version V5.0.1 * @version V5.0.3
* @date 02. February 2017 * @date 27. March 2017
******************************************************************************/ ******************************************************************************/
/* /*
* Copyright (c) 2009-2017 ARM Limited. All rights reserved. * Copyright (c) 2009-2017 ARM Limited. All rights reserved.
@ -22,6 +22,8 @@
* limitations under the License. * limitations under the License.
*/ */
//lint -esym(9058, IRQn) disable MISRA 2012 Rule 2.4 for IRQn
#ifndef __CMSIS_ARMCLANG_H #ifndef __CMSIS_ARMCLANG_H
#define __CMSIS_ARMCLANG_H #define __CMSIS_ARMCLANG_H
@ -48,22 +50,54 @@
#ifndef __WEAK #ifndef __WEAK
#define __WEAK __attribute__((weak)) #define __WEAK __attribute__((weak))
#endif #endif
#ifndef __UNALIGNED_UINT32
#pragma clang diagnostic push
#pragma clang diagnostic ignored "-Wpacked"
struct __attribute__((packed)) T_UINT32 { uint32_t v; };
#pragma clang diagnostic pop
#define __UNALIGNED_UINT32(x) (((struct T_UINT32 *)(x))->v)
#endif
#ifndef __ALIGNED
#define __ALIGNED(x) __attribute__((aligned(x)))
#endif
#ifndef __PACKED #ifndef __PACKED
#define __PACKED __attribute__((packed, aligned(1))) #define __PACKED __attribute__((packed, aligned(1)))
#endif #endif
#ifndef __PACKED_STRUCT #ifndef __PACKED_STRUCT
#define __PACKED_STRUCT struct __attribute__((packed, aligned(1))) #define __PACKED_STRUCT struct __attribute__((packed, aligned(1)))
#endif #endif
#ifndef __UNALIGNED_UINT32 /* deprecated */
#pragma clang diagnostic push
#pragma clang diagnostic ignored "-Wpacked"
//lint -esym(9058, T_UINT32) disable MISRA 2012 Rule 2.4 for T_UINT32
struct __attribute__((packed)) T_UINT32 { uint32_t v; };
#pragma clang diagnostic pop
#define __UNALIGNED_UINT32(x) (((struct T_UINT32 *)(x))->v)
#endif
#ifndef __UNALIGNED_UINT16_WRITE
#pragma clang diagnostic push
#pragma clang diagnostic ignored "-Wpacked"
//lint -esym(9058, T_UINT16_WRITE) disable MISRA 2012 Rule 2.4 for T_UINT16_WRITE
__PACKED_STRUCT T_UINT16_WRITE { uint16_t v; };
#pragma clang diagnostic pop
#define __UNALIGNED_UINT16_WRITE(addr, val) (void)((((struct T_UINT16_WRITE *)(void *)(addr))->v) = (val))
#endif
#ifndef __UNALIGNED_UINT16_READ
#pragma clang diagnostic push
#pragma clang diagnostic ignored "-Wpacked"
//lint -esym(9058, T_UINT16_READ) disable MISRA 2012 Rule 2.4 for T_UINT16_READ
__PACKED_STRUCT T_UINT16_READ { uint16_t v; };
#pragma clang diagnostic pop
#define __UNALIGNED_UINT16_READ(addr) (((const struct T_UINT16_READ *)(const void *)(addr))->v)
#endif
#ifndef __UNALIGNED_UINT32_WRITE
#pragma clang diagnostic push
#pragma clang diagnostic ignored "-Wpacked"
//lint -esym(9058, T_UINT32_WRITE) disable MISRA 2012 Rule 2.4 for T_UINT32_WRITE
__PACKED_STRUCT T_UINT32_WRITE { uint32_t v; };
#pragma clang diagnostic pop
#define __UNALIGNED_UINT32_WRITE(addr, val) (void)((((struct T_UINT32_WRITE *)(void *)(addr))->v) = (val))
#endif
#ifndef __UNALIGNED_UINT32_READ
#pragma clang diagnostic push
#pragma clang diagnostic ignored "-Wpacked"
__PACKED_STRUCT T_UINT32_READ { uint32_t v; };
#pragma clang diagnostic pop
#define __UNALIGNED_UINT32_READ(addr) (((const struct T_UINT32_READ *)(const void *)(addr))->v)
#endif
#ifndef __ALIGNED
#define __ALIGNED(x) __attribute__((aligned(x)))
#endif
/* ########################### Core Function Access ########################### */ /* ########################### Core Function Access ########################### */
@ -292,6 +326,33 @@ __attribute__((always_inline)) __STATIC_INLINE void __TZ_set_MSP_NS(uint32_t top
#endif #endif
#if (defined (__ARM_FEATURE_CMSE ) && (__ARM_FEATURE_CMSE == 3))
/**
\brief Get Stack Pointer (non-secure)
\details Returns the current value of the non-secure Stack Pointer (SP) when in secure state.
\return SP Register value
*/
__attribute__((always_inline)) __STATIC_INLINE uint32_t __TZ_get_SP_NS(void)
{
register uint32_t result;
__ASM volatile ("MRS %0, sp_ns" : "=r" (result) );
return(result);
}
/**
\brief Set Stack Pointer (non-secure)
\details Assigns the given value to the non-secure Stack Pointer (SP) when in secure state.
\param [in] topOfStack Stack Pointer value to set
*/
__attribute__((always_inline)) __STATIC_INLINE void __TZ_set_SP_NS(uint32_t topOfStack)
{
__ASM volatile ("MSR sp_ns, %0" : : "r" (topOfStack) : );
}
#endif
/** /**
\brief Get Priority Mask \brief Get Priority Mask
\details Returns the current state of the priority mask bit from the Priority Mask Register. \details Returns the current state of the priority mask bit from the Priority Mask Register.

View File

@ -1,8 +1,8 @@
/**************************************************************************//** /**************************************************************************//**
* @file cmsis_compiler.h * @file cmsis_compiler.h
* @brief CMSIS compiler generic header file * @brief CMSIS compiler generic header file
* @version V5.0.1 * @version V5.0.2
* @date 30. January 2017 * @date 13. February 2017
******************************************************************************/ ******************************************************************************/
/* /*
* Copyright (c) 2009-2017 ARM Limited. All rights reserved. * Copyright (c) 2009-2017 ARM Limited. All rights reserved.
@ -74,20 +74,36 @@
#ifndef __WEAK #ifndef __WEAK
#define __WEAK __weak #define __WEAK __weak
#endif #endif
#ifndef __UNALIGNED_UINT32
__packed struct T_UINT32 { uint32_t v; };
#define __UNALIGNED_UINT32(x) (((struct T_UINT32 *)(x))->v)
#endif
#ifndef __ALIGNED
#warning No compiler specific solution for __ALIGNED. __ALIGNED is ignored.
#define __ALIGNED(x)
#endif
#ifndef __PACKED #ifndef __PACKED
#define __PACKED __packed #define __PACKED __packed
#endif #endif
#ifndef __PACKED_STRUCT #ifndef __PACKED_STRUCT
#define __PACKED_STRUCT __packed struct #define __PACKED_STRUCT __packed struct
#endif #endif
#ifndef __UNALIGNED_UINT32 /* deprecated */
__packed struct T_UINT32 { uint32_t v; };
#define __UNALIGNED_UINT32(x) (((struct T_UINT32 *)(x))->v)
#endif
#ifndef __UNALIGNED_UINT16_WRITE
__PACKED_STRUCT T_UINT16_WRITE { uint16_t v; };
#define __UNALIGNED_UINT16_WRITE(addr, val) (void)((((struct T_UINT16_WRITE *)(void *)(addr))->v) = (val))
#endif
#ifndef __UNALIGNED_UINT16_READ
__PACKED_STRUCT T_UINT16_READ { uint16_t v; };
#define __UNALIGNED_UINT16_READ(addr) (((const struct T_UINT16_READ *)(const void *)(addr))->v)
#endif
#ifndef __UNALIGNED_UINT32_WRITE
__PACKED_STRUCT T_UINT32_WRITE { uint32_t v; };
#define __UNALIGNED_UINT32_WRITE(addr, val) (void)((((struct T_UINT32_WRITE *)(void *)(addr))->v) = (val))
#endif
#ifndef __UNALIGNED_UINT32_READ
__PACKED_STRUCT T_UINT32_READ { uint32_t v; };
#define __UNALIGNED_UINT32_READ(addr) (((const struct T_UINT32_READ *)(const void *)(addr))->v)
#endif
#ifndef __ALIGNED
#warning No compiler specific solution for __ALIGNED. __ALIGNED is ignored.
#define __ALIGNED(x)
#endif
/* /*
@ -114,19 +130,35 @@
#ifndef __WEAK #ifndef __WEAK
#define __WEAK __attribute__((weak)) #define __WEAK __attribute__((weak))
#endif #endif
#ifndef __UNALIGNED_UINT32
struct __attribute__((packed)) T_UINT32 { uint32_t v; };
#define __UNALIGNED_UINT32(x) (((struct T_UINT32 *)(x))->v)
#endif
#ifndef __ALIGNED
#define __ALIGNED(x) __attribute__((aligned(x)))
#endif
#ifndef __PACKED #ifndef __PACKED
#define __PACKED __attribute__((packed)) #define __PACKED __attribute__((packed))
#endif #endif
#ifndef __PACKED_STRUCT #ifndef __PACKED_STRUCT
#define __PACKED_STRUCT struct __attribute__((packed)) #define __PACKED_STRUCT struct __attribute__((packed))
#endif #endif
#ifndef __UNALIGNED_UINT32 /* deprecated */
struct __attribute__((packed)) T_UINT32 { uint32_t v; };
#define __UNALIGNED_UINT32(x) (((struct T_UINT32 *)(x))->v)
#endif
#ifndef __UNALIGNED_UINT16_WRITE
__PACKED_STRUCT T_UINT16_WRITE { uint16_t v; };
#define __UNALIGNED_UINT16_WRITE(addr, val) (void)((((struct T_UINT16_WRITE *)(void*)(addr))->v) = (val))
#endif
#ifndef __UNALIGNED_UINT16_READ
__PACKED_STRUCT T_UINT16_READ { uint16_t v; };
#define __UNALIGNED_UINT16_READ(addr) (((const struct T_UINT16_READ *)(const void *)(addr))->v)
#endif
#ifndef __UNALIGNED_UINT32_WRITE
__PACKED_STRUCT T_UINT32_WRITE { uint32_t v; };
#define __UNALIGNED_UINT32_WRITE(addr, val) (void)((((struct T_UINT32_WRITE *)(void *)(addr))->v) = (val))
#endif
#ifndef __UNALIGNED_UINT32_READ
__PACKED_STRUCT T_UINT32_READ { uint32_t v; };
#define __UNALIGNED_UINT32_READ(addr) (((const struct T_UINT32_READ *)(const void *)(addr))->v)
#endif
#ifndef __ALIGNED
#define __ALIGNED(x) __attribute__((aligned(x)))
#endif
/* /*
@ -157,19 +189,35 @@
#ifndef __WEAK #ifndef __WEAK
#define __WEAK __attribute__((weak)) #define __WEAK __attribute__((weak))
#endif #endif
#ifndef __UNALIGNED_UINT32
struct __packed__ T_UINT32 { uint32_t v; };
#define __UNALIGNED_UINT32(x) (((struct T_UINT32 *)(x))->v)
#endif
#ifndef __ALIGNED
#define __ALIGNED(x) __align(x)
#endif
#ifndef __PACKED #ifndef __PACKED
#define __PACKED __packed__ #define __PACKED __packed__
#endif #endif
#ifndef __PACKED_STRUCT #ifndef __PACKED_STRUCT
#define __PACKED_STRUCT struct __packed__ #define __PACKED_STRUCT struct __packed__
#endif #endif
#ifndef __UNALIGNED_UINT32 /* deprecated */
struct __packed__ T_UINT32 { uint32_t v; };
#define __UNALIGNED_UINT32(x) (((struct T_UINT32 *)(x))->v)
#endif
#ifndef __UNALIGNED_UINT16_WRITE
__PACKED_STRUCT T_UINT16_WRITE { uint16_t v; };
#define __UNALIGNED_UINT16_WRITE(addr, val) (void)((((struct T_UINT16_WRITE *)(void *)(addr))->v) = (val))
#endif
#ifndef __UNALIGNED_UINT16_READ
__PACKED_STRUCT T_UINT16_READ { uint16_t v; };
#define __UNALIGNED_UINT16_READ(addr) (((const struct T_UINT16_READ *)(const void *)(addr))->v)
#endif
#ifndef __UNALIGNED_UINT32_WRITE
__PACKED_STRUCT T_UINT32_WRITE { uint32_t v; };
#define __UNALIGNED_UINT32_WRITE(addr, val) (void)((((struct T_UINT32_WRITE *)(void *)(addr))->v) = (val))
#endif
#ifndef __UNALIGNED_UINT32_READ
__PACKED_STRUCT T_UINT32_READ { uint32_t v; };
#define __UNALIGNED_UINT32_READ(addr) (((const struct T_UINT32_READ *)(const void *)(addr))->v)
#endif
#ifndef __ALIGNED
#define __ALIGNED(x) __align(x)
#endif
/* /*
@ -198,20 +246,36 @@
#ifndef __WEAK #ifndef __WEAK
#define __WEAK __weak #define __WEAK __weak
#endif #endif
#ifndef __UNALIGNED_UINT32
@packed struct T_UINT32 { uint32_t v; };
#define __UNALIGNED_UINT32(x) (((struct T_UINT32 *)(x))->v)
#endif
#ifndef __ALIGNED
#warning No compiler specific solution for __ALIGNED. __ALIGNED is ignored.
#define __ALIGNED(x)
#endif
#ifndef __PACKED #ifndef __PACKED
#define __PACKED @packed #define __PACKED @packed
#endif #endif
#ifndef __PACKED_STRUCT #ifndef __PACKED_STRUCT
#define __PACKED_STRUCT @packed struct #define __PACKED_STRUCT @packed struct
#endif #endif
#ifndef __UNALIGNED_UINT32 /* deprecated */
@packed struct T_UINT32 { uint32_t v; };
#define __UNALIGNED_UINT32(x) (((struct T_UINT32 *)(x))->v)
#endif
#ifndef __UNALIGNED_UINT16_WRITE
__PACKED_STRUCT T_UINT16_WRITE { uint16_t v; };
#define __UNALIGNED_UINT16_WRITE(addr, val) (void)((((struct T_UINT16_WRITE *)(void *)(addr))->v) = (val))
#endif
#ifndef __UNALIGNED_UINT16_READ
__PACKED_STRUCT T_UINT16_READ { uint16_t v; };
#define __UNALIGNED_UINT16_READ(addr) (((const struct T_UINT16_READ *)(const void *)(addr))->v)
#endif
#ifndef __UNALIGNED_UINT32_WRITE
__PACKED_STRUCT T_UINT32_WRITE { uint32_t v; };
#define __UNALIGNED_UINT32_WRITE(addr, val) (void)((((struct T_UINT32_WRITE *)(void *)(addr))->v) = (val))
#endif
#ifndef __UNALIGNED_UINT32_READ
__PACKED_STRUCT T_UINT32_READ { uint32_t v; };
#define __UNALIGNED_UINT32_READ(addr) (((const struct T_UINT32_READ *)(const void *)(addr))->v)
#endif
#ifndef __ALIGNED
#warning No compiler specific solution for __ALIGNED. __ALIGNED is ignored.
#define __ALIGNED(x)
#endif
#else #else

View File

@ -1,8 +1,8 @@
/**************************************************************************//** /**************************************************************************//**
* @file cmsis_gcc.h * @file cmsis_gcc.h
* @brief CMSIS compiler GCC header file * @brief CMSIS compiler GCC header file
* @version V5.0.1 * @version V5.0.2
* @date 02. February 2017 * @date 13. February 2017
******************************************************************************/ ******************************************************************************/
/* /*
* Copyright (c) 2009-2017 ARM Limited. All rights reserved. * Copyright (c) 2009-2017 ARM Limited. All rights reserved.
@ -50,23 +50,55 @@
#ifndef __WEAK #ifndef __WEAK
#define __WEAK __attribute__((weak)) #define __WEAK __attribute__((weak))
#endif #endif
#ifndef __UNALIGNED_UINT32
#pragma GCC diagnostic push
#pragma GCC diagnostic ignored "-Wpacked"
#pragma GCC diagnostic ignored "-Wattributes"
struct __attribute__((packed)) T_UINT32 { uint32_t v; };
#pragma GCC diagnostic pop
#define __UNALIGNED_UINT32(x) (((struct T_UINT32 *)(x))->v)
#endif
#ifndef __ALIGNED
#define __ALIGNED(x) __attribute__((aligned(x)))
#endif
#ifndef __PACKED #ifndef __PACKED
#define __PACKED __attribute__((packed, aligned(1))) #define __PACKED __attribute__((packed, aligned(1)))
#endif #endif
#ifndef __PACKED_STRUCT #ifndef __PACKED_STRUCT
#define __PACKED_STRUCT struct __attribute__((packed, aligned(1))) #define __PACKED_STRUCT struct __attribute__((packed, aligned(1)))
#endif #endif
#ifndef __UNALIGNED_UINT32 /* deprecated */
#pragma GCC diagnostic push
#pragma GCC diagnostic ignored "-Wpacked"
#pragma GCC diagnostic ignored "-Wattributes"
struct __attribute__((packed)) T_UINT32 { uint32_t v; };
#pragma GCC diagnostic pop
#define __UNALIGNED_UINT32(x) (((struct T_UINT32 *)(x))->v)
#endif
#ifndef __UNALIGNED_UINT16_WRITE
#pragma GCC diagnostic push
#pragma GCC diagnostic ignored "-Wpacked"
#pragma GCC diagnostic ignored "-Wattributes"
__PACKED_STRUCT T_UINT16_WRITE { uint16_t v; };
#pragma GCC diagnostic pop
#define __UNALIGNED_UINT16_WRITE(addr, val) (void)((((struct T_UINT16_WRITE *)(void *)(addr))->v) = (val))
#endif
#ifndef __UNALIGNED_UINT16_READ
#pragma GCC diagnostic push
#pragma GCC diagnostic ignored "-Wpacked"
#pragma GCC diagnostic ignored "-Wattributes"
__PACKED_STRUCT T_UINT16_READ { uint16_t v; };
#pragma GCC diagnostic pop
#define __UNALIGNED_UINT16_READ(addr) (((const struct T_UINT16_READ *)(const void *)(addr))->v)
#endif
#ifndef __UNALIGNED_UINT32_WRITE
#pragma GCC diagnostic push
#pragma GCC diagnostic ignored "-Wpacked"
#pragma GCC diagnostic ignored "-Wattributes"
__PACKED_STRUCT T_UINT32_WRITE { uint32_t v; };
#pragma GCC diagnostic pop
#define __UNALIGNED_UINT32_WRITE(addr, val) (void)((((struct T_UINT32_WRITE *)(void *)(addr))->v) = (val))
#endif
#ifndef __UNALIGNED_UINT32_READ
#pragma GCC diagnostic push
#pragma GCC diagnostic ignored "-Wpacked"
#pragma GCC diagnostic ignored "-Wattributes"
__PACKED_STRUCT T_UINT32_READ { uint32_t v; };
#pragma GCC diagnostic pop
#define __UNALIGNED_UINT32_READ(addr) (((const struct T_UINT32_READ *)(const void *)(addr))->v)
#endif
#ifndef __ALIGNED
#define __ALIGNED(x) __attribute__((aligned(x)))
#endif
/* ########################### Core Function Access ########################### */ /* ########################### Core Function Access ########################### */
@ -301,6 +333,33 @@ __attribute__((always_inline)) __STATIC_INLINE void __TZ_set_MSP_NS(uint32_t top
#endif #endif
#if (defined (__ARM_FEATURE_CMSE ) && (__ARM_FEATURE_CMSE == 3))
/**
\brief Get Stack Pointer (non-secure)
\details Returns the current value of the non-secure Stack Pointer (SP) when in secure state.
\return SP Register value
*/
__attribute__((always_inline)) __STATIC_INLINE uint32_t __TZ_get_SP_NS(void)
{
register uint32_t result;
__ASM volatile ("MRS %0, sp_ns" : "=r" (result) );
return(result);
}
/**
\brief Set Stack Pointer (non-secure)
\details Assigns the given value to the non-secure Stack Pointer (SP) when in secure state.
\param [in] topOfStack Stack Pointer value to set
*/
__attribute__((always_inline)) __STATIC_INLINE void __TZ_set_SP_NS(uint32_t topOfStack)
{
__ASM volatile ("MSR sp_ns, %0" : : "r" (topOfStack) : );
}
#endif
/** /**
\brief Get Priority Mask \brief Get Priority Mask
\details Returns the current state of the priority mask bit from the Priority Mask Register. \details Returns the current state of the priority mask bit from the Priority Mask Register.

View File

@ -1,11 +1,11 @@
/**************************************************************************//** /**************************************************************************//**
* @file core_armv8mbl.h * @file core_armv8mbl.h
* @brief CMSIS ARMv8MBL Core Peripheral Access Layer Header File * @brief CMSIS ARMv8MBL Core Peripheral Access Layer Header File
* @version V5.0.1 * @version V5.0.2
* @date 25. November 2016 * @date 13. February 2017
******************************************************************************/ ******************************************************************************/
/* /*
* Copyright (c) 2009-2016 ARM Limited. All rights reserved. * Copyright (c) 2009-2017 ARM Limited. All rights reserved.
* *
* SPDX-License-Identifier: Apache-2.0 * SPDX-License-Identifier: Apache-2.0
* *
@ -1224,7 +1224,12 @@ typedef struct
@{ @{
*/ */
#ifndef CMSIS_NVIC_VIRTUAL #ifdef CMSIS_NVIC_VIRTUAL
#ifndef CMSIS_NVIC_VIRTUAL_HEADER_FILE
#define CMSIS_NVIC_VIRTUAL_HEADER_FILE "cmsis_nvic_virtual.h"
#endif
#include CMSIS_NVIC_VIRTUAL_HEADER_FILE
#else
/*#define NVIC_SetPriorityGrouping __NVIC_SetPriorityGrouping not available for ARMv8-M Baseline */ /*#define NVIC_SetPriorityGrouping __NVIC_SetPriorityGrouping not available for ARMv8-M Baseline */
/*#define NVIC_GetPriorityGrouping __NVIC_GetPriorityGrouping not available for ARMv8-M Baseline */ /*#define NVIC_GetPriorityGrouping __NVIC_GetPriorityGrouping not available for ARMv8-M Baseline */
#define NVIC_EnableIRQ __NVIC_EnableIRQ #define NVIC_EnableIRQ __NVIC_EnableIRQ
@ -1236,9 +1241,15 @@ typedef struct
#define NVIC_GetActive __NVIC_GetActive #define NVIC_GetActive __NVIC_GetActive
#define NVIC_SetPriority __NVIC_SetPriority #define NVIC_SetPriority __NVIC_SetPriority
#define NVIC_GetPriority __NVIC_GetPriority #define NVIC_GetPriority __NVIC_GetPriority
#define NVIC_SystemReset __NVIC_SystemReset
#endif /* CMSIS_NVIC_VIRTUAL */ #endif /* CMSIS_NVIC_VIRTUAL */
#ifndef CMSIS_VECTAB_VIRTUAL #ifdef CMSIS_VECTAB_VIRTUAL
#ifndef CMSIS_VECTAB_VIRTUAL_HEADER_FILE
#define CMSIS_VECTAB_VIRTUAL_HEADER_FILE "cmsis_vectab_virtual.h"
#endif
#include CMSIS_VECTAB_VIRTUAL_HEADER_FILE
#else
#define NVIC_SetVector __NVIC_SetVector #define NVIC_SetVector __NVIC_SetVector
#define NVIC_GetVector __NVIC_GetVector #define NVIC_GetVector __NVIC_GetVector
#endif /* (CMSIS_VECTAB_VIRTUAL) */ #endif /* (CMSIS_VECTAB_VIRTUAL) */
@ -1536,7 +1547,7 @@ __STATIC_INLINE uint32_t __NVIC_GetVector(IRQn_Type IRQn)
\brief System Reset \brief System Reset
\details Initiates a system reset request to reset the MCU. \details Initiates a system reset request to reset the MCU.
*/ */
__STATIC_INLINE void NVIC_SystemReset(void) __STATIC_INLINE void __NVIC_SystemReset(void)
{ {
__DSB(); /* Ensure all outstanding memory accesses included __DSB(); /* Ensure all outstanding memory accesses included
buffered write are completed before reset */ buffered write are completed before reset */

View File

@ -2,10 +2,10 @@
* @file core_armv8mml.h * @file core_armv8mml.h
* @brief CMSIS ARMv8MML Core Peripheral Access Layer Header File * @brief CMSIS ARMv8MML Core Peripheral Access Layer Header File
* @version V5.0.2 * @version V5.0.2
* @date 07. December 2016 * @date 13. February 2017
******************************************************************************/ ******************************************************************************/
/* /*
* Copyright (c) 2009-2016 ARM Limited. All rights reserved. * Copyright (c) 2009-2017 ARM Limited. All rights reserved.
* *
* SPDX-License-Identifier: Apache-2.0 * SPDX-License-Identifier: Apache-2.0
* *
@ -2050,7 +2050,12 @@ typedef struct
@{ @{
*/ */
#ifndef CMSIS_NVIC_VIRTUAL #ifdef CMSIS_NVIC_VIRTUAL
#ifndef CMSIS_NVIC_VIRTUAL_HEADER_FILE
#define CMSIS_NVIC_VIRTUAL_HEADER_FILE "cmsis_nvic_virtual.h"
#endif
#include CMSIS_NVIC_VIRTUAL_HEADER_FILE
#else
#define NVIC_SetPriorityGrouping __NVIC_SetPriorityGrouping #define NVIC_SetPriorityGrouping __NVIC_SetPriorityGrouping
#define NVIC_GetPriorityGrouping __NVIC_GetPriorityGrouping #define NVIC_GetPriorityGrouping __NVIC_GetPriorityGrouping
#define NVIC_EnableIRQ __NVIC_EnableIRQ #define NVIC_EnableIRQ __NVIC_EnableIRQ
@ -2062,9 +2067,15 @@ typedef struct
#define NVIC_GetActive __NVIC_GetActive #define NVIC_GetActive __NVIC_GetActive
#define NVIC_SetPriority __NVIC_SetPriority #define NVIC_SetPriority __NVIC_SetPriority
#define NVIC_GetPriority __NVIC_GetPriority #define NVIC_GetPriority __NVIC_GetPriority
#define NVIC_SystemReset __NVIC_SystemReset
#endif /* CMSIS_NVIC_VIRTUAL */ #endif /* CMSIS_NVIC_VIRTUAL */
#ifndef CMSIS_VECTAB_VIRTUAL #ifdef CMSIS_VECTAB_VIRTUAL
#ifndef CMSIS_VECTAB_VIRTUAL_HEADER_FILE
#define CMSIS_VECTAB_VIRTUAL_HEADER_FILE "cmsis_vectab_virtual.h"
#endif
#include CMSIS_VECTAB_VIRTUAL_HEADER_FILE
#else
#define NVIC_SetVector __NVIC_SetVector #define NVIC_SetVector __NVIC_SetVector
#define NVIC_GetVector __NVIC_GetVector #define NVIC_GetVector __NVIC_GetVector
#endif /* (CMSIS_VECTAB_VIRTUAL) */ #endif /* (CMSIS_VECTAB_VIRTUAL) */
@ -2431,7 +2442,7 @@ __STATIC_INLINE uint32_t __NVIC_GetVector(IRQn_Type IRQn)
\brief System Reset \brief System Reset
\details Initiates a system reset request to reset the MCU. \details Initiates a system reset request to reset the MCU.
*/ */
__STATIC_INLINE void NVIC_SystemReset(void) __STATIC_INLINE void __NVIC_SystemReset(void)
{ {
__DSB(); /* Ensure all outstanding memory accesses included __DSB(); /* Ensure all outstanding memory accesses included
buffered write are completed before reset */ buffered write are completed before reset */
@ -2546,6 +2557,10 @@ __STATIC_INLINE uint32_t TZ_NVIC_GetPendingIRQ_NS(IRQn_Type IRQn)
{ {
return((uint32_t)(((NVIC_NS->ISPR[(((uint32_t)(int32_t)IRQn) >> 5UL)] & (1UL << (((uint32_t)(int32_t)IRQn) & 0x1FUL))) != 0UL) ? 1UL : 0UL)); return((uint32_t)(((NVIC_NS->ISPR[(((uint32_t)(int32_t)IRQn) >> 5UL)] & (1UL << (((uint32_t)(int32_t)IRQn) & 0x1FUL))) != 0UL) ? 1UL : 0UL));
} }
else
{
return(0U);
}
} }

View File

@ -1,11 +1,11 @@
/**************************************************************************//** /**************************************************************************//**
* @file core_cm0.h * @file core_cm0.h
* @brief CMSIS Cortex-M0 Core Peripheral Access Layer Header File * @brief CMSIS Cortex-M0 Core Peripheral Access Layer Header File
* @version V5.0.1 * @version V5.0.2
* @date 25. November 2016 * @date 13. February 2017
******************************************************************************/ ******************************************************************************/
/* /*
* Copyright (c) 2009-2016 ARM Limited. All rights reserved. * Copyright (c) 2009-2017 ARM Limited. All rights reserved.
* *
* SPDX-License-Identifier: Apache-2.0 * SPDX-License-Identifier: Apache-2.0
* *
@ -564,7 +564,12 @@ typedef struct
@{ @{
*/ */
#ifndef CMSIS_NVIC_VIRTUAL #ifdef CMSIS_NVIC_VIRTUAL
#ifndef CMSIS_NVIC_VIRTUAL_HEADER_FILE
#define CMSIS_NVIC_VIRTUAL_HEADER_FILE "cmsis_nvic_virtual.h"
#endif
#include CMSIS_NVIC_VIRTUAL_HEADER_FILE
#else
/*#define NVIC_SetPriorityGrouping __NVIC_SetPriorityGrouping not available for Cortex-M0 */ /*#define NVIC_SetPriorityGrouping __NVIC_SetPriorityGrouping not available for Cortex-M0 */
/*#define NVIC_GetPriorityGrouping __NVIC_GetPriorityGrouping not available for Cortex-M0 */ /*#define NVIC_GetPriorityGrouping __NVIC_GetPriorityGrouping not available for Cortex-M0 */
#define NVIC_EnableIRQ __NVIC_EnableIRQ #define NVIC_EnableIRQ __NVIC_EnableIRQ
@ -576,9 +581,15 @@ typedef struct
/*#define NVIC_GetActive __NVIC_GetActive not available for Cortex-M0 */ /*#define NVIC_GetActive __NVIC_GetActive not available for Cortex-M0 */
#define NVIC_SetPriority __NVIC_SetPriority #define NVIC_SetPriority __NVIC_SetPriority
#define NVIC_GetPriority __NVIC_GetPriority #define NVIC_GetPriority __NVIC_GetPriority
#define NVIC_SystemReset __NVIC_SystemReset
#endif /* CMSIS_NVIC_VIRTUAL */ #endif /* CMSIS_NVIC_VIRTUAL */
#ifndef CMSIS_VECTAB_VIRTUAL #ifdef CMSIS_VECTAB_VIRTUAL
#ifndef CMSIS_VECTAB_VIRTUAL_HEADER_FILE
#define CMSIS_VECTAB_VIRTUAL_HEADER_FILE "cmsis_vectab_virtual.h"
#endif
#include CMSIS_VECTAB_VIRTUAL_HEADER_FILE
#else
#define NVIC_SetVector __NVIC_SetVector #define NVIC_SetVector __NVIC_SetVector
#define NVIC_GetVector __NVIC_GetVector #define NVIC_GetVector __NVIC_GetVector
#endif /* (CMSIS_VECTAB_VIRTUAL) */ #endif /* (CMSIS_VECTAB_VIRTUAL) */
@ -779,7 +790,7 @@ __STATIC_INLINE uint32_t __NVIC_GetVector(IRQn_Type IRQn)
\brief System Reset \brief System Reset
\details Initiates a system reset request to reset the MCU. \details Initiates a system reset request to reset the MCU.
*/ */
__STATIC_INLINE void NVIC_SystemReset(void) __STATIC_INLINE void __NVIC_SystemReset(void)
{ {
__DSB(); /* Ensure all outstanding memory accesses included __DSB(); /* Ensure all outstanding memory accesses included
buffered write are completed before reset */ buffered write are completed before reset */

View File

@ -1,11 +1,11 @@
/**************************************************************************//** /**************************************************************************//**
* @file core_cm0plus.h * @file core_cm0plus.h
* @brief CMSIS Cortex-M0+ Core Peripheral Access Layer Header File * @brief CMSIS Cortex-M0+ Core Peripheral Access Layer Header File
* @version V5.0.1 * @version V5.0.2
* @date 25. November 2016 * @date 13. February 2017
******************************************************************************/ ******************************************************************************/
/* /*
* Copyright (c) 2009-2016 ARM Limited. All rights reserved. * Copyright (c) 2009-2017 ARM Limited. All rights reserved.
* *
* SPDX-License-Identifier: Apache-2.0 * SPDX-License-Identifier: Apache-2.0
* *
@ -680,7 +680,12 @@ typedef struct
@{ @{
*/ */
#ifndef CMSIS_NVIC_VIRTUAL #ifdef CMSIS_NVIC_VIRTUAL
#ifndef CMSIS_NVIC_VIRTUAL_HEADER_FILE
#define CMSIS_NVIC_VIRTUAL_HEADER_FILE "cmsis_nvic_virtual.h"
#endif
#include CMSIS_NVIC_VIRTUAL_HEADER_FILE
#else
/*#define NVIC_SetPriorityGrouping __NVIC_SetPriorityGrouping not available for Cortex-M0+ */ /*#define NVIC_SetPriorityGrouping __NVIC_SetPriorityGrouping not available for Cortex-M0+ */
/*#define NVIC_GetPriorityGrouping __NVIC_GetPriorityGrouping not available for Cortex-M0+ */ /*#define NVIC_GetPriorityGrouping __NVIC_GetPriorityGrouping not available for Cortex-M0+ */
#define NVIC_EnableIRQ __NVIC_EnableIRQ #define NVIC_EnableIRQ __NVIC_EnableIRQ
@ -692,9 +697,15 @@ typedef struct
/*#define NVIC_GetActive __NVIC_GetActive not available for Cortex-M0+ */ /*#define NVIC_GetActive __NVIC_GetActive not available for Cortex-M0+ */
#define NVIC_SetPriority __NVIC_SetPriority #define NVIC_SetPriority __NVIC_SetPriority
#define NVIC_GetPriority __NVIC_GetPriority #define NVIC_GetPriority __NVIC_GetPriority
#define NVIC_SystemReset __NVIC_SystemReset
#endif /* CMSIS_NVIC_VIRTUAL */ #endif /* CMSIS_NVIC_VIRTUAL */
#ifndef CMSIS_VECTAB_VIRTUAL #ifdef CMSIS_VECTAB_VIRTUAL
#ifndef CMSIS_VECTAB_VIRTUAL_HEADER_FILE
#define CMSIS_VECTAB_VIRTUAL_HEADER_FILE "cmsis_vectab_virtual.h"
#endif
#include CMSIS_VECTAB_VIRTUAL_HEADER_FILE
#else
#define NVIC_SetVector __NVIC_SetVector #define NVIC_SetVector __NVIC_SetVector
#define NVIC_GetVector __NVIC_GetVector #define NVIC_GetVector __NVIC_GetVector
#endif /* (CMSIS_VECTAB_VIRTUAL) */ #endif /* (CMSIS_VECTAB_VIRTUAL) */
@ -905,7 +916,7 @@ __STATIC_INLINE uint32_t __NVIC_GetVector(IRQn_Type IRQn)
\brief System Reset \brief System Reset
\details Initiates a system reset request to reset the MCU. \details Initiates a system reset request to reset the MCU.
*/ */
__STATIC_INLINE void NVIC_SystemReset(void) __STATIC_INLINE void __NVIC_SystemReset(void)
{ {
__DSB(); /* Ensure all outstanding memory accesses included __DSB(); /* Ensure all outstanding memory accesses included
buffered write are completed before reset */ buffered write are completed before reset */

View File

@ -1,11 +1,11 @@
/**************************************************************************//** /**************************************************************************//**
* @file core_cm23.h * @file core_cm23.h
* @brief CMSIS Cortex-M23 Core Peripheral Access Layer Header File * @brief CMSIS Cortex-M23 Core Peripheral Access Layer Header File
* @version V5.0.1 * @version V5.0.2
* @date 25. November 2016 * @date 13. February 2017
******************************************************************************/ ******************************************************************************/
/* /*
* Copyright (c) 2009-2016 ARM Limited. All rights reserved. * Copyright (c) 2009-2017 ARM Limited. All rights reserved.
* *
* SPDX-License-Identifier: Apache-2.0 * SPDX-License-Identifier: Apache-2.0
* *
@ -1224,7 +1224,12 @@ typedef struct
@{ @{
*/ */
#ifndef CMSIS_NVIC_VIRTUAL #ifdef CMSIS_NVIC_VIRTUAL
#ifndef CMSIS_NVIC_VIRTUAL_HEADER_FILE
#define CMSIS_NVIC_VIRTUAL_HEADER_FILE "cmsis_nvic_virtual.h"
#endif
#include CMSIS_NVIC_VIRTUAL_HEADER_FILE
#else
/*#define NVIC_SetPriorityGrouping __NVIC_SetPriorityGrouping not available for Cortex-M23 */ /*#define NVIC_SetPriorityGrouping __NVIC_SetPriorityGrouping not available for Cortex-M23 */
/*#define NVIC_GetPriorityGrouping __NVIC_GetPriorityGrouping not available for Cortex-M23 */ /*#define NVIC_GetPriorityGrouping __NVIC_GetPriorityGrouping not available for Cortex-M23 */
#define NVIC_EnableIRQ __NVIC_EnableIRQ #define NVIC_EnableIRQ __NVIC_EnableIRQ
@ -1236,9 +1241,15 @@ typedef struct
#define NVIC_GetActive __NVIC_GetActive #define NVIC_GetActive __NVIC_GetActive
#define NVIC_SetPriority __NVIC_SetPriority #define NVIC_SetPriority __NVIC_SetPriority
#define NVIC_GetPriority __NVIC_GetPriority #define NVIC_GetPriority __NVIC_GetPriority
#define NVIC_SystemReset __NVIC_SystemReset
#endif /* CMSIS_NVIC_VIRTUAL */ #endif /* CMSIS_NVIC_VIRTUAL */
#ifndef CMSIS_VECTAB_VIRTUAL #ifdef CMSIS_VECTAB_VIRTUAL
#ifndef CMSIS_VECTAB_VIRTUAL_HEADER_FILE
#define CMSIS_VECTAB_VIRTUAL_HEADER_FILE "cmsis_vectab_virtual.h"
#endif
#include CMSIS_VECTAB_VIRTUAL_HEADER_FILE
#else
#define NVIC_SetVector __NVIC_SetVector #define NVIC_SetVector __NVIC_SetVector
#define NVIC_GetVector __NVIC_GetVector #define NVIC_GetVector __NVIC_GetVector
#endif /* (CMSIS_VECTAB_VIRTUAL) */ #endif /* (CMSIS_VECTAB_VIRTUAL) */
@ -1536,7 +1547,7 @@ __STATIC_INLINE uint32_t __NVIC_GetVector(IRQn_Type IRQn)
\brief System Reset \brief System Reset
\details Initiates a system reset request to reset the MCU. \details Initiates a system reset request to reset the MCU.
*/ */
__STATIC_INLINE void NVIC_SystemReset(void) __STATIC_INLINE void __NVIC_SystemReset(void)
{ {
__DSB(); /* Ensure all outstanding memory accesses included __DSB(); /* Ensure all outstanding memory accesses included
buffered write are completed before reset */ buffered write are completed before reset */

View File

@ -1,11 +1,11 @@
/**************************************************************************//** /**************************************************************************//**
* @file core_cm3.h * @file core_cm3.h
* @brief CMSIS Cortex-M3 Core Peripheral Access Layer Header File * @brief CMSIS Cortex-M3 Core Peripheral Access Layer Header File
* @version V5.0.1 * @version V5.0.2
* @date 30. January 2017 * @date 13. February 2017
******************************************************************************/ ******************************************************************************/
/* /*
* Copyright (c) 2009-2016 ARM Limited. All rights reserved. * Copyright (c) 2009-2017 ARM Limited. All rights reserved.
* *
* SPDX-License-Identifier: Apache-2.0 * SPDX-License-Identifier: Apache-2.0
* *

View File

@ -2,10 +2,10 @@
* @file core_cm33.h * @file core_cm33.h
* @brief CMSIS Cortex-M33 Core Peripheral Access Layer Header File * @brief CMSIS Cortex-M33 Core Peripheral Access Layer Header File
* @version V5.0.2 * @version V5.0.2
* @date 07. December 2016 * @date 13. February 2017
******************************************************************************/ ******************************************************************************/
/* /*
* Copyright (c) 2009-2016 ARM Limited. All rights reserved. * Copyright (c) 2009-2017 ARM Limited. All rights reserved.
* *
* SPDX-License-Identifier: Apache-2.0 * SPDX-License-Identifier: Apache-2.0
* *
@ -2050,7 +2050,12 @@ typedef struct
@{ @{
*/ */
#ifndef CMSIS_NVIC_VIRTUAL #ifdef CMSIS_NVIC_VIRTUAL
#ifndef CMSIS_NVIC_VIRTUAL_HEADER_FILE
#define CMSIS_NVIC_VIRTUAL_HEADER_FILE "cmsis_nvic_virtual.h"
#endif
#include CMSIS_NVIC_VIRTUAL_HEADER_FILE
#else
#define NVIC_SetPriorityGrouping __NVIC_SetPriorityGrouping #define NVIC_SetPriorityGrouping __NVIC_SetPriorityGrouping
#define NVIC_GetPriorityGrouping __NVIC_GetPriorityGrouping #define NVIC_GetPriorityGrouping __NVIC_GetPriorityGrouping
#define NVIC_EnableIRQ __NVIC_EnableIRQ #define NVIC_EnableIRQ __NVIC_EnableIRQ
@ -2062,9 +2067,15 @@ typedef struct
#define NVIC_GetActive __NVIC_GetActive #define NVIC_GetActive __NVIC_GetActive
#define NVIC_SetPriority __NVIC_SetPriority #define NVIC_SetPriority __NVIC_SetPriority
#define NVIC_GetPriority __NVIC_GetPriority #define NVIC_GetPriority __NVIC_GetPriority
#define NVIC_SystemReset __NVIC_SystemReset
#endif /* CMSIS_NVIC_VIRTUAL */ #endif /* CMSIS_NVIC_VIRTUAL */
#ifndef CMSIS_VECTAB_VIRTUAL #ifdef CMSIS_VECTAB_VIRTUAL
#ifndef CMSIS_VECTAB_VIRTUAL_HEADER_FILE
#define CMSIS_VECTAB_VIRTUAL_HEADER_FILE "cmsis_vectab_virtual.h"
#endif
#include CMSIS_VECTAB_VIRTUAL_HEADER_FILE
#else
#define NVIC_SetVector __NVIC_SetVector #define NVIC_SetVector __NVIC_SetVector
#define NVIC_GetVector __NVIC_GetVector #define NVIC_GetVector __NVIC_GetVector
#endif /* (CMSIS_VECTAB_VIRTUAL) */ #endif /* (CMSIS_VECTAB_VIRTUAL) */
@ -2431,7 +2442,7 @@ __STATIC_INLINE uint32_t __NVIC_GetVector(IRQn_Type IRQn)
\brief System Reset \brief System Reset
\details Initiates a system reset request to reset the MCU. \details Initiates a system reset request to reset the MCU.
*/ */
__STATIC_INLINE void NVIC_SystemReset(void) __STATIC_INLINE void __NVIC_SystemReset(void)
{ {
__DSB(); /* Ensure all outstanding memory accesses included __DSB(); /* Ensure all outstanding memory accesses included
buffered write are completed before reset */ buffered write are completed before reset */

View File

@ -1,11 +1,11 @@
/**************************************************************************//** /**************************************************************************//**
* @file core_cm4.h * @file core_cm4.h
* @brief CMSIS Cortex-M4 Core Peripheral Access Layer Header File * @brief CMSIS Cortex-M4 Core Peripheral Access Layer Header File
* @version V5.0.1 * @version V5.0.2
* @date 30. January 2017 * @date 13. February 2017
******************************************************************************/ ******************************************************************************/
/* /*
* Copyright (c) 2009-2016 ARM Limited. All rights reserved. * Copyright (c) 2009-2017 ARM Limited. All rights reserved.
* *
* SPDX-License-Identifier: Apache-2.0 * SPDX-License-Identifier: Apache-2.0
* *

View File

@ -1,11 +1,11 @@
/**************************************************************************//** /**************************************************************************//**
* @file core_cm7.h * @file core_cm7.h
* @brief CMSIS Cortex-M7 Core Peripheral Access Layer Header File * @brief CMSIS Cortex-M7 Core Peripheral Access Layer Header File
* @version V5.0.1 * @version V5.0.2
* @date 25. November 2016 * @date 13. February 2017
******************************************************************************/ ******************************************************************************/
/* /*
* Copyright (c) 2009-2016 ARM Limited. All rights reserved. * Copyright (c) 2009-2017 ARM Limited. All rights reserved.
* *
* SPDX-License-Identifier: Apache-2.0 * SPDX-License-Identifier: Apache-2.0
* *
@ -1801,7 +1801,12 @@ typedef struct
@{ @{
*/ */
#ifndef CMSIS_NVIC_VIRTUAL #ifdef CMSIS_NVIC_VIRTUAL
#ifndef CMSIS_NVIC_VIRTUAL_HEADER_FILE
#define CMSIS_NVIC_VIRTUAL_HEADER_FILE "cmsis_nvic_virtual.h"
#endif
#include CMSIS_NVIC_VIRTUAL_HEADER_FILE
#else
#define NVIC_SetPriorityGrouping __NVIC_SetPriorityGrouping #define NVIC_SetPriorityGrouping __NVIC_SetPriorityGrouping
#define NVIC_GetPriorityGrouping __NVIC_GetPriorityGrouping #define NVIC_GetPriorityGrouping __NVIC_GetPriorityGrouping
#define NVIC_EnableIRQ __NVIC_EnableIRQ #define NVIC_EnableIRQ __NVIC_EnableIRQ
@ -1813,9 +1818,15 @@ typedef struct
#define NVIC_GetActive __NVIC_GetActive #define NVIC_GetActive __NVIC_GetActive
#define NVIC_SetPriority __NVIC_SetPriority #define NVIC_SetPriority __NVIC_SetPriority
#define NVIC_GetPriority __NVIC_GetPriority #define NVIC_GetPriority __NVIC_GetPriority
#define NVIC_SystemReset __NVIC_SystemReset
#endif /* CMSIS_NVIC_VIRTUAL */ #endif /* CMSIS_NVIC_VIRTUAL */
#ifndef CMSIS_VECTAB_VIRTUAL #ifdef CMSIS_VECTAB_VIRTUAL
#ifndef CMSIS_VECTAB_VIRTUAL_HEADER_FILE
#define CMSIS_VECTAB_VIRTUAL_HEADER_FILE "cmsis_vectab_virtual.h"
#endif
#include CMSIS_VECTAB_VIRTUAL_HEADER_FILE
#else
#define NVIC_SetVector __NVIC_SetVector #define NVIC_SetVector __NVIC_SetVector
#define NVIC_GetVector __NVIC_GetVector #define NVIC_GetVector __NVIC_GetVector
#endif /* (CMSIS_VECTAB_VIRTUAL) */ #endif /* (CMSIS_VECTAB_VIRTUAL) */
@ -2115,7 +2126,7 @@ __STATIC_INLINE uint32_t __NVIC_GetVector(IRQn_Type IRQn)
\brief System Reset \brief System Reset
\details Initiates a system reset request to reset the MCU. \details Initiates a system reset request to reset the MCU.
*/ */
__STATIC_INLINE void NVIC_SystemReset(void) __STATIC_INLINE void __NVIC_SystemReset(void)
{ {
__DSB(); /* Ensure all outstanding memory accesses included __DSB(); /* Ensure all outstanding memory accesses included
buffered write are completed before reset */ buffered write are completed before reset */

View File

@ -1,11 +1,11 @@
/**************************************************************************//** /**************************************************************************//**
* @file core_sc000.h * @file core_sc000.h
* @brief CMSIS SC000 Core Peripheral Access Layer Header File * @brief CMSIS SC000 Core Peripheral Access Layer Header File
* @version V5.0.1 * @version V5.0.2
* @date 25. November 2016 * @date 13. February 2017
******************************************************************************/ ******************************************************************************/
/* /*
* Copyright (c) 2009-2016 ARM Limited. All rights reserved. * Copyright (c) 2009-2017 ARM Limited. All rights reserved.
* *
* SPDX-License-Identifier: Apache-2.0 * SPDX-License-Identifier: Apache-2.0
* *
@ -692,7 +692,12 @@ typedef struct
@{ @{
*/ */
#ifndef CMSIS_NVIC_VIRTUAL #ifdef CMSIS_NVIC_VIRTUAL
#ifndef CMSIS_NVIC_VIRTUAL_HEADER_FILE
#define CMSIS_NVIC_VIRTUAL_HEADER_FILE "cmsis_nvic_virtual.h"
#endif
#include CMSIS_NVIC_VIRTUAL_HEADER_FILE
#else
/*#define NVIC_SetPriorityGrouping __NVIC_SetPriorityGrouping not available for SC000 */ /*#define NVIC_SetPriorityGrouping __NVIC_SetPriorityGrouping not available for SC000 */
/*#define NVIC_GetPriorityGrouping __NVIC_GetPriorityGrouping not available for SC000 */ /*#define NVIC_GetPriorityGrouping __NVIC_GetPriorityGrouping not available for SC000 */
#define NVIC_EnableIRQ __NVIC_EnableIRQ #define NVIC_EnableIRQ __NVIC_EnableIRQ
@ -704,9 +709,15 @@ typedef struct
/*#define NVIC_GetActive __NVIC_GetActive not available for SC000 */ /*#define NVIC_GetActive __NVIC_GetActive not available for SC000 */
#define NVIC_SetPriority __NVIC_SetPriority #define NVIC_SetPriority __NVIC_SetPriority
#define NVIC_GetPriority __NVIC_GetPriority #define NVIC_GetPriority __NVIC_GetPriority
#define NVIC_SystemReset __NVIC_SystemReset
#endif /* CMSIS_NVIC_VIRTUAL */ #endif /* CMSIS_NVIC_VIRTUAL */
#ifndef CMSIS_VECTAB_VIRTUAL #ifdef CMSIS_VECTAB_VIRTUAL
#ifndef CMSIS_VECTAB_VIRTUAL_HEADER_FILE
#define CMSIS_VECTAB_VIRTUAL_HEADER_FILE "cmsis_vectab_virtual.h"
#endif
#include CMSIS_VECTAB_VIRTUAL_HEADER_FILE
#else
#define NVIC_SetVector __NVIC_SetVector #define NVIC_SetVector __NVIC_SetVector
#define NVIC_GetVector __NVIC_GetVector #define NVIC_GetVector __NVIC_GetVector
#endif /* (CMSIS_VECTAB_VIRTUAL) */ #endif /* (CMSIS_VECTAB_VIRTUAL) */
@ -907,7 +918,7 @@ __STATIC_INLINE uint32_t __NVIC_GetVector(IRQn_Type IRQn)
\brief System Reset \brief System Reset
\details Initiates a system reset request to reset the MCU. \details Initiates a system reset request to reset the MCU.
*/ */
__STATIC_INLINE void NVIC_SystemReset(void) __STATIC_INLINE void __NVIC_SystemReset(void)
{ {
__DSB(); /* Ensure all outstanding memory accesses included __DSB(); /* Ensure all outstanding memory accesses included
buffered write are completed before reset */ buffered write are completed before reset */

View File

@ -1,11 +1,11 @@
/**************************************************************************//** /**************************************************************************//**
* @file core_sc300.h * @file core_sc300.h
* @brief CMSIS SC300 Core Peripheral Access Layer Header File * @brief CMSIS SC300 Core Peripheral Access Layer Header File
* @version V5.0.1 * @version V5.0.2
* @date 25. November 2016 * @date 13. February 2017
******************************************************************************/ ******************************************************************************/
/* /*
* Copyright (c) 2009-2016 ARM Limited. All rights reserved. * Copyright (c) 2009-2017 ARM Limited. All rights reserved.
* *
* SPDX-License-Identifier: Apache-2.0 * SPDX-License-Identifier: Apache-2.0
* *
@ -1401,7 +1401,12 @@ typedef struct
@{ @{
*/ */
#ifndef CMSIS_NVIC_VIRTUAL #ifdef CMSIS_NVIC_VIRTUAL
#ifndef CMSIS_NVIC_VIRTUAL_HEADER_FILE
#define CMSIS_NVIC_VIRTUAL_HEADER_FILE "cmsis_nvic_virtual.h"
#endif
#include CMSIS_NVIC_VIRTUAL_HEADER_FILE
#else
#define NVIC_SetPriorityGrouping __NVIC_SetPriorityGrouping #define NVIC_SetPriorityGrouping __NVIC_SetPriorityGrouping
#define NVIC_GetPriorityGrouping __NVIC_GetPriorityGrouping #define NVIC_GetPriorityGrouping __NVIC_GetPriorityGrouping
#define NVIC_EnableIRQ __NVIC_EnableIRQ #define NVIC_EnableIRQ __NVIC_EnableIRQ
@ -1413,9 +1418,15 @@ typedef struct
#define NVIC_GetActive __NVIC_GetActive #define NVIC_GetActive __NVIC_GetActive
#define NVIC_SetPriority __NVIC_SetPriority #define NVIC_SetPriority __NVIC_SetPriority
#define NVIC_GetPriority __NVIC_GetPriority #define NVIC_GetPriority __NVIC_GetPriority
#define NVIC_SystemReset __NVIC_SystemReset
#endif /* CMSIS_NVIC_VIRTUAL */ #endif /* CMSIS_NVIC_VIRTUAL */
#ifndef CMSIS_VECTAB_VIRTUAL #ifdef CMSIS_VECTAB_VIRTUAL
#ifndef CMSIS_VECTAB_VIRTUAL_HEADER_FILE
#define CMSIS_VECTAB_VIRTUAL_HEADER_FILE "cmsis_vectab_virtual.h"
#endif
#include CMSIS_VECTAB_VIRTUAL_HEADER_FILE
#else
#define NVIC_SetVector __NVIC_SetVector #define NVIC_SetVector __NVIC_SetVector
#define NVIC_GetVector __NVIC_GetVector #define NVIC_GetVector __NVIC_GetVector
#endif /* (CMSIS_VECTAB_VIRTUAL) */ #endif /* (CMSIS_VECTAB_VIRTUAL) */
@ -1715,7 +1726,7 @@ __STATIC_INLINE uint32_t __NVIC_GetVector(IRQn_Type IRQn)
\brief System Reset \brief System Reset
\details Initiates a system reset request to reset the MCU. \details Initiates a system reset request to reset the MCU.
*/ */
__STATIC_INLINE void NVIC_SystemReset(void) __STATIC_INLINE void __NVIC_SystemReset(void)
{ {
__DSB(); /* Ensure all outstanding memory accesses included __DSB(); /* Ensure all outstanding memory accesses included
buffered write are completed before reset */ buffered write are completed before reset */

View File

@ -1,7 +1,7 @@
About CMSIS About CMSIS
=========== ===========
This folder contains the Cortex Microcontroller Software Interface Standard This folder contains the Cortex Microcontroller Software Interface Standard
(CMSIS) V5.0.1, which provides a single standard across all Cortex-Mx (CMSIS) V5.0.2, which provides a single standard across all Cortex-Mx
processor series vendors. It enables code re-use and code sharing across processor series vendors. It enables code re-use and code sharing across
software projects and reduces time-to-market for new embedded applications. software projects and reduces time-to-market for new embedded applications.

View File

@ -28,7 +28,7 @@
* along with this program. If not, see <http://www.gnu.org/licenses/>. * along with this program. If not, see <http://www.gnu.org/licenses/>.
* *
* Contact information: * Contact information:
* Web : http://www.state-machine.com * Web : https://state-machine.com
* Email: info@state-machine.com * Email: info@state-machine.com
*****************************************************************************/ *****************************************************************************/
#include <stdint.h> #include <stdint.h>

View File

@ -27,7 +27,7 @@
; along with this program. If not, see <http://www.gnu.org/licenses/>. ; along with this program. If not, see <http://www.gnu.org/licenses/>.
; ;
; Contact information: ; Contact information:
; Web: http://www.state-machine.com ; Web: https://state-machine.com
; Email: info@state-machine.com ; Email: info@state-machine.com
;----------------------------------------------------------------------------- ;-----------------------------------------------------------------------------

View File

@ -29,7 +29,7 @@
* *
* Contact information: * Contact information:
* Quantum Leaps Web sites: http://www.quantum-leaps.com * Quantum Leaps Web sites: http://www.quantum-leaps.com
* http://www.state-machine.com * https://state-machine.com
* e-mail: info@quantum-leaps.com * e-mail: info@quantum-leaps.com
*****************************************************************************/ *****************************************************************************/
#ifndef eth_driver_h #ifndef eth_driver_h

View File

@ -1,6 +1,6 @@
Important - Read carefully: Important - Read carefully:
This license is a legal agreement between YOU (either an individual or a single entity) and SEGGER Microcontroller Systeme GmbH & Co. KG (called SEGGER). This license is a legal agreement between YOU (either an individual or a single entity) and SEGGER Microcontroller GmbH & Co. KG (called SEGGER).
By downloading and/or using the starterkit software, you agree to be bound by the terms of this agreement. By downloading and/or using the starterkit software, you agree to be bound by the terms of this agreement.
1. Content of contract 1. Content of contract
@ -53,4 +53,4 @@ The product is not fault-tolerant and is not designed, manufactured or intended
(g) The relationship between Licensor and Licensee is that of independent contractors and neither Licensee nor its agents shall have any authority to bind Licensor in any way. (g) The relationship between Licensor and Licensee is that of independent contractors and neither Licensee nor its agents shall have any authority to bind Licensor in any way.
(h) If any SEGGER Microcontroller Systeme GmbH & Co. KG professional services are being provided, then such professional services are provided pursuant to the terms of a separate professional services agreement between the parties. The parties acknowledge that such services are acquired independently of the product licensed hereunder, and that provision of such services is not essential to the functionality of such product. (h) If any SEGGER Microcontroller Systeme GmbH & Co. KG professional services are being provided, then such professional services are provided pursuant to the terms of a separate professional services agreement between the parties. The parties acknowledge that such services are acquired independently of the product licensed hereunder, and that provision of such services is not essential to the functionality of such product.
<EFBFBD> 2004-2013 SEGGER Microcontroller GmbH & Co. KG <EFBFBD> 2004-2017 SEGGER Microcontroller GmbH & Co. KG

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@ -1,17 +1,16 @@
/********************************************************************* /*********************************************************************
* SEGGER MICROCONTROLLER GmbH & Co KG * * SEGGER Microcontroller GmbH & Co. KG *
* Solutions for real time microcontroller applications * * The Embedded Experts *
********************************************************************** **********************************************************************
* * * *
* (c) 1995 - 2014 SEGGER Microcontroller GmbH & Co KG * * (c) 1995 - 2017 SEGGER Microcontroller GmbH & Co. KG *
* * * *
* www.segger.com Support: support@segger.com * * Internet: segger.com Support: support_embos@segger.com *
* * * *
********************************************************************** **********************************************************************
* * * *
* embOS * Real time operating system for microcontrollers * * embOS * Real time operating system for microcontrollers *
* * * *
* *
* Please note: * * Please note: *
* * * *
* Knowledge of this file may under no circumstances * * Knowledge of this file may under no circumstances *
@ -22,7 +21,7 @@
* * * *
********************************************************************** **********************************************************************
* * * *
* OS version: 4.00 * * OS version: 4.34.1 *
* * * *
********************************************************************** **********************************************************************
@ -32,7 +31,7 @@ Purpose : BSP (Board support package)
-------- END-OF-HEADER --------------------------------------------- -------- END-OF-HEADER ---------------------------------------------
*/ */
#ifndef BSP_H /* avoid multiple inclusion */ #ifndef BSP_H /* Avoid multiple inclusion */
#define BSP_H #define BSP_H
/********************************************************************* /*********************************************************************
@ -41,12 +40,6 @@ Purpose : BSP (Board support package)
* *
********************************************************************** **********************************************************************
*/ */
#define KEY_STAT_UP (1 << 0)
#define KEY_STAT_DOWN (1 << 1)
#define KEY_STAT_LEFT (1 << 2)
#define KEY_STAT_RIGHT (1 << 3)
#define KEY_STAT_BUTTON1 (1 << 4)
#define KEY_STAT_BUTTON2 (1 << 5)
/* In order to avoid warnings for undefined parameters */ /* In order to avoid warnings for undefined parameters */
#ifndef BSP_USE_PARA #ifndef BSP_USE_PARA
@ -59,7 +52,7 @@ Purpose : BSP (Board support package)
/********************************************************************* /*********************************************************************
* *
* Functions * Prototypes
* *
********************************************************************** **********************************************************************
*/ */
@ -75,58 +68,12 @@ extern "C" {
void BSP_Init (void); void BSP_Init (void);
void BSP_SetLED (int Index); void BSP_SetLED (int Index);
void BSP_ClrLED (int Index); void BSP_ClrLED (int Index);
void BSP_ToggleLED (int Index); void BSP_ToggleLED(int Index);
unsigned BSP_GetKeyStat (void);
/*********************************************************************
*
* GUI
*/
void BSP_GUI_Init(void);
/*********************************************************************
*
* USB
*/
void BSP_USB_Attach (void);
void BSP_USB_InstallISR (void (*pfISR)(void));
void BSP_USB_InstallISR_Ex (int ISRIndex, void (*pfISR)(void), int Prio);
void BSP_USB_ISR_Handler (void);
/*********************************************************************
*
* USBH
*/
void BSP_USBH_InstallISR (void (*pfISR)(void));
void BSP_USBH_Init (void);
/*********************************************************************
*
* ETH
*
* Functions for ethernet controllers (as far as present)
*/
void BSP_ETH_Init (unsigned Unit);
void BSP_ETH_InstallISR (void (*pfISR)(void));
void BSP_ETH_InstallISR_Ex (int ISRIndex, void (*pfISR)(void), int Prio);
void BSP_ETH_ISR_Handler (void);
/*********************************************************************
*
* CACHE
*/
void BSP_CACHE_CleanInvalidateRange (void * p, unsigned NumBytes);
void BSP_CACHE_CleanRange (void * p, unsigned NumBytes);
void BSP_CACHE_InvalidateRange (void * p, unsigned NumBytes);
/********************************************************************/
#ifdef __cplusplus #ifdef __cplusplus
} }
#endif #endif
/********************************************************************/
#endif /* avoid multiple inclusion */ #endif /* avoid multiple inclusion */
/****** End Of File *************************************************/ /****** End Of File *************************************************/

View File

@ -1,17 +1,16 @@
/********************************************************************* /*********************************************************************
* SEGGER MICROCONTROLLER GmbH & Co KG * * SEGGER Microcontroller GmbH & Co. KG *
* Solutions for real time microcontroller applications * * The Embedded Experts *
********************************************************************** **********************************************************************
* * * *
* (c) 1995 - 2014 SEGGER Microcontroller GmbH & Co KG * * (c) 1995 - 2017 SEGGER Microcontroller GmbH & Co. KG *
* * * *
* www.segger.com Support: support@segger.com * * Internet: segger.com Support: support_embos@segger.com *
* * * *
********************************************************************** **********************************************************************
* * * *
* embOS * Real time operating system for microcontrollers * * embOS * Real time operating system for microcontrollers *
* * * *
* *
* Please note: * * Please note: *
* * * *
* Knowledge of this file may under no circumstances * * Knowledge of this file may under no circumstances *
@ -22,7 +21,7 @@
* * * *
********************************************************************** **********************************************************************
* * * *
* OS version: 4.00 * * OS version: 4.34.1 *
* * * *
********************************************************************** **********************************************************************
@ -35,12 +34,20 @@ Purpose : Header file for J-Link ARM communication using memory
#ifndef JLINKMEM_H #ifndef JLINKMEM_H
#define JLINKMEM_H // Avoid multiple inclusion #define JLINKMEM_H // Avoid multiple inclusion
#ifdef __cplusplus
extern "C" {
#endif
void JLINKMEM_Process(void); void JLINKMEM_Process(void);
void JLINKMEM_SetpfOnRx(void (* pf)(unsigned char Data)); void JLINKMEM_SetpfOnRx(void (* pf)(unsigned char Data));
void JLINKMEM_SetpfOnTx(void (* pf)(void)); void JLINKMEM_SetpfOnTx(void (* pf)(void));
void JLINKMEM_SetpfGetNextChar(OS_INT (* pf)(void)); void JLINKMEM_SetpfGetNextChar(OS_INT (* pf)(void));
void JLINKMEM_SendChar(unsigned char Data); void JLINKMEM_SendChar(unsigned char Data);
#ifdef __cplusplus
}
#endif
#endif // Avoid multiple inclusion #endif // Avoid multiple inclusion
/*************************** end of file ****************************/ /*************************** end of file ****************************/

View File

@ -1,17 +1,16 @@
/********************************************************************* /*********************************************************************
* SEGGER MICROCONTROLLER GmbH & Co KG * * SEGGER Microcontroller GmbH & Co. KG *
* Solutions for real time microcontroller applications * * The Embedded Experts *
********************************************************************** **********************************************************************
* * * *
* (c) 1995 - 2014 SEGGER Microcontroller GmbH & Co KG * * (c) 1995 - 2017 SEGGER Microcontroller GmbH & Co. KG *
* * * *
* www.segger.com Support: support@segger.com * * Internet: segger.com Support: support_embos@segger.com *
* * * *
********************************************************************** **********************************************************************
* * * *
* embOS * Real time operating system for microcontrollers * * embOS * Real time operating system for microcontrollers *
* * * *
* *
* Please note: * * Please note: *
* * * *
* Knowledge of this file may under no circumstances * * Knowledge of this file may under no circumstances *
@ -22,13 +21,13 @@
* * * *
********************************************************************** **********************************************************************
* * * *
* OS version: 4.00 * * OS version: 4.34.1 *
* * * *
********************************************************************** **********************************************************************
---------------------------------------------------------------------- ----------------------------------------------------------------------
File : OS_Config.h File : OS_Config.h
Purpose : Configuration settings for the OS build and OS_VIEW Purpose : Configuration settings for the OS build and embOSView
-------- END-OF-HEADER --------------------------------------------- -------- END-OF-HEADER ---------------------------------------------
*/ */
@ -43,14 +42,14 @@ Purpose : Configuration settings for the OS build and OS_VIEW
*/ */
#ifndef DEBUG // Should be overwritten by project settings #ifndef DEBUG // Should be overwritten by project settings
#define DEBUG (0) // in debug builds #define DEBUG (0) // in debug configurations
#endif #endif
/********************************************************************* /*********************************************************************
* *
* Configuration for RTOS build and UART * Configuration for RTOS build and embOSView communication
* *
* One of the following builds needs to be selected for both DEBUG and Release builds: * One of the following builds needs to be selected for both Debug and Release configuration:
* *
* OS_LIBMODE_XR Extremely small release build without Round robin * OS_LIBMODE_XR Extremely small release build without Round robin
* OS_LIBMODE_R Release build * OS_LIBMODE_R Release build
@ -65,7 +64,7 @@ Purpose : Configuration settings for the OS build and OS_VIEW
#define OS_LIBMODE_DP #define OS_LIBMODE_DP
#else #else
#define OS_LIBMODE_R #define OS_LIBMODE_R
#define OS_VIEW_ENABLE (0) #define OS_VIEW_IFSELECT OS_VIEW_DISABLED // embOSView communication is disabled per default in release configuration
#endif #endif
/********************************************************************/ /********************************************************************/

File diff suppressed because it is too large Load Diff

View File

@ -5,7 +5,7 @@
#--------------------------------------------------------------------------- #---------------------------------------------------------------------------
DOXYFILE_ENCODING = UTF-8 DOXYFILE_ENCODING = UTF-8
PROJECT_NAME = "QP/C" PROJECT_NAME = "QP/C"
PROJECT_NUMBER = "5.8.2" PROJECT_NUMBER = "5.9.0"
PROJECT_BRIEF = PROJECT_BRIEF =
PROJECT_LOGO = images/header_logo_ql.png PROJECT_LOGO = images/header_logo_ql.png
OUTPUT_DIRECTORY = OUTPUT_DIRECTORY =
@ -191,10 +191,10 @@ IGNORE_PREFIX =
GENERATE_HTML = YES GENERATE_HTML = YES
HTML_OUTPUT = ../../html/qpc HTML_OUTPUT = ../../html/qpc
HTML_FILE_EXTENSION = .html HTML_FILE_EXTENSION = .html
HTML_HEADER = ../../doxygen/header.html HTML_HEADER = ../../html/header.html
HTML_FOOTER = ../../doxygen/footer.html HTML_FOOTER = ../../html/footer.html
HTML_STYLESHEET = HTML_STYLESHEET =
HTML_EXTRA_STYLESHEET = ../../doxygen/ql.css HTML_EXTRA_STYLESHEET = ../../html/ql.css
HTML_EXTRA_FILES = HTML_EXTRA_FILES =
HTML_COLORSTYLE_HUE = 220 HTML_COLORSTYLE_HUE = 220
HTML_COLORSTYLE_SAT = 100 HTML_COLORSTYLE_SAT = 100

View File

@ -5,7 +5,7 @@
#--------------------------------------------------------------------------- #---------------------------------------------------------------------------
DOXYFILE_ENCODING = UTF-8 DOXYFILE_ENCODING = UTF-8
PROJECT_NAME = "QP/C" PROJECT_NAME = "QP/C"
PROJECT_NUMBER = "5.8.2" PROJECT_NUMBER = "5.9.0"
PROJECT_BRIEF = PROJECT_BRIEF =
PROJECT_LOGO = images/header_logo_ql.png PROJECT_LOGO = images/header_logo_ql.png
OUTPUT_DIRECTORY = OUTPUT_DIRECTORY =
@ -191,10 +191,10 @@ IGNORE_PREFIX =
GENERATE_HTML = YES GENERATE_HTML = YES
HTML_OUTPUT = tmp HTML_OUTPUT = tmp
HTML_FILE_EXTENSION = .html HTML_FILE_EXTENSION = .html
HTML_HEADER = ../../doxygen/header.html HTML_HEADER = ../../html/header.html
HTML_FOOTER = ../../doxygen/footer.html HTML_FOOTER = ../../html/footer.html
HTML_STYLESHEET = HTML_STYLESHEET =
HTML_EXTRA_STYLESHEET = ../../doxygen/ql.css HTML_EXTRA_STYLESHEET = ../../html/ql.css
HTML_EXTRA_FILES = HTML_EXTRA_FILES =
HTML_COLORSTYLE_HUE = 220 HTML_COLORSTYLE_HUE = 220
HTML_COLORSTYLE_SAT = 100 HTML_COLORSTYLE_SAT = 100

View File

@ -130,7 +130,13 @@ INPUT = \
history.dox \ history.dox \
macros.h \ macros.h \
metrics.dox \ metrics.dox \
modules.dox modules.dox \
../include \
../source \
../ports/lint \
../ports/lint/qk \
../ports/lint/qv \
../ports/lint/qxk
INPUT_ENCODING = UTF-8 INPUT_ENCODING = UTF-8
FILE_PATTERNS = \ FILE_PATTERNS = \
@ -189,10 +195,10 @@ IGNORE_PREFIX =
GENERATE_HTML = YES GENERATE_HTML = YES
HTML_OUTPUT = ../../html/qpc HTML_OUTPUT = ../../html/qpc
HTML_FILE_EXTENSION = .html HTML_FILE_EXTENSION = .html
HTML_HEADER = ../../doxygen/header.html HTML_HEADER = ../../html/header.html
HTML_FOOTER = ../../doxygen/footer.html HTML_FOOTER = ../../html/footer.html
HTML_STYLESHEET = HTML_STYLESHEET =
HTML_EXTRA_STYLESHEET = ../../doxygen/ql.css HTML_EXTRA_STYLESHEET = ../../html/ql.css
HTML_EXTRA_FILES = HTML_EXTRA_FILES =
HTML_COLORSTYLE_HUE = 220 HTML_COLORSTYLE_HUE = 220
HTML_COLORSTYLE_SAT = 100 HTML_COLORSTYLE_SAT = 100

View File

@ -150,7 +150,7 @@ To demonstrate QP/C features on an embedded board, you need to create an applica
With the exception of the game application, all other example applications can be implemented on a board with just a couple of LEDs. The @ref game application is a bit more involved and requires a small graphic display on the board. With the exception of the game application, all other example applications can be implemented on a board with just a couple of LEDs. The @ref game application is a bit more involved and requires a small graphic display on the board.
Beyond these basic applications for demonstrating and testing the various @ref ports "QP/C ports", the QP/C distribution contains all examples described in the book <a class="extern" target="_blank" href="http://www.state-machine.com/psicc2" >Practical UML Statecharts in C/C++, 2nd Edition</a>. Beyond these basic applications for demonstrating and testing the various @ref ports "QP/C ports", the QP/C distribution contains all examples described in the book <a class="extern" target="_blank" href="https://www.state-machine.com/psicc2" >Practical UML Statecharts in C/C++, 2nd Edition</a>.
@sa @ref exa_win32 @sa @ref exa_win32
@ -182,7 +182,7 @@ The different phases of embedded software life cycle pose different challenges.
----------------------------------------------------------------------------- -----------------------------------------------------------------------------
@subsection exa_sec_qm QM Models @subsection exa_sec_qm QM Models
Many example projects contain code auto-generated by the <a class="extern" target="_blank" href="http://www.state-machine.com/qm/help"><strong>QM modeling tool</strong></a>. Such projects always contain the corresponding **QM model** file, which you can open in QM, modify, and re-generate the code. Many example projects contain code auto-generated by the <a class="extern" target="_blank" href="https://www.state-machine.com/qm/help"><strong>QM modeling tool</strong></a>. Such projects always contain the corresponding **QM model** file, which you can open in QM, modify, and re-generate the code.
@note @note
The auto-generated files are saved as **read-only**. This protects them from inadvertent modifications, which will get lost when the files are re-generated by QM (or QMC). All modifications to the auto-generated code should be done in the QM model, not in the code. The auto-generated files are saved as **read-only**. This protects them from inadvertent modifications, which will get lost when the files are re-generated by QM (or QMC). All modifications to the auto-generated code should be done in the QM model, not in the code.
@ -223,10 +223,10 @@ By copying and re-naming an existing, working project, as opposed to creating a
To work with QP/C effectively, you need to learn a bit more about active objects and state machines. Below is a list of links to enable you to further your knowledge: To work with QP/C effectively, you need to learn a bit more about active objects and state machines. Below is a list of links to enable you to further your knowledge:
1. The book “Practical UML Statecharts in C/C++, 2nd Edition” [PSiCC2] and the companion web-page to the book (http://www.state-machine.com/psicc2/ 1. The book “Practical UML Statecharts in C/C++, 2nd Edition” [PSiCC2] and the companion web-page to the book (https://www.state-machine.com/psicc2/
2. Free Support Forum for QP/QM (https://sourceforge.net/p/qpc/discussion/668726 ) 2. Free Support Forum for QP/QM (https://sourceforge.net/p/qpc/discussion/668726 )
3. QP Code Downloads summary (http://www.state-machine.com/downloads ) 3. QP Code Downloads summary (https://www.state-machine.com/downloads )
4. QP Application Notes (http://www.state-machine.com/doc/an.html ) 4. QP Application Notes (https://www.state-machine.com/doc/an )
5. "State Space" Blog (http://embeddedgurus.com/state-space/ ) 5. "State Space" Blog (http://embeddedgurus.com/state-space/ )
@next{exa_ref} @next{exa_ref}

View File

@ -9,7 +9,7 @@
- @subpage game - @subpage game
- @subpage pelican - @subpage pelican
Additionally, the QP/C distribution contains several application examples described in the <a class="extern" target="_blank" href="http://www.state-machine.com/psicc2">PSiCC2</a> book. Additionally, the QP/C distribution contains several application examples described in the <a class="extern" target="_blank" href="https://www.state-machine.com/psicc2">PSiCC2</a> book.
- Calculator example from Chapter 2 of PSiCC2 - Calculator example from Chapter 2 of PSiCC2
- Orthogonal Component design pattern - Orthogonal Component design pattern
@ -91,11 +91,11 @@ As you can see, the structure of the state machine is very clearly recognizable
/*##########################################################################*/ /*##########################################################################*/
/*! @page dpp Dining Philosophers Problem (DPP) /*! @page dpp Dining Philosophers Problem (DPP)
The Dining Philosophers Problem (DPP) example is described in the <a class="extern" target="_blank" href="http://www.state-machine.com/doc/AN_DPP.pdf">Application Note: Dining Philosophers Problem (DPP) Example</a>. The Dining Philosophers Problem (DPP) example is described in the <a class="extern" target="_blank" href="https://www.state-machine.com/doc/AN_DPP.pdf">Application Note: Dining Philosophers Problem (DPP) Example</a>.
@htmlonly @htmlonly
<div class="image"> <div class="image">
<a target="_blank" href="http://www.state-machine.com/doc/AN_DPP.pdf"><img border="0" src="img/AN.jpg" title="Download PDF"></a> <a target="_blank" href="https://www.state-machine.com/doc/AN_DPP.pdf"><img border="0" src="img/AN.jpg" title="Download PDF"></a>
<div class="caption"> <div class="caption">
Application Note: Dining Philosophers Problem (DPP) Example Application Note: Dining Philosophers Problem (DPP) Example
</div> </div>
@ -108,11 +108,11 @@ Application Note: Dining Philosophers Problem (DPP) Example
/*##########################################################################*/ /*##########################################################################*/
/*! @page game "Fly 'n' Shoot" Game /*! @page game "Fly 'n' Shoot" Game
The "Fly 'n' Shoot" game example is described in the <a class="extern" target="_blank" href="http://www.state-machine.com/doc/AN_Fly-n-Shoot.pdf">Application Note: Fly 'n' Shoot Game Example</a>. The "Fly 'n' Shoot" game example is described in the <a class="extern" target="_blank" href="https://www.state-machine.com/doc/AN_Fly-n-Shoot.pdf">Application Note: Fly 'n' Shoot Game Example</a>.
@htmlonly @htmlonly
<div class="image"> <div class="image">
<a target="_blank" href="http://www.state-machine.com/doc/AN_Fly-n-Shoot.pdf"><img border="0" src="img/AN.jpg" title="Download PDF"></a> <a target="_blank" href="https://www.state-machine.com/doc/AN_Fly-n-Shoot.pdf"><img border="0" src="img/AN.jpg" title="Download PDF"></a>
<div class="caption"> <div class="caption">
Application Note: Fly 'n' Shoot Game Example Application Note: Fly 'n' Shoot Game Example
</div> </div>
@ -125,11 +125,11 @@ Application Note: Fly 'n' Shoot Game Example
/*##########################################################################*/ /*##########################################################################*/
/*! @page pelican PEdestrian LIgtht CONtrolled (PELICAN) Crossing /*! @page pelican PEdestrian LIgtht CONtrolled (PELICAN) Crossing
The "Fly 'n' Shoot" game example is described in the <a class="extern" target="_blank" href="http://www.state-machine.com/doc/AN_PELICAN.pdf">Application Note: PEdestrian LIght CONtrolled (PELICAN) Crossing Example</a>. The "Fly 'n' Shoot" game example is described in the <a class="extern" target="_blank" href="https://www.state-machine.com/doc/AN_PELICAN.pdf">Application Note: PEdestrian LIght CONtrolled (PELICAN) Crossing Example</a>.
@htmlonly @htmlonly
<div class="image"> <div class="image">
<a target="_blank" href="http://www.state-machine.com/doc/AN_PELICAN.pdf"><img border="0" src="img/AN.jpg" title="Download PDF"></a> <a target="_blank" href="https://www.state-machine.com/doc/AN_PELICAN.pdf"><img border="0" src="img/AN.jpg" title="Download PDF"></a>
<div class="caption"> <div class="caption">
Application Note: PEdestrian LIght CONtrolled (PELICAN) Crossing Example Application Note: PEdestrian LIght CONtrolled (PELICAN) Crossing Example
</div> </div>

View File

@ -26,7 +26,7 @@ lwIP example for Texas Instruments EK-LM3S6965 (Cortex-M3) with GNU-ARM and IAR-
/*##########################################################################*/ /*##########################################################################*/
/*! @page exa_emwin emWin Embedded GUI /*! @page exa_emwin emWin Embedded GUI
<p>The <a href="http://www.state-machine.com/doc/AN_QP_emWin.pdf" target="_blank" class="extern"><strong>Application Note "QP and emWin Embedded GUI"</strong></a> describes how to use QP&trade; with the <a href="https://www.segger.com/emwin.html" target="_blank" class="extern">emWin&trad; Embedded GUI from SEGGER</a> and also <a href="https://www.micrium.com/rtos/gui/" target="_blank" class="extern">µC/GUI from Micriµm</a>, which technically are the same products. <p>The <a href="https://www.state-machine.com/doc/AN_QP_emWin.pdf" target="_blank" class="extern"><strong>Application Note "QP and emWin Embedded GUI"</strong></a> describes how to use QP&trade; with the <a href="https://www.segger.com/emwin.html" target="_blank" class="extern">emWin&trad; Embedded GUI from SEGGER</a> and also <a href="https://www.micrium.com/rtos/gui/" target="_blank" class="extern">µC/GUI from Micriµm</a>, which technically are the same products.
</p> </p>
@image html emWin_demo.jpg QP-emWin demo (DPP) running on Windows @image html emWin_demo.jpg QP-emWin demo (DPP) running on Windows

View File

@ -23,7 +23,7 @@
/*##########################################################################*/ /*##########################################################################*/
/*! @page exa_win32 Win32 API (Windows) /*! @page exa_win32 Win32 API (Windows)
<p>The <span class="img folder">examples/win32</span> folder contains all examples described in the book <a class="extern" target="_blank" href="http://www.state-machine.com/psicc2" >Practical UML Statecharts in C/C++, 2nd Edition</a>. These examples include: <p>The <span class="img folder">examples/win32</span> folder contains all examples described in the book <a class="extern" target="_blank" href="https://www.state-machine.com/psicc2" >Practical UML Statecharts in C/C++, 2nd Edition</a>. These examples include:
</p> </p>
- <span class="img folder">blinky</span> Simple "Blinky" for Windows (command line) - <span class="img folder">blinky</span> Simple "Blinky" for Windows (command line)

View File

@ -37,11 +37,11 @@ When the *Tree View* is **unlinked** from the Current Topic, the *Tree View* wil
------------------------------------------------------------------------------ ------------------------------------------------------------------------------
@section gs_an Getting Started with QP/C App Note @section gs_an Getting Started with QP/C App Note
The Quantum Leaps Application Note <a class="extern" target="_blank" href="http://www.state-machine.com/doc/AN_Getting_Started_with_QPC.pdf"><strong>Getting Started with QP/C</strong></a> provides step-by-step instructions on how to download, install, and get started with QP/C quickly. The application note also contains a **QP/C Tutorial**, in which you build a simple "Blinky" application. The Quantum Leaps Application Note <a class="extern" target="_blank" href="https://www.state-machine.com/doc/AN_Getting_Started_with_QPC.pdf"><strong>Getting Started with QP/C</strong></a> provides step-by-step instructions on how to download, install, and get started with QP/C quickly. The application note also contains a **QP/C Tutorial**, in which you build a simple "Blinky" application.
@htmlonly @htmlonly
<div class="image"> <div class="image">
<a target="_blank" href="http://www.state-machine.com/doc/AN_Getting_Started_with_QPC.pdf"><img border="0" src="img/AN_Getting_Started_with_QPC.jpg" title="Download PDF"></a> <a target="_blank" href="https://www.state-machine.com/doc/AN_Getting_Started_with_QPC.pdf"><img border="0" src="img/AN_Getting_Started_with_QPC.jpg" title="Download PDF"></a>
<div class="caption"> <div class="caption">
Application Note: Getting Started with QP/C Application Note: Getting Started with QP/C
</div> </div>

View File

@ -1,6 +1,58 @@
/** /**
@page history Revision History @page history Revision History
@section qpc_5_9_0 Version 5.9.0, 2017-05-19
The main purpose of this milestone QP/C release is to provide support for the powerful **Unit Testing Framework** called
<a href="https://state-machine.com/qtools/qutest.html" target="_blank" class="extern"><strong>QUTest&trade;</strong> (pronounced *cutest*)</a>.
QUTest&trade; is the fundamental tooling for Test-Driven Development (TDD) of QP/C applications, which is a highly recommended best-practice. This release introduces changes in the QS-RX (receive) channel and adds several new callbacks.
@note The signatrue of the QS_onCommand() has changed and the function now takes 3 arbitrary 32-bit parameters instead of one. This introduces backwards-incompatibility with previous code that used QS_onCommand().
This release also changes the critical section for QP/C ports to ARM Cortex-M
in that the policy of "save and restore interrupt status" is used. This policy
permits nesting of critical sections, which was requested by customers.
Additionally, this release changes the selective interrupt disabling for
ARM Cortex-M3/4/7 (with the BASEPRI register) to address the hardware problem
on ARM Cortex-M7 core r0p1 (ARM-EPM-064408, errata 837070). The QP ports to
ARM Cortex-M3/4/7 now implement the workaround recommended by ARM, which is
to surround MSR BASEPRI with the "CPSID i"/"CPSIE i" pair. This workaround
works also for Cortex-M3/M4 cores.
New ports:
- ports/win32-qutest folder contains port to QUTest for Windows
- ports/posix-qutest folder contains port to QUTest for POSIX (Linux)
- ports/arm-cm/qutest folder contains port to QUTest for ARM Cortex-M
New examples:
- examples/qutest/dpp folder contains the QUTest DPP test for various
platforms (Win32, EFM32-SLSTK3401A and EK-TM4C123GXL)
- examples/qutest/qhsmtst folder contains the QUTest test for
the QHsmTst state machine (structural test)
- examples/qutest/qmsmtst folder contains the QUTest test for
the QMsmTst state machine (structural test)
- examples/qutest/self_test folder contains the QUTest self-test for
various features of QUTest
- examples/qutest/TDDbook_Flash folder contains the QUTest
of a flash memory driver from Chapter 10 of the "TDD-book" by James
Grenning.
- examples/qutest/TDDbook_LedDriver folder contains the QUTest
of a flash memory driver from Chapters 3&4 of the "TDD-book" by James
Grenning.
- examples/qutest/TDDbook_Sprintf folder contains the QUTest
of a flash memory driver from Chapter 1 of the "TDD-book" by James
Grenning.
Updates of 3rd_party software:
- the 3rd_party/CMSIS folder has been updated to CMSIS 5.0.2.
- the 3rd_party/embOS folder has been updated to embOS 4.34.1
Finally, this release fixes the following bugs:
- bug#162 "QF critical sections require modification for M7 core"
------------------------------------------------------------------------------
@section qpc_5_8_2 Version 5.8.2, 2017-02-08 @section qpc_5_8_2 Version 5.8.2, 2017-02-08
This release adds examples for the ARM Cortex-<strong>M7</strong> CPU. Specifically, This release adds examples for the ARM Cortex-<strong>M7</strong> CPU. Specifically,
the release contains the standard @ref dpp "Dining Philosophers Problem (DPP)" the release contains the standard @ref dpp "Dining Philosophers Problem (DPP)"
@ -25,7 +77,7 @@ Finally, this release fixes the following bugs:
@section qpc_5_8_1 Version 5.8.1, 2016-12-16 @section qpc_5_8_1 Version 5.8.1, 2016-12-16
This release is in response to a recent finding that many QP users of the This release is in response to a recent finding that many QP users of the
ports to ARM Cortex-M3/M4 forget to explicitly set their interrupt priorities, ports to ARM Cortex-M3/M4 forget to explicitly set their interrupt priorities,
as described in the AppNote <a href="http://www.state-machine.com/doc/AN_ARM-Cortex-M_Interrupt-Priorities.pdf" target="_blank" class="extern">"Setting ARM Cortex-M Interrupt Priorities in QP 5.x"</a>. as described in the AppNote <a href="https://www.state-machine.com/doc/AN_ARM-Cortex-M_Interrupt-Priorities.pdf" target="_blank" class="extern">"Setting ARM Cortex-M Interrupt Priorities in QP 5.x"</a>.
Specifically, this release improves safety of QP ports to ARM Cortex-M3/M4, Specifically, this release improves safety of QP ports to ARM Cortex-M3/M4,
by initializing the interrupt priorities to a safe default in a generic, by initializing the interrupt priorities to a safe default in a generic,
@ -190,7 +242,7 @@ Changes in detail:
This release adds support for the new board: EFM32-SLSTK3401A (Pearl Gecko Starter Kit from Silicon Labs). This board replaces the Stellaris EK-LM3S811 board, which has been discontinued. (The Stellaris EK-LM3S811 board had been used in the "Fly 'n' Shoot" game example accompanying the PSiCC2 book). This release adds support for the new board: EFM32-SLSTK3401A (Pearl Gecko Starter Kit from Silicon Labs). This board replaces the Stellaris EK-LM3S811 board, which has been discontinued. (The Stellaris EK-LM3S811 board had been used in the "Fly 'n' Shoot" game example accompanying the PSiCC2 book).
This release also introduces a new version of the QWIN GUI Toolkit in the Windows prototypes for the "Fly 'n' Shoot" game and the DPP-GUI This release also introduces a new version of the QWIN GUI Toolkit in the Windows prototypes for the "Fly 'n' Shoot" game and the DPP-GUI
version (see http://www.state-machine.com/products/index.html#QWIN). version (see https://www.state-machine.com/products/#QWIN).
Additionally, this release also includes the QP/C integration with the emWin emgedded GUI from SEGGER, which is also the same product as Additionally, this release also includes the QP/C integration with the emWin emgedded GUI from SEGGER, which is also the same product as
uC/GUI distributed by Micrium (@ref exa_emwin). uC/GUI distributed by Micrium (@ref exa_emwin).
@ -360,7 +412,7 @@ The main purpose of this release is the extension of the QS software tracing sys
9. Remotely reset of the Target 9. Remotely reset of the Target
This QP/C version complements the recent release of Qtools 5.5.0, where the <a href="http://www.state-machine.com/qspy ">QSPY host application</a> has been extended with a UDP socket, which is open for communication with various Front-Ends (GUI-based or headless). An example Front-End written in Tcl/Tk called "QspyView" has been developed to demonstrate all the features. The example application located in the directory qpc\examples\arm-cm\dpp_ek-tm4c123gxl\qspy contains customization of the "qspyview" script for the DPP application. Please refer to the documentation of this example (@ref arm-cm_dpp_ek-tm4c123gxl) for more information. This QP/C version complements the recent release of Qtools 5.5.0, where the <a href="https://www.state-machine.com/qspy ">QSPY host application</a> has been extended with a UDP socket, which is open for communication with various Front-Ends (GUI-based or headless). An example Front-End written in Tcl/Tk called "QspyView" has been developed to demonstrate all the features. The example application located in the directory qpc\examples\arm-cm\dpp_ek-tm4c123gxl\qspy contains customization of the "qspyview" script for the DPP application. Please refer to the documentation of this example (@ref arm-cm_dpp_ek-tm4c123gxl) for more information.
Finally, this release adds a state machine operation for implementing Finally, this release adds a state machine operation for implementing
the shallow history mechanism. The operation is called "childState", the shallow history mechanism. The operation is called "childState",
@ -536,7 +588,7 @@ This release fixes the following bugs:
Additionally, this release improves the uC/OS-II port in that it is now generic and applicable for any CPU, for which uC/OS-II port exists. Specifically, all references to DOS or x86 have been removed from the QP port and any CPU-specific dependencies have been placed in the separate part of the port. Additionally, this release improves the uC/OS-II port in that it is now generic and applicable for any CPU, for which uC/OS-II port exists. Specifically, all references to DOS or x86 have been removed from the QP port and any CPU-specific dependencies have been placed in the separate part of the port.
Finally, this release improves the "QP/C Reference Manual" generated by Doxygen and available both inside the QP/C baseline distribution (qpc.chm file) and online at: http://www.state-machine.com/qpc Finally, this release improves the "QP/C Reference Manual" generated by Doxygen and available both inside the QP/C baseline distribution (qpc.chm file) and online at: https://www.state-machine.com/qpc
------------------------------------------------------------------------------ ------------------------------------------------------------------------------
@ -679,7 +731,7 @@ to 15 by breaking up the QHsm_dispatch_() function. The code metrics
report, including cyclomatic complexity by function as well as other report, including cyclomatic complexity by function as well as other
standard code metrics (e.g., lines of code), is now included in the standard code metrics (e.g., lines of code), is now included in the
"QP/C Reference Manual", see "QP/C Reference Manual", see
http://www.state-machine.com/qpc/metrics.html https://www.state-machine.com/qpc/metrics.html
Also, in this release all internal QP data that were previously Also, in this release all internal QP data that were previously
uninitialized are now explicitly initialized to zero. In other words, uninitialized are now explicitly initialized to zero. In other words,
@ -884,7 +936,7 @@ NVIC_SetPriority() CMSIS function.
For more information, please read the short Application Note "Setting For more information, please read the short Application Note "Setting
ARM Cortex-M Interrupt Priorities in QP 5.1" available at: ARM Cortex-M Interrupt Priorities in QP 5.1" available at:
http://www.state-machine.com/doc/AN_ARM-Cortex-M_Interrupt-Priorities.pdf https://www.state-machine.com/doc/AN_ARM-Cortex-M_Interrupt-Priorities.pdf
------------------------------------------------------------------------------ ------------------------------------------------------------------------------

Binary file not shown.

Before

Width:  |  Height:  |  Size: 33 KiB

After

Width:  |  Height:  |  Size: 72 KiB

View File

@ -15,6 +15,7 @@
<img src="tree-view_linked.png"> <img src="tree-view_linked.png">
<img src="tree-view_unlinked.png"> <img src="tree-view_unlinked.png">
<img src="logo_qp.gif"> <img src="logo_qp.gif">
<img src="logo_qwin.jpg">
<img src="board.png"> <img src="board.png">
<img src="checkboxoff.png"> <img src="checkboxoff.png">
<img src="checkboxon.png"> <img src="checkboxon.png">

View File

Before

Width:  |  Height:  |  Size: 16 KiB

After

Width:  |  Height:  |  Size: 16 KiB

View File

@ -1,14 +1,15 @@
/*! @mainpage About QP/C&trade; /*! @mainpage About QP/C&trade;
@tableofcontents @image html qp_banner.jpg
@section ab_about What is it? @section ab_about What is it?
<a class="extern" target="_blank" href="http://www.state-machine.com/products/"><strong>QP/C&trade; (Quantum Platform in C)</strong></a> is a lightweight, open source <a class="extern" target="_blank" href="http://www.state-machine.com/doc/concepts.html#Framework"><strong>active object (actor) framework</strong></a> for building responsive and modular real-time embedded applications as systems of asynchronous event-driven <a class="extern" target="_blank" href="http://www.state-machine.com/doc/concepts.html#Active"><strong>active objects</strong></a> (<a href="http://en.wikipedia.org/wiki/Actor_model">actors</a>). The QP/C&trade; framework is a member of a larger family consisting of QP/C, <a href="http://www.state-machine.com/qpcpp" target="_blank" class="extern">QP/C++</a>, and <a href="http://www.state-machine.com/qpn" target="_blank" class="extern">QP-nano</a> frameworks, which are all strictly quality controlled, thoroughly documented, and available under @ref licensing "dual licensing model". <a class="extern" target="_blank" href="https://state-machine.com/products/"><strong>QP/C&trade; (Quantum Platform in C)</strong></a> is a lightweight, open source <a class="extern" target="_blank" href="https://state-machine.com/doc/concepts#Framework"><strong>active object (actor) framework</strong></a> for building modern,
<a href="https://en.wikipedia.org/wiki/Reactive_programming" target="_blank" class="extern">reactive</a>, real-time embedded applications as systems of asynchronous event-driven <a class="extern" target="_blank" href="https://state-machine.com/doc/concepts#Active"><strong>active objects</strong></a> (<a href="http://en.wikipedia.org/wiki/Actor_model">actors</a>). The QP/C&trade; framework is a member of a larger family consisting of QP/C, <a href="https://state-machine.com/qpcpp" target="_blank" class="extern">QP/C++</a>, and <a href="https://state-machine.com/qpn" target="_blank" class="extern">QP-nano</a> frameworks, which are all strictly quality controlled, thoroughly documented, and available under @ref licensing "dual licensing model".
The behavior of active objects is specified in QP/C by means of hierarchical state machines (UML statecharts). The framework supports manual coding of UML state machines in C as well as automatic code generation by means of the free <a href="http://www.state-machine.com/qm">QM&trade; modeling tool</a>. The behavior of active objects is specified in QP/C by means of <a href="https://state-machine.com/doc/concepts#HSM" target="_blank" class="extern"><strong>hierarchical state machines</strong></a> (UML statecharts). The framework supports manual coding of UML state machines in C as well as automatic code generation by means of the free <a href="https://state-machine.com/qm"><strong>QM&trade; modeling tool</strong></a>.
@attention @attention
To use QP/C&trade; effectively, you need to understand the <a href="http://www.state-machine.com/doc/concepts.html" target="_blank" class="extern"><strong>key concepts</strong></a> that underline the architecture of the framework and your applications based on the framework. To use QP/C&trade; effectively, you need to understand the <a href="https://state-machine.com/doc/concepts" target="_blank" class="extern"><strong>key concepts</strong></a> that underline the architecture of the framework and your applications based on the framework.
<div style="clear:both"></div> <div style="clear:both"></div>
@ -20,20 +21,20 @@ To use QP/C&trade; effectively, you need to understand the <a href="http://www.s
@section ab_goals What does it do? @section ab_goals What does it do?
The main goals of the QP/C&trade; framework are: The main goals of the QP/C&trade; framework are:
- to provide a reusable **architecture** based on <a class="extern" target="_blank" href="http://www.state-machine.com/doc/concepts.html#Framework">active objects (actors)</a>, which is _safer_ and easier to understand than "free-threading" with a traditional RTOS. - to provide a reusable event-driven **architecture** based on <a class="extern" target="_blank" href="https://state-machine.com/doc/concepts#Framework">active objects (actors)</a>, which is inherently **safer**, more extensible, and easier to understand than the usual _shared-state concurrency_ based on a traditional Real-Time Operating System (RTOS).
- to provide a simple-to-use coding techniques for <a class="extern" target="_blank" href="http://www.state-machine.com/doc/concepts.html#HSM">hierarchical state machines</a>, with which to implement the behavior of active objects. - to provide a simple-to-use coding techniques for <a class="extern" target="_blank" href="https://state-machine.com/doc/concepts#HSM">hierarchical state machines</a>, with which to implement the behavior of active objects.
- to provide efficient and thread-safe event-driven mechanisms for active objects to communicate, such as direct event passing and publish-subscribe. - to provide efficient and thread-safe asynchronous mechanisms for active objects to communicate, such as direct event passing and publish-subscribe.
- to provide event-driven timing services (time events). - to provide event-driven timing services (time events).
- to provide a selection of built-in real-time kernels to run the QP applications, such as the cooperative @ref qv "QV kernel", the preemptive non-blocking @ref qk "QK kernel", and the preemptive blocking @ref qxk "QXK kernel". - to provide a selection of built-in real-time kernels to run the QP applications, such as the cooperative @ref qv "QV kernel", the preemptive non-blocking @ref qk "QK kernel", and the preemptive blocking @ref qxk "QXK kernel".
- to provide testing support for applications based on software tracing (@ref qs "Q-Spy"). - to provide **unit testing** support for applications based on software tracing (<a href="https://state-machine.com/qtools/qutest.html"><strong>QUTest&trade;</strong></a>).
- to provide portability layer and ready-to-use ports to @ref ports_rtos "3rd-party RTOSes" and desktop operating systems such as @ref posix "Linux" and @ref win32 "Windows". - to provide portability layer and ready-to-use ports to @ref ports_rtos "3rd-party RTOSes" and desktop operating systems such as @ref posix "Linux" and @ref win32 "Windows".
- to provide a target for modeling and automatic code generation from the <a href="http://www.state-machine.com/qm" target="_blank" class="extern">QM modeling tool</a>. - to provide a target for modeling and automatic code generation from the <a href="https://state-machine.com/qm" target="_blank" class="extern"><strong>QM&trade; modeling tool</strong></a>.
------------------------------------------------------------------------------ ------------------------------------------------------------------------------
@section ab_special What's special about it? @section ab_special What's special about it?
The QP/C&trade; framework is a unique offering on the embedded software market. It provides a modern, reusable **architecture** of embedded applications, which combines object-orientation with the particular model of concurrency, known as <a class="extern" target="_blank" href="http://www.state-machine.com/doc/concepts.html#Active"><strong>active objects</strong></a> (actors). This architecture is generally **safer**, more responsive and easier to understand than "free threading" with a traditional Real-Time Operating System (RTOS). It also provides high enough level of abstraction and the right abstractions to effectively apply modeling and code generation to deeply embedded systems. The QP/C&trade; framework is a unique offering on the embedded software market. It provides a modern, reusable **architecture** of embedded applications, which combines object-orientation with the particular model of concurrency, known as <a class="extern" target="_blank" href="https://state-machine.com/doc/concepts#Active"><strong>active objects</strong></a> (actors). This architecture is generally **safer**, more responsive and easier to understand than "free threading" with a traditional Real-Time Operating System (RTOS). It also provides higher level of abstraction and the right abstractions to effectively apply modeling and code generation to deeply embedded systems.
<div class="separate"></div> <div class="separate"></div>
@ -41,11 +42,11 @@ The QP/C&trade; framework is a unique offering on the embedded software market.
Even though it is written in @ref misra "MISRA-compliant" ANSI-C, QP/C&trade; is fundamentally an **object-oriented** framework, which means that the framework itself and your applications derived from the framework are fundamentally composed of <a href="https://en.wikipedia.org/wiki/Class_(computer_programming)" target="_blank" class="extern">classes</a> and only classes can have @ref sm "state machines" associated with them.<br> Even though it is written in @ref misra "MISRA-compliant" ANSI-C, QP/C&trade; is fundamentally an **object-oriented** framework, which means that the framework itself and your applications derived from the framework are fundamentally composed of <a href="https://en.wikipedia.org/wiki/Class_(computer_programming)" target="_blank" class="extern">classes</a> and only classes can have @ref sm "state machines" associated with them.<br>
@note @note
If you program in C and object-oriented programming is new to you, please refer to the Application Note <a class="pdf" target="_blank" href="http://www.state-machine.com/doc/AN_Simple_OOP_in_C.pdf">"Simple Object-Oriented Programming in C"</a>, which describes how you can implement the concepts of _classes_, _inheritance_, and _polymorphism_ to portable ANSI-C. If you program in C and object-oriented programming is new to you, please refer to the Application Note <a class="pdf" target="_blank" href="https://state-machine.com/doc/AN_Simple_OOP_in_C.pdf">"Simple Object-Oriented Programming in C"</a>, which describes how you can implement the concepts of _classes_, _inheritance_, and _polymorphism_ to portable ANSI-C.
<br> <br>
@htmlonly @htmlonly
<div class="image"> <div class="image">
<a target="_blank" href="http://www.state-machine.com/doc/AN_OOP_in_C.pdf"><img border="0" src="img/AN_OOP_in_C.gif" title="Download PDF"></a> <a target="_blank" href="https://state-machine.com/doc/AN_OOP_in_C.pdf"><img border="0" src="img/AN_OOP_in_C.gif" title="Download PDF"></a>
<div class="caption"> <div class="caption">
Application Note: Object-Oriented Programming in C Application Note: Object-Oriented Programming in C
</div> </div>
@ -61,7 +62,7 @@ The most unique characteristic of the QP/C&trade; framework is its very small fo
<div class="separate"></div> <div class="separate"></div>
@subsection hsms Hierarchical State Machines @subsection hsms Hierarchical State Machines
The behavior of active objects is specified in QP by means of The behavior of active objects is specified in QP by means of
<a class="extern" target="_blank" href="http://www.state-machine.com/doc/concepts.html#HSM">hierarchical state machines (UML statecharts)</a>. The frameworks support manual coding of UML state machines in C or C++ as well as fully automatic code generation by means of the free graphical <a class="extern" target="_blank" href="http://www.state-machine.com/qm">QM&trade; modeling tool</a>. <a class="extern" target="_blank" href="https://state-machine.com/doc/concepts#HSM">hierarchical state machines (UML statecharts)</a>. The frameworks support manual coding of UML state machines in C or C++ as well as fully automatic code generation by means of the free graphical <a class="extern" target="_blank" href="https://state-machine.com/qm">QM&trade; modeling tool</a>.
<div class="separate"></div> <div class="separate"></div>
@ -78,12 +79,12 @@ QP/C can also work with many traditional @ref exa_rtos "RTOSes" and @ref exa_rto
@subsection popular Popularity &amp; Maturity @subsection popular Popularity &amp; Maturity
With over 15 years of continuous development and <a class="extern" target="_blank" href="https://sourceforge.net/projects/qpc/files/stats/timeline?dates=2016-01-01+to+2016-12-31">60,000 downloads a year</a>, the QP&trade; framework family is the most mature and popular such solution on the embedded software market. With over 15 years of continuous development and <a class="extern" target="_blank" href="https://sourceforge.net/projects/qpc/files/stats/timeline?dates=2016-01-01+to+2016-12-31">60,000 downloads a year</a>, the QP&trade; framework family is the most mature and popular such solution on the embedded software market.
The QP&trade; frameworks are used in <a href="http://www.state-machine.com/about/customers.html" target="_blank" class="extern">millions of products worldwide</a> in aerospace, medical devices, consumer electronics, wired and wireless telecommunications, industrial automation, transportation, robotics, and many more. The QP&trade; frameworks are used in <a href="https://state-machine.com/about/customers" target="_blank" class="extern">millions of products worldwide</a> in aerospace, medical devices, consumer electronics, wired and wireless telecommunications, industrial automation, transportation, robotics, and many more.
<div class="separate"></div> <div class="separate"></div>
@subsection psicc2 Book @subsection psicc2 Book
The book, <a class="extern" target="_blank" href="http://www.state-machine.com/psicc2" ><strong>Practical UML Statecharts in C/C++, 2nd Edition</strong></a> provides a detailed design study of the QP frameworks and explains all the related concepts. The book, <a class="extern" target="_blank" href="https://state-machine.com/psicc2" ><strong>Practical UML Statecharts in C/C++, 2nd Edition</strong></a> provides a detailed design study of the QP frameworks and explains all the related concepts.
@image html PSiCC2-3D.jpg "Practical UML Statecharts in C/C++, 2nd Edition" @image html PSiCC2-3D.jpg "Practical UML Statecharts in C/C++, 2nd Edition"
@ -91,7 +92,7 @@ The book, <a class="extern" target="_blank" href="http://www.state-machine.com/p
------------------------------------------------------------------------------ ------------------------------------------------------------------------------
@section licensing How is it licensed? @section licensing How is it licensed?
QP/C is licensed under the increasingly popular <a class="extern" target="_blank" href="http://www.state-machine.com/licensing">dual licensing model</a>, in which both the open source software distribution mechanism and traditional closed source software distribution models are combined. QP/C is licensed under the increasingly popular <a class="extern" target="_blank" href="https://state-machine.com/licensing">dual licensing model</a>, in which both the open source software distribution mechanism and traditional closed source software distribution models are combined.
@note If your company has a policy forbidding open source in your product, all QP frameworks can be licensed commercially, in which case you don't use any open source license and you do not violate your policy. @note If your company has a policy forbidding open source in your product, all QP frameworks can be licensed commercially, in which case you don't use any open source license and you do not violate your policy.
@ -103,7 +104,7 @@ If you are developing and distributing open source applications under the GNU Ge
<div class="separate"></div> <div class="separate"></div>
@subsection closed-source Closed Source Projects @subsection closed-source Closed Source Projects
If you are developing and distributing traditional closed source applications, you can purchase one of <a class="extern" target="_blank" href="http://www.state-machine.com/licensing/index.html#Commercial">Quantum Leaps commercial licenses</a>, which are specifically designed for users interested in retaining the proprietary status of their code. All Quantum Leaps commercial licenses expressly supersede the GPL open source license. This means that when you license Quantum Leaps software under a commercial license, you specifically do not use the software under the open source license and therefore you are not subject to any of its terms. If you are developing and distributing traditional closed source applications, you can purchase one of <a class="extern" target="_blank" href="https://state-machine.com/licensing/#Commercial">Quantum Leaps commercial licenses</a>, which are specifically designed for users interested in retaining the proprietary status of their code. All Quantum Leaps commercial licenses expressly supersede the GPL open source license. This means that when you license Quantum Leaps software under a commercial license, you specifically do not use the software under the open source license and therefore you are not subject to any of its terms.
------------------------------------------------------------------------------ ------------------------------------------------------------------------------
@ -112,22 +113,21 @@ Please post any **technical questions** to the <a class="extern" target="_blank"
Direct **Commercial Support** is available to the commercial licensees. Every commercial license includes one year of Technical Support for the licensed software. The support term can be extended annually. Direct **Commercial Support** is available to the commercial licensees. Every commercial license includes one year of Technical Support for the licensed software. The support term can be extended annually.
Training and consulting services are also available from Quantum Leaps. Please refer to the <a class="extern" target="_blank" href="http://www.state-machine.com/contact.html">Contact web-page</a> for more information. Training and consulting services are also available from Quantum Leaps. Please refer to the <a class="extern" target="_blank" href="https://state-machine.com/contact">Contact web-page</a> for more information.
------------------------------------------------------------------------------ ------------------------------------------------------------------------------
@section contact Contact Information @section ab_help How to get help?
- Quantum Leaps Web site: <a class="extern" target="_blank" href="http://www.state-machine.com">www.state-machine.com</a> - <a class="extern" target="_blank" class="extern" href="https://sourceforge.net/p/qpc/discussion/668726">Free Support Forum</a>
- <a class="extern" target="_blank" class="extern" href="https://sourceforge.net/p/qpc/bugs/">Bug Reports</a>
- Quantum Leaps licensing: <a class="extern" target="_blank" href="http://www.state-machine.com">www.state-machine.com/licensing</a> - <a class="extern" target="_blank" class="extern" href="https://sourceforge.net/p/qpc/feature-requests/">Feature Requests</a>
- <a class="extern" target="_blank" href="https://state-machine.com">Quantum Leaps website</a>
- QP/QM on SourceForge.net: <a class="extern" target="_blank" href="http://sourceforge.net/projects/qpc">sourceforge.net/projects/qpc</a> - <a class="extern" target="_blank" href="mailto:info@state-machine.com?subject=QP/C">info@state-machine.com</a>@n
- e-mail: <a class="extern" target="_blank" href="mailto:info@state-machine.com">info@state-machine.com</a>
@image html logo_ql_TM.jpg @image html logo_ql_TM.jpg
Copyright &copy; 2002-2017 Quantum Leaps, LLC. All Rights Reserved.
Copyright &copy; 2002-2017 Quantum Leaps, LLC. All Rights Reserved.@n
@next{gs} @next{gs}
*/ */

View File

@ -1,8 +1,8 @@
@echo off @echo off
:: ========================================================================== :: ==========================================================================
:: Product: QP/C script for generating Doxygen documentation :: Product: QP/C script for generating Doxygen documentation
:: Last Updated for Version: 5.8.2 :: Last Updated for Version: 5.9.0
:: Date of the Last Update: 2017-02-07 :: Date of the Last Update: 2017-05-03
:: ::
:: Q u a n t u m L e a P s :: Q u a n t u m L e a P s
:: --------------------------- :: ---------------------------
@ -29,7 +29,7 @@
:: along with this program. If not, see <http://www.gnu.org/licenses/>. :: along with this program. If not, see <http://www.gnu.org/licenses/>.
:: ::
:: Contact information: :: Contact information:
:: http://www.state-machine.com :: https://state-machine.com
:: mailto:info@state-machine.com :: mailto:info@state-machine.com
:: ========================================================================== :: ==========================================================================
setlocal setlocal
@ -38,7 +38,7 @@ echo usage:
echo make echo make
echo make -CHM echo make -CHM
set VERSION=5.8.2 set VERSION=5.9.0
:: Generate Resource Standard Metrics for QP/C ............................... :: Generate Resource Standard Metrics for QP/C ...............................
set DOXHOME="C:\tools\doxygen\bin" set DOXHOME="C:\tools\doxygen\bin"

File diff suppressed because it is too large Load Diff

View File

@ -63,7 +63,7 @@ Sometimes it is not practical to break up long RTC steps, and consequently the t
*/ */
/*###########################################################################*/ /*! @defgroup qxk QXK /*###########################################################################*//*! @defgroup qxk QXK
@brief @brief
Preemptive Dual-Mode Blocking RTOS Kernel Preemptive Dual-Mode Blocking RTOS Kernel
@ -212,7 +212,7 @@ As you can see in the list below, <span class="highlight">QXK provides most feat
*/ */
/*###########################################################################*/ /*! @dir ../include /*###########################################################################*//*! @dir ../include
Platform-independent QP/C API Platform-independent QP/C API
@ -220,7 +220,7 @@ Platform-independent QP/C API
The QP/C <span class="img folder">include</span> directory needs to be added to the compiler's include path in the applications using QP/C. The QP/C <span class="img folder">include</span> directory needs to be added to the compiler's include path in the applications using QP/C.
*/ */
/*###########################################################################*/ /*! @dir ../source /*###########################################################################*//*! @dir ../source
Platform-independent QP/C implementation Platform-independent QP/C implementation

View File

@ -28,12 +28,12 @@
------------------------------------------------------------------------------ ------------------------------------------------------------------------------
@section arm-cm_qv Cooperative QV Kernel @section arm-cm_qv Cooperative QV Kernel
The QV port to ARM Cortex-M has been described in detail in Section 3 of the Quantum Leaps Application Note: <a href="http://www.state-machine.com/doc/AN_QP_and_ARM-Cortex-M-ARM-KEIL.pdf" target="_blank" class="extern" title="Read PDF">QP and ARM Cortex-M with ARM-KEIL</a>. The Application Note focuses on the ARM-KEIL toolset, but the general principles apply to all supported toolsets, such as IAR-ARM, GNU-ARM, and TI-ARM. The QV port to ARM Cortex-M has been described in detail in Section 3 of the Quantum Leaps Application Note: <a href="https://www.state-machine.com/doc/AN_QP_and_ARM-Cortex-M-ARM-KEIL.pdf" target="_blank" class="extern" title="Read PDF">QP and ARM Cortex-M with ARM-KEIL</a>. The Application Note focuses on the ARM-KEIL toolset, but the general principles apply to all supported toolsets, such as IAR-ARM, GNU-ARM, and TI-ARM.
------------------------------------------------------------------------------ ------------------------------------------------------------------------------
@section arm-cm_qk Preemptive Non-Blocking QK Kernel @section arm-cm_qk Preemptive Non-Blocking QK Kernel
The QK port to ARM Cortex-M has been described in detail in Section 4 of the Quantum Leaps Application Note: <a href="http://www.state-machine.com/doc/AN_QP_and_ARM-Cortex-M-ARM-KEIL.pdf" target="_blank" class="extern" title="Read PDF">QP and ARM Cortex-M with ARM-KEIL</a>. The Application Note focuses on the ARM-KEIL toolset, but the general principles apply to all supported toolsets, such as IAR-ARM, GNU-ARM, and TI-ARM. The QK port to ARM Cortex-M has been described in detail in Section 4 of the Quantum Leaps Application Note: <a href="https://www.state-machine.com/doc/AN_QP_and_ARM-Cortex-M-ARM-KEIL.pdf" target="_blank" class="extern" title="Read PDF">QP and ARM Cortex-M with ARM-KEIL</a>. The Application Note focuses on the ARM-KEIL toolset, but the general principles apply to all supported toolsets, such as IAR-ARM, GNU-ARM, and TI-ARM.
------------------------------------------------------------------------------ ------------------------------------------------------------------------------
@ -54,7 +54,7 @@ The preemptive, blocking QXK kernel works on ARM Cortex-M as follows:
@n @n
> NOTE: Right before starting multitasking, the QXK kernel re-uses the main C-stack as the Main Stack (for interrupts and exceptions), and assigns the provided idle stack to the internal idle thread. > NOTE: Right before starting multitasking, the QXK kernel re-uses the main C-stack as the Main Stack (for interrupts and exceptions), and assigns the provided idle stack to the internal idle thread.
5. You need to explicitly **assign priorities of the all interrupts** used in your application, according to the Application Note: <a href="http://www.state-machine.com/doc/AN_ARM-Cortex-M_Interrupt-Priorities.pdf" target="_blank" class="extern" title="Read PDF">Setting ARM Cortex-M Interrupt Priorities in QP 5.1 and Higher</a>. 5. You need to explicitly **assign priorities of the all interrupts** used in your application, according to the Application Note: <a href="https://www.state-machine.com/doc/AN_ARM-Cortex-M_Interrupt-Priorities.pdf" target="_blank" class="extern" title="Read PDF">Setting ARM Cortex-M Interrupt Priorities in QP 5.1 and Higher</a>.
6. It is strongly recommended that you do not assign the lowest NVIC priority (0xFF) to any interrupt in your application, because it is used by the PendSV handler. For example, with 3 bits of priority implemented in the NVIC, this leaves the following 7 priority levels for you (listed from the lowest to the highest urgency): 0xC0, 0xA0, 0x80, 0x60, 0x40, 0x20, and 0x00 (the highest priority). 6. It is strongly recommended that you do not assign the lowest NVIC priority (0xFF) to any interrupt in your application, because it is used by the PendSV handler. For example, with 3 bits of priority implemented in the NVIC, this leaves the following 7 priority levels for you (listed from the lowest to the highest urgency): 0xC0, 0xA0, 0x80, 0x60, 0x40, 0x20, and 0x00 (the highest priority).
@n @n

View File

@ -1,21 +1,28 @@
/*##########################################################################*/ /*##########################################################################*/
/*! @page ports_rtos Ports to Third-Party RTOS /*! @page ports_rtos Ports to Third-Party RTOS
The main purpose of integrating QP/C with conventional RTOSes is to enable you to incorporate various communication stacks (TCP/IP, USB, CAN, etc.) as well as other middleware, which requires the ability to **block** the task code. <p>The most important reason why you might consider using a traditional RTOS kernel for executing event-driven QP/C applications is compatibility with the existing software. For example, most communication stacks (TCP/IP, USB, CAN, etc.) are designed for a traditional **blocking** kernel. In addition, a lot of legacy code requires blocking mechanisms, such as semaphores or time-delays. A conventional RTOS allows you to run the existing software components as regular "blocking" tasks in parallel to the event-driven QP/C application.
</p>
Another reason you might be interested in running QP/C on top of a conventional RTOS is **safety certification**, which your RTOS kernel might have but the built-in QP kernels currently don't provide.
@note
You do **not** need to use a traditional RTOS just to achieve preemptive multitasking with QP. The @ref comp_qk "preemptive QK kernel", available as part of the QP package, supports preemptive priority-based multitasking and is fully compatible with Rate Monotonic Scheduling to achieve guaranteed, hard real-time performance. The preemptive, run-to-completion QK kernel perfectly matches the run-to-completion execution semantics of active objects, yet it is simpler, faster, and more efficient than any traditional blocking kernel.
The QP/C framework can work with virtually any traditional real-time operating
system (RTOS). The currently supported 3rd-party RTOS kernels are:
- @subpage embos - @subpage embos
- @subpage threadx - @subpage threadx
- @subpage ti-rtos - @subpage ti-rtos
- @subpage ucos-ii - @subpage ucos-ii
- <a href="http://erika.tuxfamily.org/drupal/news/qp-framework-erika-enterprise" target="_blank" class="extern">OSEK/VDX RTOS ERIKA Enterprise</a>
Combined with a conventional RTOS, QP/C takes full advantage of the multitasking capabilities of the RTOS by executing each active object in a separate RTOS task. The QP/C Platform Abstraction Layer (PAL) includes an abstract RTOS interface to enable integration between QP/C and the underlying RTOS. Specifically, the PAL allows adapting most message queue variants as event queues of active objects as well as most memory partitions as QP/C event pools.
@attention @attention
Starting from version 5.6.0, QP/C includes the conventional, preemptive @ref qxk " blocking QXK kernel", which is recommended as the preferred RTOS kernel for applications that need to mix active objects with traditional blocking code. Due to the tight and optimal integration between QXK and the rest of QP, QXK offers better performance and smaller memory footprint than any @ref ports_rtos "QP port to a 3rd-party RTOS". Additionally, QXK is already included in QP, so you avoid additional licensing costs of 3rd-party kernels. Starting from version 5.6.0, QP/C includes the conventional, preemptive @ref qxk " blocking QXK kernel", which is recommended as the preferred RTOS kernel for applications that need to mix active objects with traditional blocking code. Due to the tight and optimal integration between QXK and the rest of QP, QXK offers better performance and smaller memory footprint than any @ref ports_rtos "QP port to a 3rd-party RTOS". Additionally, QXK is already included in QP, so you avoid additional licensing costs of 3rd-party kernels.
\n
@note
You do **not** need to use a traditional RTOS just to achieve preemptive multitasking with QP. The @ref comp_qk "preemptive QK kernel", available as part of the QP package, supports preemptive priority-based multitasking and is fully compatible with Rate Monotonic Scheduling to achieve guaranteed, hard real-time performance. The preemptive, run-to-completion QK kernel perfectly matches the run-to-completion execution semantics of active objects, yet it is simpler, faster, and more efficient than any traditional blocking kernel.
*/ */
/*##########################################################################*/ /*##########################################################################*/
/*! @page embos embOS /*! @page embos embOS

View File

@ -29,7 +29,7 @@
:: along with this program. If not, see <http://www.gnu.org/licenses/>. :: along with this program. If not, see <http://www.gnu.org/licenses/>.
:: ::
:: Contact information: :: Contact information:
:: http://www.state-machine.com :: https://state-machine.com
:: mailto:info@state-machine.com :: mailto:info@state-machine.com
:: ========================================================================== :: ==========================================================================
setlocal setlocal

View File

@ -29,7 +29,7 @@ The standard QP/C distribution contains many @ref exa "Example Projects", which
------------------------------------------------------------------------------ ------------------------------------------------------------------------------
@section comp Components of QP/C @section comp Components of QP/C
<p>As shown in the diagram below, the QP/C framework has a layered structure. The Target hardware sits at the bottom. The Board Support Package (BSP) above it provides access to the board-specific features, such as the peripherals. The real-time kernel (QV, QK, QXK, or a conventional 3rd-party RTOS) provides the foundation for multitasking, such as task scheduling, context-switching, and inter-task communication. Based on these services, the event-driven framework (QF) supplies the event-driven infrastructure for executing <a href="http://www.state-machine.com/doc/concepts.html#Active" target="_blank" class="extern">active objects</a> and ensuring thread-safe event-driven exchanges among them. Finally, the event-processor (QEP) implements the hierarchical state machine semantics (based on UML statecharts). The top layer is the application-level code consisting of loosely-coupled active objects. <p>As shown in the diagram below, the QP/C framework has a layered structure. The Target hardware sits at the bottom. The Board Support Package (BSP) above it provides access to the board-specific features, such as the peripherals. The real-time kernel (QV, QK, QXK, or a conventional 3rd-party RTOS) provides the foundation for multitasking, such as task scheduling, context-switching, and inter-task communication. Based on these services, the event-driven framework (QF) supplies the event-driven infrastructure for executing <a href="https://www.state-machine.com/doc/concepts#Active" target="_blank" class="extern">active objects</a> and ensuring thread-safe event-driven exchanges among them. Finally, the event-processor (QEP) implements the hierarchical state machine semantics (based on UML statecharts). The top layer is the application-level code consisting of loosely-coupled active objects.
</p> </p>
@image html qp_components.jpg "Components of the QP Framework" @image html qp_components.jpg "Components of the QP Framework"
@ -37,11 +37,11 @@ The standard QP/C distribution contains many @ref exa "Example Projects", which
<div class="separate"></div> <div class="separate"></div>
@subsection comp_qep QEP Hierarchical Event Processor @subsection comp_qep QEP Hierarchical Event Processor
QEP is a universal, UML-compliant event processor that provides implementation of <a href="http://www.state-machine.com/doc/concepts.html#HSM" target="_blank" class="extern">hierarchical state machines</a> (UML statecharts) in highly readable ANSI-C. The hallmark of QEP implementation strategy is **traceability**, which means that every state machine element is mapped to code precisely, unambiguously, and exactly once. QEP fully supports hierarchical state nesting, which is the fundamental mechanism for reusing behavior across many states instead of repeating the same actions and transitions over and over again. (<span class="highlight">See @ref qep for detailed documentation</span>). QEP is a universal, UML-compliant event processor that provides implementation of <a href="https://www.state-machine.com/doc/concepts#HSM" target="_blank" class="extern">hierarchical state machines</a> (UML statecharts) in highly readable ANSI-C. The hallmark of QEP implementation strategy is **traceability**, which means that every state machine element is mapped to code precisely, unambiguously, and exactly once. QEP fully supports hierarchical state nesting, which is the fundamental mechanism for reusing behavior across many states instead of repeating the same actions and transitions over and over again. (<span class="highlight">See @ref qep for detailed documentation</span>).
<div class="separate"></div> <div class="separate"></div>
@subsection comp_qf QF Active-Object Framework @subsection comp_qf QF Active-Object Framework
QF is a lightweight, event-driven, <a href="http://www.state-machine.com/doc/concepts.html#Framework" target="_blank" class="extern">active object framework</a> specifically designed for real-time embedded (RTE) systems. The main job of the framework is to guarantee **thread-safe**, run-to-completion event processing within each <a href="http://www.state-machine.com/doc/concepts.html#Active" target="_blank" class="extern">active object</a>. This includes direct event posting as well as publish-subscribe event delivery, event queuing, and time events (time-delayed requests for posing events). (<span class="highlight">See @ref qf for detailed documentation</span>). QF is a lightweight, event-driven, <a href="https://www.state-machine.com/doc/concepts#Framework" target="_blank" class="extern">active object framework</a> specifically designed for real-time embedded (RTE) systems. The main job of the framework is to guarantee **thread-safe**, run-to-completion event processing within each <a href="https://www.state-machine.com/doc/concepts#Active" target="_blank" class="extern">active object</a>. This includes direct event posting as well as publish-subscribe event delivery, event queuing, and time events (time-delayed requests for posing events). (<span class="highlight">See @ref qf for detailed documentation</span>).
<div class="separate"></div> <div class="separate"></div>
@subsection comp_qv QV Cooperative Kernel @subsection comp_qv QV Cooperative Kernel
@ -74,14 +74,14 @@ The figure below shows the main classes comprising the QP/C framework and their
<li><span class="tag">0</span> The ::QEvt class represents events without parameters and serves as the base class for derivation of time events and any events with parameters. For example, application-level events `ObjectPosEvt` and `ObjectImageEvt` inherit ::QEvt and add to it some parameters (see [8]). <li><span class="tag">0</span> The ::QEvt class represents events without parameters and serves as the base class for derivation of time events and any events with parameters. For example, application-level events `ObjectPosEvt` and `ObjectImageEvt` inherit ::QEvt and add to it some parameters (see [8]).
</li> </li>
<li><span class="tag">1</span> The abstract ::QHsm class represents a Hierarchical State Machine (HSM) with full support for hierarchical nesting of states, entry/exit actions, initial transitions, and transitions to history in any composite state. This class is designed for ease of manual coding of HSMs in C, but it is also supported by the <a class="extern" target="_blank" href="http://www.state-machine.com/qm">QM modeling tool</a>. <li><span class="tag">1</span> The abstract ::QHsm class represents a Hierarchical State Machine (HSM) with full support for hierarchical nesting of states, entry/exit actions, initial transitions, and transitions to history in any composite state. This class is designed for ease of manual coding of HSMs in C, but it is also supported by the <a class="extern" target="_blank" href="https://www.state-machine.com/qm">QM modeling tool</a>.
::QHsm is also the base class for the ::QMsm state machine, which provides a superior efficiency, but requires the use of the <a class="extern" target="_blank" href="http://www.state-machine.com/qm">QM modeling tool</a> to generate code. ::QHsm is also the base class for the ::QMsm state machine, which provides a superior efficiency, but requires the use of the <a class="extern" target="_blank" href="https://www.state-machine.com/qm">QM modeling tool</a> to generate code.
</li> </li>
<li><span class="tag">2</span> The abstract ::QActive class represents an active object that uses the ::QHsm style implementation strategy for state machines. This strategy is tailored to manual coding, but it is also supported by the <a class="extern" target="_blank" href="http://www.state-machine.com/qm">QM modeling tool</a>. The resulting code is slower than in the ::QMsm-style implementation strategy. The @ref game application provides an example of application-level classes deriving from ::QActive and ::QHsm (see [6] and [7]). <li><span class="tag">2</span> The abstract ::QActive class represents an active object that uses the ::QHsm style implementation strategy for state machines. This strategy is tailored to manual coding, but it is also supported by the <a class="extern" target="_blank" href="https://www.state-machine.com/qm">QM modeling tool</a>. The resulting code is slower than in the ::QMsm-style implementation strategy. The @ref game application provides an example of application-level classes deriving from ::QActive and ::QHsm (see [6] and [7]).
</li> </li>
<li><span class="tag">3</span> The abstract ::QMsm class (QM State Machine) derives from ::QHsm and implements the fastest and the most efficient strategy for coding hierarchical state machines, but this strategy is not human-maintainable and requires the use of the <a class="extern" target="_blank" href="http://www.state-machine.com/qm">QM modeling tool</a>. The class is abstract, meaning that it is not designed to be instantiated directly, but rather only for inheritance. <li><span class="tag">3</span> The abstract ::QMsm class (QM State Machine) derives from ::QHsm and implements the fastest and the most efficient strategy for coding hierarchical state machines, but this strategy is not human-maintainable and requires the use of the <a class="extern" target="_blank" href="https://www.state-machine.com/qm">QM modeling tool</a>. The class is abstract, meaning that it is not designed to be instantiated directly, but rather only for inheritance.
</li> </li>
<li><span class="tag">4</span> The abstract ::QMActive class represents an active object that uses the ::QMsm state machine implementation strategy. This strategy requires the use of the QM modeling tool to generate state machine code automatically, but the code is faster than in the ::QHsm style implementation strategy and needs less run-time support (smaller event-processor). <li><span class="tag">4</span> The abstract ::QMActive class represents an active object that uses the ::QMsm state machine implementation strategy. This strategy requires the use of the QM modeling tool to generate state machine code automatically, but the code is faster than in the ::QHsm style implementation strategy and needs less run-time support (smaller event-processor).
@ -105,13 +105,13 @@ The figure below shows the main classes comprising the QP/C framework and their
------------------------------------------------------------------------------ ------------------------------------------------------------------------------
@section sm State Machines @section sm State Machines
The behavior of each active object in QP/C is specified by means of a <a href="http://www.state-machine.com/doc/concepts.html#HSM" target="_blank" class="extern">hierarchical state machine</a> (UML statechart), which is the most effective and elegant technique of decomposing event-driven behavior. The most important innovation of UML state machines over classical finite state machines (FSMs) is the hierarchical state nesting. The value of state nesting lies in avoiding repetitions, which are inevitable in the traditional "flat" FSM formalism and are the main reason for the "state-transition explosion" in FSMs. The semantics of state nesting allow substates to define only the differences of behavior from the superstates, thus promoting sharing and reusing behavior. The behavior of each active object in QP/C is specified by means of a <a href="https://www.state-machine.com/doc/concepts#HSM" target="_blank" class="extern">hierarchical state machine</a> (UML statechart), which is the most effective and elegant technique of decomposing event-driven behavior. The most important innovation of UML state machines over classical finite state machines (FSMs) is the hierarchical state nesting. The value of state nesting lies in avoiding repetitions, which are inevitable in the traditional "flat" FSM formalism and are the main reason for the "state-transition explosion" in FSMs. The semantics of state nesting allow substates to define only the differences of behavior from the superstates, thus promoting sharing and reusing behavior.
@note @note
The Quantum Leaps Application Note <a class="extern" target="_blank" href="http://www.state-machine.com/doc/AN_Crash_Course_in_UML_State_Machines.pdf"><strong>A Crash Course in UML State Machines</strong></a> introduces the main state machine concepts backed up by examples. The Quantum Leaps Application Note <a class="extern" target="_blank" href="https://www.state-machine.com/doc/AN_Crash_Course_in_UML_State_Machines.pdf"><strong>A Crash Course in UML State Machines</strong></a> introduces the main state machine concepts backed up by examples.
@htmlonly @htmlonly
<div class="image"> <div class="image">
<a target="_blank" href="http://www.state-machine.com/doc/AN_Crash_Course_in_UML_State_Machines.pdf"><img border="0" src="img/AN_Crash_Course_in_UML_State_Machines.gif" title="Download PDF"></a> <a target="_blank" href="https://www.state-machine.com/doc/AN_Crash_Course_in_UML_State_Machines.pdf"><img border="0" src="img/AN_Crash_Course_in_UML_State_Machines.gif" title="Download PDF"></a>
<div class="caption"> <div class="caption">
Application Note: A Crash Course in UML State Machines Application Note: A Crash Course in UML State Machines
</div> </div>
@ -126,11 +126,11 @@ The hallmark of the QP/C implementation of UML state machines is **traceability*
------------------------------------------------------------------------------ ------------------------------------------------------------------------------
@section coding Coding Standard @section coding Coding Standard
The QP/C framework has been developed in strict adherence to the documented <a class="extern" target="_blank" href="http://www.state-machine.com/doc/AN_QL_Coding_Standard.pdf"><strong>Quantum Leaps Coding Standard</strong></a>. The QP/C framework has been developed in strict adherence to the documented <a class="extern" target="_blank" href="https://www.state-machine.com/doc/AN_QL_Coding_Standard.pdf"><strong>Quantum Leaps Coding Standard</strong></a>.
@htmlonly @htmlonly
<div class="image"> <div class="image">
<a target="_blank" href="http://www.state-machine.com/doc/AN_QL_Coding_Standard.pdf"><img border="0" src="img/AN_Coding_Standard.jpg " title="Download PDF"></a> <a target="_blank" href="https://www.state-machine.com/doc/AN_QL_Coding_Standard.pdf"><img border="0" src="img/AN_Coding_Standard.jpg " title="Download PDF"></a>
<div class="caption"> <div class="caption">
Application Note: Quantum Leaps C/C++ Coding Standard Application Note: Quantum Leaps C/C++ Coding Standard
</div> </div>
@ -146,14 +146,14 @@ Application Note: Quantum Leaps C/C++ Coding Standard
@htmlonly @htmlonly
<div class="image"> <div class="image">
<a target="_blank" href="http://www.state-machine.com/doc/AN_QP-C_MISRA.pdf"><img border="0" src="img/AN_MISRA-QPC.jpg" title="Download PDF"></a> <a target="_blank" href="https://www.state-machine.com/doc/AN_QP-C_MISRA.pdf"><img border="0" src="img/AN_MISRA-QPC.jpg" title="Download PDF"></a>
<div class="caption"> <div class="caption">
Application Note: QP/C MISRA-C:2004 Compliance Matrix Application Note: QP/C MISRA-C:2004 Compliance Matrix
</div> </div>
</div> </div>
@endhtmlonly @endhtmlonly
All deviations are carefully limited into very specific contexts and are documented with the Application Note: <a class="extern" target="_blank" href="http://www.state-machine.com/doc/AN_QP-C_MISRA.pdf"><strong>QP/C MISRA-C:2004 Compliance Matrix</strong></a>. All deviations are carefully limited into very specific contexts and are documented with the Application Note: <a class="extern" target="_blank" href="https://www.state-machine.com/doc/AN_QP-C_MISRA.pdf"><strong>QP/C MISRA-C:2004 Compliance Matrix</strong></a>.
@note @note
MISRA and MISRA C are registered trademarks of MIRA Ltd, held on behalf of the MISRA Consortium. MISRA and MISRA C are registered trademarks of MIRA Ltd, held on behalf of the MISRA Consortium.

View File

@ -28,7 +28,7 @@
* along with this program. If not, see <http://www.gnu.org/licenses/>. * along with this program. If not, see <http://www.gnu.org/licenses/>.
* *
* Contact information: * Contact information:
* Web : http://www.state-machine.com * Web : https://state-machine.com
* Email: info@state-machine.com * Email: info@state-machine.com
*****************************************************************************/ *****************************************************************************/
#ifndef blinky_h #ifndef blinky_h

View File

@ -28,7 +28,7 @@
* along with this program. If not, see <http://www.gnu.org/licenses/>. * along with this program. If not, see <http://www.gnu.org/licenses/>.
* *
* Contact information: * Contact information:
* Web : http://www.state-machine.com * Web : https://state-machine.com
* Email: info@state-machine.com * Email: info@state-machine.com
*****************************************************************************/ *****************************************************************************/
#ifndef bsp_h #ifndef bsp_h

View File

@ -28,7 +28,7 @@
* along with this program. If not, see <http://www.gnu.org/licenses/>. * along with this program. If not, see <http://www.gnu.org/licenses/>.
* *
* Contact information: * Contact information:
* Web : http://www.state-machine.com * Web : https://state-machine.com
* Email: info@state-machine.com * Email: info@state-machine.com
*****************************************************************************/ *****************************************************************************/
#include "qpc.h" #include "qpc.h"

View File

@ -28,7 +28,7 @@
* along with this program. If not, see <http://www.gnu.org/licenses/>. * along with this program. If not, see <http://www.gnu.org/licenses/>.
* *
* Contact information: * Contact information:
* http://www.state-machine.com * https://state-machine.com
* mailto:info@state-machine.com * mailto:info@state-machine.com
*****************************************************************************/ *****************************************************************************/
#include "qpc.h" #include "qpc.h"

View File

@ -28,7 +28,7 @@
# along with this program. If not, see <http://www.gnu.org/licenses/>. # along with this program. If not, see <http://www.gnu.org/licenses/>.
# #
# Contact information: # Contact information:
# http://www.state-machine.com # https://state-machine.com
# mailto:info@state-machine.com # mailto:info@state-machine.com
############################################################################## ##############################################################################
# examples of invoking this Makefile: # examples of invoking this Makefile:

View File

@ -0,0 +1,70 @@
dbg\qf_act.o: file format elf32-littlearm
Disassembly of section .text.QF_add_:
00000000 <QF_add_>:
0: b538 push {r3, r4, r5, lr}
2: 4605 mov r5, r0
4: 6a84 ldr r4, [r0, #40] ; 0x28
6: 1e63 subs r3, r4, #1
8: 2b1f cmp r3, #31
a: d803 bhi.n 14 <QF_add_+0x14>
c: 4b0a ldr r3, [pc, #40] ; (38 <QF_add_+0x38>)
e: f853 3024 ldr.w r3, [r3, r4, lsl #2]
12: b11b cbz r3, 1c <QF_add_+0x1c>
14: 2164 movs r1, #100 ; 0x64
16: 4809 ldr r0, [pc, #36] ; (3c <QF_add_+0x3c>)
18: f7ff fffe bl 0 <Q_onAssert>
1c: f3ef 8311 mrs r3, BASEPRI
20: b672 cpsid i
22: 223f movs r2, #63 ; 0x3f
24: f382 8811 msr BASEPRI, r2
28: b662 cpsie i
2a: 4a03 ldr r2, [pc, #12] ; (38 <QF_add_+0x38>)
2c: f842 5024 str.w r5, [r2, r4, lsl #2]
30: f383 8811 msr BASEPRI, r3
34: bd38 pop {r3, r4, r5, pc}
36: bf00 nop
...
Disassembly of section .text.QF_remove_:
00000000 <QF_remove_>:
0: b538 push {r3, r4, r5, lr}
2: 4604 mov r4, r0
4: 6a85 ldr r5, [r0, #40] ; 0x28
6: 1e6b subs r3, r5, #1
8: 2b1f cmp r3, #31
a: d804 bhi.n 16 <QF_remove_+0x16>
c: 4b0b ldr r3, [pc, #44] ; (3c <QF_remove_+0x3c>)
e: f853 3025 ldr.w r3, [r3, r5, lsl #2]
12: 4298 cmp r0, r3
14: d003 beq.n 1e <QF_remove_+0x1e>
16: 21c8 movs r1, #200 ; 0xc8
18: 4809 ldr r0, [pc, #36] ; (40 <QF_remove_+0x40>)
1a: f7ff fffe bl 0 <Q_onAssert>
1e: f3ef 8311 mrs r3, BASEPRI
22: b672 cpsid i
24: 223f movs r2, #63 ; 0x3f
26: f382 8811 msr BASEPRI, r2
2a: b662 cpsie i
2c: 2200 movs r2, #0
2e: 4903 ldr r1, [pc, #12] ; (3c <QF_remove_+0x3c>)
30: f841 2025 str.w r2, [r1, r5, lsl #2]
34: 6062 str r2, [r4, #4]
36: f383 8811 msr BASEPRI, r3
3a: bd38 pop {r3, r4, r5, pc}
...
Disassembly of section .text.QF_bzero:
00000000 <QF_bzero>:
0: b129 cbz r1, e <QF_bzero+0xe>
2: 1841 adds r1, r0, r1
4: 2300 movs r3, #0
6: f800 3b01 strb.w r3, [r0], #1
a: 4281 cmp r1, r0
c: d1fb bne.n 6 <QF_bzero+0x6>
e: 4770 bx lr

File diff suppressed because it is too large Load Diff

View File

@ -1,7 +1,6 @@
<?xml version="1.0" encoding="iso-8859-1"?> <?xml version="1.0" encoding="UTF-8"?>
<project> <project>
<fileVersion>2</fileVersion> <fileVersion>3</fileVersion>
<configuration> <configuration>
<name>Debug</name> <name>Debug</name>
<toolchain> <toolchain>
@ -12,7 +11,7 @@
<name>General</name> <name>General</name>
<archiveVersion>3</archiveVersion> <archiveVersion>3</archiveVersion>
<data> <data>
<version>24</version> <version>28</version>
<wantNonLocal>1</wantNonLocal> <wantNonLocal>1</wantNonLocal>
<debug>1</debug> <debug>1</debug>
<option> <option>
@ -31,20 +30,10 @@
<name>GEndianMode</name> <name>GEndianMode</name>
<state>0</state> <state>0</state>
</option> </option>
<option>
<name>Input variant</name>
<version>3</version>
<state>6</state>
</option>
<option> <option>
<name>Input description</name> <name>Input description</name>
<state>No specifier n, no float nor long long, no scan set, no assignment suppressing.</state> <state>No specifier n, no float nor long long, no scan set, no assignment suppressing.</state>
</option> </option>
<option>
<name>Output variant</name>
<version>2</version>
<state>7</state>
</option>
<option> <option>
<name>Output description</name> <name>Output description</name>
<state>No specifier a, A, no specifier n, no float nor long long, no flags.</state> <state>No specifier a, A, no specifier n, no float nor long long, no flags.</state>
@ -77,7 +66,7 @@
</option> </option>
<option> <option>
<name>OGLastSavedByProductVersion</name> <name>OGLastSavedByProductVersion</name>
<state>7.60.1.11206</state> <state>8.11.1.13270</state>
</option> </option>
<option> <option>
<name>GeneralEnableMisra</name> <name>GeneralEnableMisra</name>
@ -127,7 +116,7 @@
</option> </option>
<option> <option>
<name>GBECoreSlave</name> <name>GBECoreSlave</name>
<version>24</version> <version>25</version>
<state>39</state> <state>39</state>
</option> </option>
<option> <option>
@ -144,7 +133,7 @@
</option> </option>
<option> <option>
<name>CoreVariant</name> <name>CoreVariant</name>
<version>24</version> <version>25</version>
<state>39</state> <state>39</state>
</option> </option>
<option> <option>
@ -167,16 +156,53 @@
</option> </option>
<option> <option>
<name>GFPUCoreSlave2</name> <name>GFPUCoreSlave2</name>
<version>24</version> <version>25</version>
<state>39</state> <state>39</state>
</option> </option>
<option>
<name>OGCMSISPackSelectDevice</name>
</option>
<option>
<name>OgLibHeap</name>
<state>0</state>
</option>
<option>
<name>OGLibAdditionalLocale</name>
<state>0</state>
</option>
<option>
<name>OGPrintfVariant</name>
<version>0</version>
<state>4</state>
</option>
<option>
<name>OGPrintfMultibyteSupport</name>
<state>0</state>
</option>
<option>
<name>OGScanfVariant</name>
<version>0</version>
<state>3</state>
</option>
<option>
<name>OGScanfMultibyteSupport</name>
<state>0</state>
</option>
<option>
<name>GenLocaleTags</name>
<state></state>
</option>
<option>
<name>GenLocaleDisplayOnly</name>
<state></state>
</option>
</data> </data>
</settings> </settings>
<settings> <settings>
<name>ICCARM</name> <name>ICCARM</name>
<archiveVersion>2</archiveVersion> <archiveVersion>2</archiveVersion>
<data> <data>
<version>31</version> <version>34</version>
<wantNonLocal>1</wantNonLocal> <wantNonLocal>1</wantNonLocal>
<debug>1</debug> <debug>1</debug>
<option> <option>
@ -280,10 +306,6 @@
<name>CCRequirePrototypes</name> <name>CCRequirePrototypes</name>
<state>1</state> <state>1</state>
</option> </option>
<option>
<name>CCMultibyteSupport</name>
<state>0</state>
</option>
<option> <option>
<name>CCDiagWarnAreErr</name> <name>CCDiagWarnAreErr</name>
<state>0</state> <state>0</state>
@ -330,10 +352,6 @@
<name>CCCodeSection</name> <name>CCCodeSection</name>
<state>.text</state> <state>.text</state>
</option> </option>
<option>
<name>IInterwork2</name>
<state>0</state>
</option>
<option> <option>
<name>IProcessorMode2</name> <name>IProcessorMode2</name>
<state>1</state> <state>1</state>
@ -385,18 +403,6 @@
<name>IccAllowVLA</name> <name>IccAllowVLA</name>
<state>0</state> <state>0</state>
</option> </option>
<option>
<name>IccCppDialect</name>
<state>1</state>
</option>
<option>
<name>IccExceptions</name>
<state>1</state>
</option>
<option>
<name>IccRTTI</name>
<state>1</state>
</option>
<option> <option>
<name>IccStaticDestr</name> <name>IccStaticDestr</name>
<state>1</state> <state>1</state>
@ -426,13 +432,37 @@
<name>CCGuardCalls</name> <name>CCGuardCalls</name>
<state>1</state> <state>1</state>
</option> </option>
<option>
<name>CCEncSource</name>
<state>0</state>
</option>
<option>
<name>CCEncOutput</name>
<state>0</state>
</option>
<option>
<name>CCEncOutputBom</name>
<state>1</state>
</option>
<option>
<name>CCEncInput</name>
<state>0</state>
</option>
<option>
<name>IccExceptions2</name>
<state>0</state>
</option>
<option>
<name>IccRTTI2</name>
<state>0</state>
</option>
</data> </data>
</settings> </settings>
<settings> <settings>
<name>AARM</name> <name>AARM</name>
<archiveVersion>2</archiveVersion> <archiveVersion>2</archiveVersion>
<data> <data>
<version>9</version> <version>10</version>
<wantNonLocal>1</wantNonLocal> <wantNonLocal>1</wantNonLocal>
<debug>1</debug> <debug>1</debug>
<option> <option>
@ -560,10 +590,6 @@
<name>AOutputFile</name> <name>AOutputFile</name>
<state>$FILE_BNAME$.o</state> <state>$FILE_BNAME$.o</state>
</option> </option>
<option>
<name>AMultibyteSupport</name>
<state>0</state>
</option>
<option> <option>
<name>ALimitErrorsCheck</name> <name>ALimitErrorsCheck</name>
<state>0</state> <state>0</state>
@ -636,7 +662,7 @@
<settings> <settings>
<name>BICOMP</name> <name>BICOMP</name>
<archiveVersion>0</archiveVersion> <archiveVersion>0</archiveVersion>
<data/> <data />
</settings> </settings>
<settings> <settings>
<name>BUILDACTION</name> <name>BUILDACTION</name>
@ -650,7 +676,7 @@
<name>ILINK</name> <name>ILINK</name>
<archiveVersion>0</archiveVersion> <archiveVersion>0</archiveVersion>
<data> <data>
<version>17</version> <version>20</version>
<wantNonLocal>1</wantNonLocal> <wantNonLocal>1</wantNonLocal>
<debug>1</debug> <debug>1</debug>
<option> <option>
@ -922,7 +948,7 @@
</option> </option>
<option> <option>
<name>CrcAlgorithm</name> <name>CrcAlgorithm</name>
<version>0</version> <version>1</version>
<state>1</state> <state>1</state>
</option> </option>
<option> <option>
@ -938,6 +964,30 @@
<name>IlinkLogCallGraph</name> <name>IlinkLogCallGraph</name>
<state>0</state> <state>0</state>
</option> </option>
<option>
<name>IlinkIcfFile_AltDefault</name>
<state></state>
</option>
<option>
<name>IlinkEncInput</name>
<state>0</state>
</option>
<option>
<name>IlinkEncOutput</name>
<state>0</state>
</option>
<option>
<name>IlinkEncOutputBom</name>
<state>1</state>
</option>
<option>
<name>IlinkHeapSelect</name>
<state>1</state>
</option>
<option>
<name>IlinkLocaleSelect</name>
<state>1</state>
</option>
</data> </data>
</settings> </settings>
<settings> <settings>
@ -964,12 +1014,12 @@
<settings> <settings>
<name>BILINK</name> <name>BILINK</name>
<archiveVersion>0</archiveVersion> <archiveVersion>0</archiveVersion>
<data/> <data />
</settings> </settings>
<settings> <settings>
<name>Coder</name> <name>Coder</name>
<archiveVersion>0</archiveVersion> <archiveVersion>0</archiveVersion>
<data/> <data />
</settings> </settings>
</configuration> </configuration>
<configuration> <configuration>
@ -982,7 +1032,7 @@
<name>General</name> <name>General</name>
<archiveVersion>3</archiveVersion> <archiveVersion>3</archiveVersion>
<data> <data>
<version>24</version> <version>28</version>
<wantNonLocal>1</wantNonLocal> <wantNonLocal>1</wantNonLocal>
<debug>0</debug> <debug>0</debug>
<option> <option>
@ -1001,20 +1051,10 @@
<name>GEndianMode</name> <name>GEndianMode</name>
<state>0</state> <state>0</state>
</option> </option>
<option>
<name>Input variant</name>
<version>3</version>
<state>6</state>
</option>
<option> <option>
<name>Input description</name> <name>Input description</name>
<state>No specifier n, no float nor long long, no scan set, no assignment suppressing.</state> <state>No specifier n, no float nor long long, no scan set, no assignment suppressing.</state>
</option> </option>
<option>
<name>Output variant</name>
<version>2</version>
<state>7</state>
</option>
<option> <option>
<name>Output description</name> <name>Output description</name>
<state>No specifier a, A, no specifier n, no float nor long long, no flags.</state> <state>No specifier a, A, no specifier n, no float nor long long, no flags.</state>
@ -1097,7 +1137,7 @@
</option> </option>
<option> <option>
<name>GBECoreSlave</name> <name>GBECoreSlave</name>
<version>24</version> <version>25</version>
<state>39</state> <state>39</state>
</option> </option>
<option> <option>
@ -1114,7 +1154,7 @@
</option> </option>
<option> <option>
<name>CoreVariant</name> <name>CoreVariant</name>
<version>24</version> <version>25</version>
<state>39</state> <state>39</state>
</option> </option>
<option> <option>
@ -1137,16 +1177,53 @@
</option> </option>
<option> <option>
<name>GFPUCoreSlave2</name> <name>GFPUCoreSlave2</name>
<version>24</version> <version>25</version>
<state>39</state> <state>39</state>
</option> </option>
<option>
<name>OGCMSISPackSelectDevice</name>
</option>
<option>
<name>OgLibHeap</name>
<state>0</state>
</option>
<option>
<name>OGLibAdditionalLocale</name>
<state>0</state>
</option>
<option>
<name>OGPrintfVariant</name>
<version>0</version>
<state>4</state>
</option>
<option>
<name>OGPrintfMultibyteSupport</name>
<state>0</state>
</option>
<option>
<name>OGScanfVariant</name>
<version>0</version>
<state>3</state>
</option>
<option>
<name>OGScanfMultibyteSupport</name>
<state>0</state>
</option>
<option>
<name>GenLocaleTags</name>
<state></state>
</option>
<option>
<name>GenLocaleDisplayOnly</name>
<state></state>
</option>
</data> </data>
</settings> </settings>
<settings> <settings>
<name>ICCARM</name> <name>ICCARM</name>
<archiveVersion>2</archiveVersion> <archiveVersion>2</archiveVersion>
<data> <data>
<version>31</version> <version>34</version>
<wantNonLocal>1</wantNonLocal> <wantNonLocal>1</wantNonLocal>
<debug>0</debug> <debug>0</debug>
<option> <option>
@ -1251,10 +1328,6 @@
<name>CCRequirePrototypes</name> <name>CCRequirePrototypes</name>
<state>1</state> <state>1</state>
</option> </option>
<option>
<name>CCMultibyteSupport</name>
<state>0</state>
</option>
<option> <option>
<name>CCDiagWarnAreErr</name> <name>CCDiagWarnAreErr</name>
<state>0</state> <state>0</state>
@ -1301,10 +1374,6 @@
<name>CCCodeSection</name> <name>CCCodeSection</name>
<state>.text</state> <state>.text</state>
</option> </option>
<option>
<name>IInterwork2</name>
<state>0</state>
</option>
<option> <option>
<name>IProcessorMode2</name> <name>IProcessorMode2</name>
<state>1</state> <state>1</state>
@ -1356,18 +1425,6 @@
<name>IccAllowVLA</name> <name>IccAllowVLA</name>
<state>0</state> <state>0</state>
</option> </option>
<option>
<name>IccCppDialect</name>
<state>1</state>
</option>
<option>
<name>IccExceptions</name>
<state>1</state>
</option>
<option>
<name>IccRTTI</name>
<state>1</state>
</option>
<option> <option>
<name>IccStaticDestr</name> <name>IccStaticDestr</name>
<state>1</state> <state>1</state>
@ -1397,13 +1454,37 @@
<name>CCGuardCalls</name> <name>CCGuardCalls</name>
<state>1</state> <state>1</state>
</option> </option>
<option>
<name>CCEncSource</name>
<state>0</state>
</option>
<option>
<name>CCEncOutput</name>
<state>0</state>
</option>
<option>
<name>CCEncOutputBom</name>
<state>1</state>
</option>
<option>
<name>CCEncInput</name>
<state>0</state>
</option>
<option>
<name>IccExceptions2</name>
<state>0</state>
</option>
<option>
<name>IccRTTI2</name>
<state>0</state>
</option>
</data> </data>
</settings> </settings>
<settings> <settings>
<name>AARM</name> <name>AARM</name>
<archiveVersion>2</archiveVersion> <archiveVersion>2</archiveVersion>
<data> <data>
<version>9</version> <version>10</version>
<wantNonLocal>1</wantNonLocal> <wantNonLocal>1</wantNonLocal>
<debug>0</debug> <debug>0</debug>
<option> <option>
@ -1531,10 +1612,6 @@
<name>AOutputFile</name> <name>AOutputFile</name>
<state>$FILE_BNAME$.o</state> <state>$FILE_BNAME$.o</state>
</option> </option>
<option>
<name>AMultibyteSupport</name>
<state>0</state>
</option>
<option> <option>
<name>ALimitErrorsCheck</name> <name>ALimitErrorsCheck</name>
<state>0</state> <state>0</state>
@ -1607,7 +1684,7 @@
<settings> <settings>
<name>BICOMP</name> <name>BICOMP</name>
<archiveVersion>0</archiveVersion> <archiveVersion>0</archiveVersion>
<data/> <data />
</settings> </settings>
<settings> <settings>
<name>BUILDACTION</name> <name>BUILDACTION</name>
@ -1621,7 +1698,7 @@
<name>ILINK</name> <name>ILINK</name>
<archiveVersion>0</archiveVersion> <archiveVersion>0</archiveVersion>
<data> <data>
<version>17</version> <version>20</version>
<wantNonLocal>1</wantNonLocal> <wantNonLocal>1</wantNonLocal>
<debug>0</debug> <debug>0</debug>
<option> <option>
@ -1893,7 +1970,7 @@
</option> </option>
<option> <option>
<name>CrcAlgorithm</name> <name>CrcAlgorithm</name>
<version>0</version> <version>1</version>
<state>1</state> <state>1</state>
</option> </option>
<option> <option>
@ -1909,6 +1986,30 @@
<name>IlinkLogCallGraph</name> <name>IlinkLogCallGraph</name>
<state>0</state> <state>0</state>
</option> </option>
<option>
<name>IlinkIcfFile_AltDefault</name>
<state></state>
</option>
<option>
<name>IlinkEncInput</name>
<state>0</state>
</option>
<option>
<name>IlinkEncOutput</name>
<state>0</state>
</option>
<option>
<name>IlinkEncOutputBom</name>
<state>1</state>
</option>
<option>
<name>IlinkHeapSelect</name>
<state>1</state>
</option>
<option>
<name>IlinkLocaleSelect</name>
<state>1</state>
</option>
</data> </data>
</settings> </settings>
<settings> <settings>
@ -1935,12 +2036,12 @@
<settings> <settings>
<name>BILINK</name> <name>BILINK</name>
<archiveVersion>0</archiveVersion> <archiveVersion>0</archiveVersion>
<data/> <data />
</settings> </settings>
<settings> <settings>
<name>Coder</name> <name>Coder</name>
<archiveVersion>0</archiveVersion> <archiveVersion>0</archiveVersion>
<data/> <data />
</settings> </settings>
</configuration> </configuration>
<configuration> <configuration>
@ -1953,7 +2054,7 @@
<name>General</name> <name>General</name>
<archiveVersion>3</archiveVersion> <archiveVersion>3</archiveVersion>
<data> <data>
<version>24</version> <version>28</version>
<wantNonLocal>1</wantNonLocal> <wantNonLocal>1</wantNonLocal>
<debug>1</debug> <debug>1</debug>
<option> <option>
@ -1972,20 +2073,10 @@
<name>GEndianMode</name> <name>GEndianMode</name>
<state>0</state> <state>0</state>
</option> </option>
<option>
<name>Input variant</name>
<version>3</version>
<state>6</state>
</option>
<option> <option>
<name>Input description</name> <name>Input description</name>
<state>No specifier n, no float nor long long, no scan set, no assignment suppressing.</state> <state>No specifier n, no float nor long long, no scan set, no assignment suppressing.</state>
</option> </option>
<option>
<name>Output variant</name>
<version>2</version>
<state>7</state>
</option>
<option> <option>
<name>Output description</name> <name>Output description</name>
<state>No specifier a, A, no specifier n, no float nor long long, no flags.</state> <state>No specifier a, A, no specifier n, no float nor long long, no flags.</state>
@ -2068,7 +2159,7 @@
</option> </option>
<option> <option>
<name>GBECoreSlave</name> <name>GBECoreSlave</name>
<version>24</version> <version>25</version>
<state>39</state> <state>39</state>
</option> </option>
<option> <option>
@ -2085,7 +2176,7 @@
</option> </option>
<option> <option>
<name>CoreVariant</name> <name>CoreVariant</name>
<version>24</version> <version>25</version>
<state>39</state> <state>39</state>
</option> </option>
<option> <option>
@ -2108,16 +2199,53 @@
</option> </option>
<option> <option>
<name>GFPUCoreSlave2</name> <name>GFPUCoreSlave2</name>
<version>24</version> <version>25</version>
<state>39</state> <state>39</state>
</option> </option>
<option>
<name>OGCMSISPackSelectDevice</name>
</option>
<option>
<name>OgLibHeap</name>
<state>0</state>
</option>
<option>
<name>OGLibAdditionalLocale</name>
<state>0</state>
</option>
<option>
<name>OGPrintfVariant</name>
<version>0</version>
<state>4</state>
</option>
<option>
<name>OGPrintfMultibyteSupport</name>
<state>0</state>
</option>
<option>
<name>OGScanfVariant</name>
<version>0</version>
<state>3</state>
</option>
<option>
<name>OGScanfMultibyteSupport</name>
<state>0</state>
</option>
<option>
<name>GenLocaleTags</name>
<state></state>
</option>
<option>
<name>GenLocaleDisplayOnly</name>
<state></state>
</option>
</data> </data>
</settings> </settings>
<settings> <settings>
<name>ICCARM</name> <name>ICCARM</name>
<archiveVersion>2</archiveVersion> <archiveVersion>2</archiveVersion>
<data> <data>
<version>31</version> <version>34</version>
<wantNonLocal>1</wantNonLocal> <wantNonLocal>1</wantNonLocal>
<debug>1</debug> <debug>1</debug>
<option> <option>
@ -2222,10 +2350,6 @@
<name>CCRequirePrototypes</name> <name>CCRequirePrototypes</name>
<state>1</state> <state>1</state>
</option> </option>
<option>
<name>CCMultibyteSupport</name>
<state>0</state>
</option>
<option> <option>
<name>CCDiagWarnAreErr</name> <name>CCDiagWarnAreErr</name>
<state>0</state> <state>0</state>
@ -2272,10 +2396,6 @@
<name>CCCodeSection</name> <name>CCCodeSection</name>
<state>.text</state> <state>.text</state>
</option> </option>
<option>
<name>IInterwork2</name>
<state>0</state>
</option>
<option> <option>
<name>IProcessorMode2</name> <name>IProcessorMode2</name>
<state>1</state> <state>1</state>
@ -2327,18 +2447,6 @@
<name>IccAllowVLA</name> <name>IccAllowVLA</name>
<state>0</state> <state>0</state>
</option> </option>
<option>
<name>IccCppDialect</name>
<state>1</state>
</option>
<option>
<name>IccExceptions</name>
<state>1</state>
</option>
<option>
<name>IccRTTI</name>
<state>1</state>
</option>
<option> <option>
<name>IccStaticDestr</name> <name>IccStaticDestr</name>
<state>1</state> <state>1</state>
@ -2368,13 +2476,37 @@
<name>CCGuardCalls</name> <name>CCGuardCalls</name>
<state>1</state> <state>1</state>
</option> </option>
<option>
<name>CCEncSource</name>
<state>0</state>
</option>
<option>
<name>CCEncOutput</name>
<state>0</state>
</option>
<option>
<name>CCEncOutputBom</name>
<state>1</state>
</option>
<option>
<name>CCEncInput</name>
<state>0</state>
</option>
<option>
<name>IccExceptions2</name>
<state>0</state>
</option>
<option>
<name>IccRTTI2</name>
<state>0</state>
</option>
</data> </data>
</settings> </settings>
<settings> <settings>
<name>AARM</name> <name>AARM</name>
<archiveVersion>2</archiveVersion> <archiveVersion>2</archiveVersion>
<data> <data>
<version>9</version> <version>10</version>
<wantNonLocal>1</wantNonLocal> <wantNonLocal>1</wantNonLocal>
<debug>1</debug> <debug>1</debug>
<option> <option>
@ -2502,10 +2634,6 @@
<name>AOutputFile</name> <name>AOutputFile</name>
<state>$FILE_BNAME$.o</state> <state>$FILE_BNAME$.o</state>
</option> </option>
<option>
<name>AMultibyteSupport</name>
<state>0</state>
</option>
<option> <option>
<name>ALimitErrorsCheck</name> <name>ALimitErrorsCheck</name>
<state>0</state> <state>0</state>
@ -2578,7 +2706,7 @@
<settings> <settings>
<name>BICOMP</name> <name>BICOMP</name>
<archiveVersion>0</archiveVersion> <archiveVersion>0</archiveVersion>
<data/> <data />
</settings> </settings>
<settings> <settings>
<name>BUILDACTION</name> <name>BUILDACTION</name>
@ -2592,7 +2720,7 @@
<name>ILINK</name> <name>ILINK</name>
<archiveVersion>0</archiveVersion> <archiveVersion>0</archiveVersion>
<data> <data>
<version>17</version> <version>20</version>
<wantNonLocal>1</wantNonLocal> <wantNonLocal>1</wantNonLocal>
<debug>1</debug> <debug>1</debug>
<option> <option>
@ -2864,7 +2992,7 @@
</option> </option>
<option> <option>
<name>CrcAlgorithm</name> <name>CrcAlgorithm</name>
<version>0</version> <version>1</version>
<state>1</state> <state>1</state>
</option> </option>
<option> <option>
@ -2880,6 +3008,30 @@
<name>IlinkLogCallGraph</name> <name>IlinkLogCallGraph</name>
<state>0</state> <state>0</state>
</option> </option>
<option>
<name>IlinkIcfFile_AltDefault</name>
<state></state>
</option>
<option>
<name>IlinkEncInput</name>
<state>0</state>
</option>
<option>
<name>IlinkEncOutput</name>
<state>0</state>
</option>
<option>
<name>IlinkEncOutputBom</name>
<state>1</state>
</option>
<option>
<name>IlinkHeapSelect</name>
<state>1</state>
</option>
<option>
<name>IlinkLocaleSelect</name>
<state>1</state>
</option>
</data> </data>
</settings> </settings>
<settings> <settings>
@ -2906,12 +3058,12 @@
<settings> <settings>
<name>BILINK</name> <name>BILINK</name>
<archiveVersion>0</archiveVersion> <archiveVersion>0</archiveVersion>
<data/> <data />
</settings> </settings>
<settings> <settings>
<name>Coder</name> <name>Coder</name>
<archiveVersion>0</archiveVersion> <archiveVersion>0</archiveVersion>
<data/> <data />
</settings> </settings>
</configuration> </configuration>
<group> <group>
@ -3036,5 +3188,3 @@
</file> </file>
</group> </group>
</project> </project>

View File

@ -28,7 +28,7 @@
* along with this program. If not, see <http://www.gnu.org/licenses/>. * along with this program. If not, see <http://www.gnu.org/licenses/>.
* *
* Contact information: * Contact information:
* http://www.state-machine.com * https://state-machine.com
* mailto:info@state-machine.com * mailto:info@state-machine.com
*****************************************************************************/ *****************************************************************************/
#include "qpc.h" #include "qpc.h"

View File

@ -28,7 +28,7 @@
# along with this program. If not, see <http://www.gnu.org/licenses/>. # along with this program. If not, see <http://www.gnu.org/licenses/>.
# #
# Contact information: # Contact information:
# http://www.state-machine.com # https://state-machine.com
# mailto:info@state-machine.com # mailto:info@state-machine.com
############################################################################## ##############################################################################
# examples of invoking this Makefile: # examples of invoking this Makefile:

View File

@ -28,7 +28,7 @@
# along with this program. If not, see <http://www.gnu.org/licenses/>. # along with this program. If not, see <http://www.gnu.org/licenses/>.
# #
# Contact information: # Contact information:
# http://www.state-machine.com # https://state-machine.com
# mailto:info@state-machine.com # mailto:info@state-machine.com
############################################################################## ##############################################################################
# examples of invoking this Makefile: # examples of invoking this Makefile:

View File

@ -28,7 +28,7 @@
* along with this program. If not, see <http://www.gnu.org/licenses/>. * along with this program. If not, see <http://www.gnu.org/licenses/>.
* *
* Contact information: * Contact information:
* http://www.state-machine.com * https://state-machine.com
* mailto:info@state-machine.com * mailto:info@state-machine.com
*****************************************************************************/ *****************************************************************************/
#include "qpc.h" #include "qpc.h"

View File

@ -28,7 +28,7 @@
# along with this program. If not, see <http://www.gnu.org/licenses/>. # along with this program. If not, see <http://www.gnu.org/licenses/>.
# #
# Contact information: # Contact information:
# http://www.state-machine.com # https://state-machine.com
# mailto:info@state-machine.com # mailto:info@state-machine.com
############################################################################## ##############################################################################
# examples of invoking this Makefile: # examples of invoking this Makefile:

View File

@ -28,7 +28,7 @@
* along with this program. If not, see <http://www.gnu.org/licenses/>. * along with this program. If not, see <http://www.gnu.org/licenses/>.
* *
* Contact information: * Contact information:
* http://www.state-machine.com * https://state-machine.com
* mailto:info@state-machine.com * mailto:info@state-machine.com
*****************************************************************************/ *****************************************************************************/
#include "qpc.h" #include "qpc.h"

View File

@ -28,7 +28,7 @@
* along with this program. If not, see <http://www.gnu.org/licenses/>. * along with this program. If not, see <http://www.gnu.org/licenses/>.
* *
* Contact information: * Contact information:
* Web : http://www.state-machine.com * Web : https://state-machine.com
* Email: info@state-machine.com * Email: info@state-machine.com
*****************************************************************************/ *****************************************************************************/
#ifndef blinky_h #ifndef blinky_h

View File

@ -28,7 +28,7 @@
* along with this program. If not, see <http://www.gnu.org/licenses/>. * along with this program. If not, see <http://www.gnu.org/licenses/>.
* *
* Contact information: * Contact information:
* http://www.state-machine.com * https://state-machine.com
* mailto:info@state-machine.com * mailto:info@state-machine.com
*****************************************************************************/ *****************************************************************************/
#ifndef bsp_h #ifndef bsp_h

View File

@ -28,7 +28,7 @@
* along with this program. If not, see <http://www.gnu.org/licenses/>. * along with this program. If not, see <http://www.gnu.org/licenses/>.
* *
* Contact information: * Contact information:
* Web : http://www.state-machine.com * Web : https://state-machine.com
* Email: info@state-machine.com * Email: info@state-machine.com
*****************************************************************************/ *****************************************************************************/
#include "qpc.h" #include "qpc.h"

View File

@ -28,7 +28,7 @@
* along with this program. If not, see <http://www.gnu.org/licenses/>. * along with this program. If not, see <http://www.gnu.org/licenses/>.
* *
* Contact information: * Contact information:
* http://www.state-machine.com * https://state-machine.com
* mailto:info@state-machine.com * mailto:info@state-machine.com
*****************************************************************************/ *****************************************************************************/
#include "qpc.h" #include "qpc.h"

View File

@ -28,7 +28,7 @@
# along with this program. If not, see <http://www.gnu.org/licenses/>. # along with this program. If not, see <http://www.gnu.org/licenses/>.
# #
# Contact information: # Contact information:
# http://www.state-machine.com # https://state-machine.com
# mailto:info@state-machine.com # mailto:info@state-machine.com
############################################################################## ##############################################################################
# examples of invoking this Makefile: # examples of invoking this Makefile:

View File

@ -28,7 +28,7 @@
* along with this program. If not, see <http://www.gnu.org/licenses/>. * along with this program. If not, see <http://www.gnu.org/licenses/>.
* *
* Contact information: * Contact information:
* http://www.state-machine.com * https://state-machine.com
* mailto:info@state-machine.com * mailto:info@state-machine.com
*****************************************************************************/ *****************************************************************************/
#include "qpc.h" #include "qpc.h"

View File

@ -28,7 +28,7 @@
# along with this program. If not, see <http://www.gnu.org/licenses/>. # along with this program. If not, see <http://www.gnu.org/licenses/>.
# #
# Contact information: # Contact information:
# http://www.state-machine.com # https://state-machine.com
# mailto:info@state-machine.com # mailto:info@state-machine.com
############################################################################## ##############################################################################
# examples of invoking this Makefile: # examples of invoking this Makefile:

View File

@ -28,7 +28,7 @@
# along with this program. If not, see <http://www.gnu.org/licenses/>. # along with this program. If not, see <http://www.gnu.org/licenses/>.
# #
# Contact information: # Contact information:
# http://www.state-machine.com # https://state-machine.com
# mailto:info@state-machine.com # mailto:info@state-machine.com
############################################################################## ##############################################################################
# examples of invoking this Makefile: # examples of invoking this Makefile:

View File

@ -28,7 +28,7 @@
* along with this program. If not, see <http://www.gnu.org/licenses/>. * along with this program. If not, see <http://www.gnu.org/licenses/>.
* *
* Contact information: * Contact information:
* http://www.state-machine.com * https://state-machine.com
* mailto:info@state-machine.com * mailto:info@state-machine.com
*****************************************************************************/ *****************************************************************************/
#include "qpc.h" #include "qpc.h"

View File

@ -28,7 +28,7 @@
# along with this program. If not, see <http://www.gnu.org/licenses/>. # along with this program. If not, see <http://www.gnu.org/licenses/>.
# #
# Contact information: # Contact information:
# http://www.state-machine.com # https://state-machine.com
# mailto:info@state-machine.com # mailto:info@state-machine.com
############################################################################## ##############################################################################
# examples of invoking this Makefile: # examples of invoking this Makefile:

View File

@ -28,7 +28,7 @@
* along with this program. If not, see <http://www.gnu.org/licenses/>. * along with this program. If not, see <http://www.gnu.org/licenses/>.
* *
* Contact information: * Contact information:
* http://www.state-machine.com * https://state-machine.com
* mailto:info@state-machine.com * mailto:info@state-machine.com
*****************************************************************************/ *****************************************************************************/
#include "qpc.h" #include "qpc.h"

View File

@ -28,7 +28,7 @@
* along with this program. If not, see <http://www.gnu.org/licenses/>. * along with this program. If not, see <http://www.gnu.org/licenses/>.
* *
* Contact information: * Contact information:
* http://www.state-machine.com * https://state-machine.com
* mailto:info@state-machine.com * mailto:info@state-machine.com
*****************************************************************************/ *****************************************************************************/
#ifndef bsp_h #ifndef bsp_h

View File

@ -310,7 +310,7 @@
</ArmAdsMisc> </ArmAdsMisc>
<Cads> <Cads>
<interw>0</interw> <interw>0</interw>
<Optim>1</Optim> <Optim>2</Optim>
<oTime>0</oTime> <oTime>0</oTime>
<SplitLS>0</SplitLS> <SplitLS>0</SplitLS>
<OneElfS>1</OneElfS> <OneElfS>1</OneElfS>
@ -1562,7 +1562,7 @@
</ArmAdsMisc> </ArmAdsMisc>
<Cads> <Cads>
<interw>0</interw> <interw>0</interw>
<Optim>1</Optim> <Optim>2</Optim>
<oTime>0</oTime> <oTime>0</oTime>
<SplitLS>0</SplitLS> <SplitLS>0</SplitLS>
<OneElfS>1</OneElfS> <OneElfS>1</OneElfS>

View File

@ -1,7 +1,7 @@
/***************************************************************************** /*****************************************************************************
* Product: DPP example, EFM32-SLSTK3401A board, preemptive QK kernel * Product: DPP example, EFM32-SLSTK3401A board, preemptive QK kernel
* Last Updated for Version: 5.8.1 * Last Updated for Version: 5.9.0
* Date of the Last Update: 2016-12-14 * Date of the Last Update: 2017-4-13
* *
* Q u a n t u m L e a P s * Q u a n t u m L e a P s
* --------------------------- * ---------------------------
@ -28,7 +28,7 @@
* along with this program. If not, see <http://www.gnu.org/licenses/>. * along with this program. If not, see <http://www.gnu.org/licenses/>.
* *
* Contact information: * Contact information:
* http://www.state-machine.com * https://state-machine.com
* mailto:info@state-machine.com * mailto:info@state-machine.com
*****************************************************************************/ *****************************************************************************/
#include "qpc.h" #include "qpc.h"
@ -118,7 +118,7 @@ void SysTick_Handler(void) {
#endif #endif
//QF_TICK_X(0U, &l_SysTick_Handler); /* process time events for rate 0 */ //QF_TICK_X(0U, &l_SysTick_Handler); /* process time events for rate 0 */
QACTIVE_POST(the_Ticker0, 0, &l_SysTick_Handler); // post to Ticker0 */ QACTIVE_POST(the_Ticker0, 0, &l_SysTick_Handler); /* post to Ticker0 */
/* Perform the debouncing of buttons. The algorithm for debouncing /* Perform the debouncing of buttons. The algorithm for debouncing
* adapted from the book "Embedded Systems Dictionary" by Jack Ganssle * adapted from the book "Embedded Systems Dictionary" by Jack Ganssle
@ -144,7 +144,7 @@ void SysTick_Handler(void) {
QK_ISR_EXIT(); /* inform QK about exiting an ISR */ QK_ISR_EXIT(); /* inform QK about exiting an ISR */
} }
/*..........................................................................*/ /*..........................................................................*/
void GPIO_EVEN_IRQHandler(void) { /* to be triggered from debugger, NOTE03 */ void GPIO_EVEN_IRQHandler(void) { /* for testing, NOTE03 */
QK_ISR_ENTRY(); /* inform QK about entering an ISR */ QK_ISR_ENTRY(); /* inform QK about entering an ISR */
QACTIVE_POST(AO_Table, Q_NEW(QEvt, MAX_PUB_SIG), /* for testing... */ QACTIVE_POST(AO_Table, Q_NEW(QEvt, MAX_PUB_SIG), /* for testing... */
@ -232,6 +232,12 @@ void BSP_init(void) {
} }
/*..........................................................................*/ /*..........................................................................*/
void BSP_displayPhilStat(uint8_t n, char const *stat) { void BSP_displayPhilStat(uint8_t n, char const *stat) {
QS_TEST_PROBE_DEF(&BSP_displayPhilStat)
QS_TEST_PROBE_ID(1,
stat = "Unknown";
)
if (stat[0] == 'e') { if (stat[0] == 'e') {
GPIO->P[LED_PORT].DOUT |= (1U << LED0_PIN); GPIO->P[LED_PORT].DOUT |= (1U << LED0_PIN);
} }
@ -473,13 +479,19 @@ void QS_onReset(void) {
} }
/*..........................................................................*/ /*..........................................................................*/
/*! callback function to execute a user command (to be implemented in BSP) */ /*! callback function to execute a user command (to be implemented in BSP) */
void QS_onCommand(uint8_t cmdId, uint32_t param) { void QS_onCommand(uint8_t cmdId,
uint32_t param1, uint32_t param2, uint32_t param3)
{
void assert_failed(char const *module, int loc); void assert_failed(char const *module, int loc);
(void)cmdId; (void)cmdId;
(void)param; (void)param1;
(void)param2;
(void)param3;
QS_BEGIN(COMMAND_STAT, (void *)1) /* application-specific record begin */ QS_BEGIN(COMMAND_STAT, (void *)1) /* application-specific record begin */
QS_U8(2, cmdId); QS_U8(2, cmdId);
QS_U32(8, param); QS_U32(8, param1);
QS_U32(8, param2);
QS_U32(8, param3);
QS_END() QS_END()
if (cmdId == 10U) { if (cmdId == 10U) {
@ -519,6 +531,11 @@ void QS_onCommand(uint8_t cmdId, uint32_t param) {
* execution time contributes to the brightness of the User LED. * execution time contributes to the brightness of the User LED.
* *
* NOTE03: * NOTE03:
* To trigger GPIO_EVEN_IRQHandler() from debugger: * GPIO_EVEN_IRQHandler() is for testing various preemption scenarios in QK.
* IAR EWARM: go to the NVIC_ISPR0 register and write 0x200 to SETPEND. * The general testing strategy is to trigger this IRQ manually from the
* debugger. To do so in IAR, you need to:
* 1. open the Register view
* 2. open NVIC registers
* 3. scroll down to NVIC_ISPR0 register
* 4. write 0x200 to NVIC_ISPR0.SETPEND register
*/ */

View File

@ -28,7 +28,7 @@
# along with this program. If not, see <http://www.gnu.org/licenses/>. # along with this program. If not, see <http://www.gnu.org/licenses/>.
# #
# Contact information: # Contact information:
# http://www.state-machine.com # https://state-machine.com
# mailto:info@state-machine.com # mailto:info@state-machine.com
############################################################################## ##############################################################################
# examples of invoking this Makefile: # examples of invoking this Makefile:

View File

@ -1,13 +1,13 @@
/***************************************************************************** /*****************************************************************************
* Product: DPP example * Product: DPP example
* Last Updated for Version: 5.8.1 * Last Updated for Version: 5.9.0
* Date of the Last Update: 2016-12-14 * Date of the Last Update: 2017-03-13
* *
* Q u a n t u m L e a P s * Q u a n t u m L e a P s
* --------------------------- * ---------------------------
* innovating embedded systems * innovating embedded systems
* *
* Copyright (C) Quantum Leaps, LLC. state-machine.com. * Copyright (C) 2005-2017 Quantum Leaps, LLC. All rights reserved.
* *
* This program is open source software: you can redistribute it and/or * This program is open source software: you can redistribute it and/or
* modify it under the terms of the GNU General Public License as published * modify it under the terms of the GNU General Public License as published
@ -28,8 +28,8 @@
* along with this program. If not, see <http://www.gnu.org/licenses/>. * along with this program. If not, see <http://www.gnu.org/licenses/>.
* *
* Contact information: * Contact information:
* Web : http://www.state-machine.com * https://state-machine.com
* Email: info@state-machine.com * mailto:info@state-machine.com
*****************************************************************************/ *****************************************************************************/
#include "qpc.h" #include "qpc.h"
#include "dpp.h" #include "dpp.h"

View File

@ -1,381 +0,0 @@
#-----------------------------------------------------------------------------
# Product: QSpyView -- Customization example for DPP application
# Last updated for version 5.6.4
# Last updated on 2016-04-25
#
# Q u a n t u m L e a P s
# ---------------------------
# innovating embedded systems
#
# Copyright (C) Quantum Leaps, LLC, All rights reserved.
#
# This program is open source software: you can redistribute it and/or
# modify it under the terms of the GNU General Public License as published
# by the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
#
# Alternatively, this program may be distributed and modified under the
# terms of Quantum Leaps commercial licenses, which expressly supersede
# the GNU General Public License and are specifically designed for
# licensees interested in retaining the proprietary status of their code.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>.
#
# Contact information:
# http://www.state-machine.com
# mailto:info@state-machine.com
#-----------------------------------------------------------------------------
# command handlers ===========================================================
proc onMyCommand {} {
# do something here, for example:
# - inject an event to the Target
# - send a command to the Target
# - peek memory
# - poke memory
# - exectute system tick in the Target
# - open a dialog box...
# - etc.
# as an example, the following code sends a command to the Target
variable ::qspy::QS_RX
::qspy::sendPkt [binary format cci $::qspy::QS_RX(COMMAND) 1 12345]
}
proc onPause {} {
global theButtonId theBtnState
if {[string equal $theBtnState BTN_UP]} { ;# is DWN?
set theBtnState BTN_DWN
::qspy::sendEvent 6 6 0
} else {
set theBtnState BTN_UP
::qspy::sendEvent 6 7 0
}
.canv.c itemconfigure $theButtonId -image ::img::$theBtnState
}
# additinal menu options =====================================================
.mbar.cust add command -label "MyCommand" -command onMyCommand
# specific canvas for DPP ====================================================
set scriptFolder [file dirname [file normalize [info script]]]
image create photo ::img::e -file $scriptFolder/img/eating.gif
image create photo ::img::h -file $scriptFolder/img/hungry.gif
image create photo ::img::t -file $scriptFolder/img/thinking.gif
image create photo ::img::BTN_UP -file $scriptFolder/img/BTN_UP.gif
image create photo ::img::BTN_DWN -file $scriptFolder/img/BTN_DWN.gif
wm geometry .canv =400x260
.canv.c configure -width 400
.canv.c configure -height 260
set thePhiloId [.canv.c create image 190 57 -image ::img::t]
.canv.c create image 273 100 -image ::img::t
.canv.c create image 237 185 -image ::img::t
.canv.c create image 146 184 -image ::img::t
.canv.c create image 107 100 -image ::img::t
set theButtonId [.canv.c create image 200 120 -image ::img::BTN_UP]
set theBtnState BTN_UP
.canv.c bind $theButtonId <ButtonPress-1> onPause
# QS record handlers =========================================================
# user record handlers [70..0x7C] --------------------------------------------
proc ::qspy::rec70 {} { ;# QS_USER
variable thePkt
variable theFmt
binary scan $thePkt xx$theFmt(tstamp)xcxa* \
tstamp philoNum stat
dispTxt [format "%010u Philo %1d is %s" $tstamp $philoNum $stat]
global thePhiloId
set img [string index $stat 0]
.canv.c itemconfigure [expr $thePhiloId + $philoNum] -image ::img::$img
}
#.............................................................................
proc ::qspy::rec71 {} { ;# QS_USER + 1
variable thePkt
variable theFmt
binary scan $thePkt xx$theFmt(tstamp)xcxi \
tstamp cmdId param
dispTxt [format "%010u cmd=%d param=%d" $tstamp $cmdId $param]
}
proc ::qspy::rec72 {} { ;# QS_USER + 2
}
proc ::qspy::rec73 {} { ;# QS_USER + 3
}
proc ::qspy::rec74 {} { ;# QS_USER + 4
}
proc ::qspy::rec75 {} { ;# QS_USER + 5
}
proc ::qspy::rec76 {} { ;# QS_USER + 6
}
proc ::qspy::rec77 {} { ;# QS_USER + 7
}
proc ::qspy::rec78 {} { ;# QS_USER + 8
}
proc ::qspy::rec79 {} { ;# QS_USER + 9
}
proc ::qspy::rec80 {} { ;# QS_USER + 10
}
proc ::qspy::rec81 {} { ;# QS_USER + 11
}
proc ::qspy::rec82 {} { ;# QS_USER + 12
}
proc ::qspy::rec83 {} { ;# QS_USER + 13
}
proc ::qspy::rec84 {} { ;# QS_USER + 14
}
proc ::qspy::rec85 {} { ;# QS_USER + 15
}
proc ::qspy::rec86 {} { ;# QS_USER + 16
}
proc ::qspy::rec87 {} { ;# QS_USER + 17
}
proc ::qspy::rec88 {} { ;# QS_USER + 18
}
proc ::qspy::rec89 {} { ;# QS_USER + 19
}
proc ::qspy::rec90 {} { ;# QS_USER + 20
}
proc ::qspy::rec91 {} { ;# QS_USER + 21
}
proc ::qspy::rec92 {} { ;# QS_USER + 22
}
proc ::qspy::rec93 {} { ;# QS_USER + 23
}
proc ::qspy::rec94 {} { ;# QS_USER + 24
}
proc ::qspy::rec95 {} { ;# QS_USER + 25
}
proc ::qspy::rec96 {} { ;# QS_USER + 26
}
proc ::qspy::rec97 {} { ;# QS_USER + 27
}
proc ::qspy::rec98 {} { ;# QS_USER + 28
}
proc ::qspy::rec99 {} { ;# QS_USER + 29
}
proc ::qspy::rec100 {} { ;# QS_USER + 30
}
proc ::qspy::rec101 {} { ;# QS_USER + 31
}
proc ::qspy::rec102 {} { ;# QS_USER + 32
}
proc ::qspy::rec103 {} { ;# QS_USER + 33
}
proc ::qspy::rec104 {} { ;# QS_USER + 34
}
proc ::qspy::rec105 {} { ;# QS_USER + 35
}
proc ::qspy::rec106 {} { ;# QS_USER + 36
}
proc ::qspy::rec107 {} { ;# QS_USER + 37
}
proc ::qspy::rec108 {} { ;# QS_USER + 38
}
proc ::qspy::rec109 {} { ;# QS_USER + 39
}
proc ::qspy::rec110 {} { ;# QS_USER + 40
}
proc ::qspy::rec111 {} { ;# QS_USER + 41
}
proc ::qspy::rec112 {} { ;# QS_USER + 42
}
proc ::qspy::rec113 {} { ;# QS_USER + 43
}
proc ::qspy::rec114 {} { ;# QS_USER + 44
}
proc ::qspy::rec115 {} { ;# QS_USER + 45
}
proc ::qspy::rec116 {} { ;# QS_USER + 46
}
proc ::qspy::rec117 {} { ;# QS_USER + 47
}
proc ::qspy::rec118 {} { ;# QS_USER + 48
}
proc ::qspy::rec119 {} { ;# QS_USER + 49
}
proc ::qspy::rec120 {} { ;# QS_USER + 50
}
proc ::qspy::rec121 {} { ;# QS_USER + 51
}
proc ::qspy::rec122 {} { ;# QS_USER + 52
}
proc ::qspy::rec123 {} { ;# QS_USER + 53
}
proc ::qspy::rec124 {} { ;# QS_USER + 54
}
# special record handlers ----------------------------------------------------
proc ::qspy::recRESET {} { ;# target reset callback
}
proc ::qspy::recINFO {} { ;# target info callback
}
# standard record handlers [1..54] -------------------------------------------
proc ::qspy::rec0 {} { ;# QS_EMPTY
}
# [1] QEP records...
proc ::qspy::rec1 {} { ;# QS_QEP_STATE_ENTRY
}
proc ::qspy::rec2 {} { ;# QS_QEP_STATE_EXIT
}
proc ::qspy::rec3 {} { ;# QS_QEP_STATE_INIT
}
proc ::qspy::rec4 {} { ;# QS_QEP_INIT_TRAN
}
proc ::qspy::rec5 {} { ;# QS_QEP_INTERN_TRAN
}
proc ::qspy::rec6 {} { ;# QS_QEP_TRAN
}
proc ::qspy::rec7 {} { ;# QS_QEP_IGNORED
}
proc ::qspy::rec8 {} { ;# QS_QEP_DISPATCH
}
proc ::qspy::rec9 {} { ;# QS_QEP_UNHANDLED
}
# [10] QF records...
proc ::qspy::rec10 {} { ;# QS_QF_ACTIVE_ADD
}
proc ::qspy::rec11 {} { ;# QS_QF_ACTIVE_REMOVE
}
proc ::qspy::rec12 {} { ;# QS_QF_ACTIVE_SUBSCRIBE
}
proc ::qspy::rec13 {} { ;# QS_QF_ACTIVE_UNSUBSCRIBE
}
proc ::qspy::rec14 {} { ;# QS_QF_ACTIVE_POST_FIFO
}
proc ::qspy::rec15 {} { ;# QS_QF_ACTIVE_POST_LIFO
}
proc ::qspy::rec16 {} { ;# QS_QF_ACTIVE_GET
}
proc ::qspy::rec17 {} { ;# QS_QF_ACTIVE_GET_LAST
}
proc ::qspy::rec18 {} { ;# QS_QF_EQUEUE_INIT
}
proc ::qspy::rec19 {} { ;# QS_QF_EQUEUE_POST_FIFO
}
proc ::qspy::rec20 {} { ;# QS_QF_EQUEUE_POST_LIFO
}
proc ::qspy::rec21 {} { ;# QS_QF_EQUEUE_GET
}
proc ::qspy::rec22 {} { ;# QS_QF_EQUEUE_GET_LAST
}
proc ::qspy::rec23 {} { ;# QS_QF_MPOOL_INIT
}
proc ::qspy::rec24 {} { ;# QS_QF_MPOOL_GET
}
proc ::qspy::rec25 {} { ;# QS_QF_MPOOL_PUT
}
proc ::qspy::rec26 {} { ;# QS_QF_PUBLISH
}
proc ::qspy::rec27 {} { ;# QS_QF_RESERVED8
}
proc ::qspy::rec28 {} { ;# QS_QF_NEW
}
proc ::qspy::rec29 {} { ;# QS_QF_GC_ATTEMPT
}
proc ::qspy::rec30 {} { ;# QS_QF_GC
}
proc ::qspy::rec31 {} { ;# QS_QF_TICK
}
proc ::qspy::rec32 {} { ;# QS_QF_TIMEEVT_ARM
}
proc ::qspy::rec33 {} { ;# QS_QF_TIMEEVT_AUTO_DISARM
}
proc ::qspy::rec34 {} { ;# QS_QF_TIMEEVT_DISARM_ATTEMPT
}
proc ::qspy::rec35 {} { ;# QS_QF_TIMEEVT_DISARM
}
proc ::qspy::rec36 {} { ;# QS_QF_TIMEEVT_REARM
}
proc ::qspy::rec37 {} { ;# QS_QF_TIMEEVT_POST
}
proc ::qspy::rec38 {} { ;# QS_QF_TIMEEVT_CTR
}
proc ::qspy::rec39 {} { ;# QS_QF_CRIT_ENTRY
}
proc ::qspy::rec40 {} { ;# QS_QF_CRIT_EXIT
}
proc ::qspy::rec41 {} { ;# QS_QF_ISR_ENTRY
}
proc ::qspy::rec42 {} { ;# QS_QF_ISR_EXIT
}
proc ::qspy::rec43 {} { ;# QS_QF_INT_DISABLE
}
proc ::qspy::rec44 {} { ;# QS_QF_INT_ENABLE
}
proc ::qspy::rec45 {} { ;# QS_QF_ACTIVE_POST_ATTEMPT
}
proc ::qspy::rec46 {} { ;# QS_QF_EQUEUE_POST_ATTEMPT
}
proc ::qspy::rec47 {} { ;# QS_QF_MPOOL_GET_ATTEMPT
}
proc ::qspy::rec48 {} { ;# QS_QF_RESERVED1
}
proc ::qspy::rec49 {} { ;# QS_QF_RESERVED0
}
# [50] QK/QV records
proc ::qspy::rec50 {} { ;# QS_QK_MUTEX_LOCK
}
proc ::qspy::rec51 {} { ;# QS_QK_MUTEX_UNLOCK
}
proc ::qspy::rec52 {} { ;# QS_QVK_SCHEDULE
}
proc ::qspy::rec53 {} { ;# QS_QVK_IDLE
}
proc ::qspy::rec54 {} { ;# QS_QK_RESUME
}
# [55] Additional QEP records
proc ::qspy::rec55 {} { ;# QS_QEP_TRAN_HIST
}
proc ::qspy::rec56 {} { ;# QS_QEP_TRAN_EP
}
proc ::qspy::rec57 {} { ;# QS_QEP_TRAN_XP
}
proc ::qspy::rec58 {} { ;# QS_QEP_RESERVED1
}
proc ::qspy::rec59 {} { ;# QS_QEP_RESERVED0
}
# Miscellaneous QS records
proc ::qspy::rec60 {} { ;# QS_SIG_DICT
}
proc ::qspy::rec61 {} { ;# QS_OBJ_DICT
}
proc ::qspy::rec62 {} { ;# QS_FUN_DICT
}
proc ::qspy::rec63 {} { ;# QS_USR_DICT
}
# proc ::qspy::64 ;# QS_TARGET_INFO not used, see proc recINFO
proc ::qspy::rec65 {} { ;# QS_RESERVED0
}
proc ::qspy::rec66 {} { ;# QS_RX_STATUS
}
proc ::qspy::rec67 {} { ;# QS_TEST_STATUS
}
proc ::qspy::rec68 {} { ;# QS_PEEK_DATA
}
proc ::qspy::rec69 {} { ;# QS_ASSERT_FAIL
}

View File

@ -1 +0,0 @@
wish C:\qp\qtools\qspy\qspyview\qspyview.tcl dpp.tcl

View File

@ -0,0 +1,381 @@
#-----------------------------------------------------------------------------
# Product: QSpyView -- Customization example for DPP application
# Last updated for version 5.8.3
# Last updated on 2017-03-06
#
# Q u a n t u m L e a P s
# ---------------------------
# innovating embedded systems
#
# Copyright (C) Quantum Leaps, LLC, All rights reserved.
#
# This program is open source software: you can redistribute it and/or
# modify it under the terms of the GNU General Public License as published
# by the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
#
# Alternatively, this program may be distributed and modified under the
# terms of Quantum Leaps commercial licenses, which expressly supersede
# the GNU General Public License and are specifically designed for
# licensees interested in retaining the proprietary status of their code.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>.
#
# Contact information:
# https://state-machine.com
# mailto:info@state-machine.com
#-----------------------------------------------------------------------------
# command handlers ===========================================================
proc onMyCommand {} {
# do something here, for example:
# - inject an event to the Target
# - send a command to the Target
# - peek memory
# - poke memory
# - exectute system tick in the Target
# - open a dialog box...
# - etc.
# as an example, the following code sends a command to the Target
variable qspy::QS_RX
qspy::sendPkt [binary format cciii $qspy::QS_RX(COMMAND) 1 12345 0 0]
}
proc onPause {} {
global theButtonId theBtnState
if {[string equal $theBtnState BTN_UP]} { ;# is DWN?
set theBtnState BTN_DWN
qspy::sendEvent 6 6 0
} else {
set theBtnState BTN_UP
qspy::sendEvent 6 7 0
}
.canv.c itemconfigure $theButtonId -image ::img::$theBtnState
}
# additinal menu options =====================================================
.mbar.cust add command -label "MyCommand" -command onMyCommand
# specific canvas for DPP ====================================================
set scriptFolder [file dirname [file normalize [info script]]]
image create photo ::img::e -file $scriptFolder/img/eating.gif
image create photo ::img::h -file $scriptFolder/img/hungry.gif
image create photo ::img::t -file $scriptFolder/img/thinking.gif
image create photo ::img::BTN_UP -file $scriptFolder/img/BTN_UP.gif
image create photo ::img::BTN_DWN -file $scriptFolder/img/BTN_DWN.gif
wm geometry .canv =400x260
.canv.c configure -width 400
.canv.c configure -height 260
set thePhiloId [.canv.c create image 190 57 -image ::img::t]
.canv.c create image 273 100 -image ::img::t
.canv.c create image 237 185 -image ::img::t
.canv.c create image 146 184 -image ::img::t
.canv.c create image 107 100 -image ::img::t
set theButtonId [.canv.c create image 200 120 -image ::img::BTN_UP]
set theBtnState BTN_UP
.canv.c bind $theButtonId <ButtonPress-1> onPause
# QS record handlers =========================================================
# user record handlers [70..0x7C] --------------------------------------------
proc qspy::rec70 {} { ;# QS_USER
variable thePkt
variable theFmt
binary scan $thePkt xx$theFmt(tstamp)xcxa* \
tstamp philoNum stat
dispTxt [format "%010u Philo %1d is %s" $tstamp $philoNum $stat]
global thePhiloId
set img [string index $stat 0]
.canv.c itemconfigure [expr $thePhiloId + $philoNum] -image ::img::$img
}
#.............................................................................
proc qspy::rec71 {} { ;# QS_USER + 1
variable thePkt
variable theFmt
binary scan $thePkt xx$theFmt(tstamp)xcxi \
tstamp cmdId param
dispTxt [format "%010u cmd=%d param=%d" $tstamp $cmdId $param]
}
proc qspy::rec72 {} { ;# QS_USER + 2
}
proc qspy::rec73 {} { ;# QS_USER + 3
}
proc qspy::rec74 {} { ;# QS_USER + 4
}
proc qspy::rec75 {} { ;# QS_USER + 5
}
proc qspy::rec76 {} { ;# QS_USER + 6
}
proc qspy::rec77 {} { ;# QS_USER + 7
}
proc qspy::rec78 {} { ;# QS_USER + 8
}
proc qspy::rec79 {} { ;# QS_USER + 9
}
proc qspy::rec80 {} { ;# QS_USER + 10
}
proc qspy::rec81 {} { ;# QS_USER + 11
}
proc qspy::rec82 {} { ;# QS_USER + 12
}
proc qspy::rec83 {} { ;# QS_USER + 13
}
proc qspy::rec84 {} { ;# QS_USER + 14
}
proc qspy::rec85 {} { ;# QS_USER + 15
}
proc qspy::rec86 {} { ;# QS_USER + 16
}
proc qspy::rec87 {} { ;# QS_USER + 17
}
proc qspy::rec88 {} { ;# QS_USER + 18
}
proc qspy::rec89 {} { ;# QS_USER + 19
}
proc qspy::rec90 {} { ;# QS_USER + 20
}
proc qspy::rec91 {} { ;# QS_USER + 21
}
proc qspy::rec92 {} { ;# QS_USER + 22
}
proc qspy::rec93 {} { ;# QS_USER + 23
}
proc qspy::rec94 {} { ;# QS_USER + 24
}
proc qspy::rec95 {} { ;# QS_USER + 25
}
proc qspy::rec96 {} { ;# QS_USER + 26
}
proc qspy::rec97 {} { ;# QS_USER + 27
}
proc qspy::rec98 {} { ;# QS_USER + 28
}
proc qspy::rec99 {} { ;# QS_USER + 29
}
proc qspy::rec100 {} { ;# QS_USER + 30
}
proc qspy::rec101 {} { ;# QS_USER + 31
}
proc qspy::rec102 {} { ;# QS_USER + 32
}
proc qspy::rec103 {} { ;# QS_USER + 33
}
proc qspy::rec104 {} { ;# QS_USER + 34
}
proc qspy::rec105 {} { ;# QS_USER + 35
}
proc qspy::rec106 {} { ;# QS_USER + 36
}
proc qspy::rec107 {} { ;# QS_USER + 37
}
proc qspy::rec108 {} { ;# QS_USER + 38
}
proc qspy::rec109 {} { ;# QS_USER + 39
}
proc qspy::rec110 {} { ;# QS_USER + 40
}
proc qspy::rec111 {} { ;# QS_USER + 41
}
proc qspy::rec112 {} { ;# QS_USER + 42
}
proc qspy::rec113 {} { ;# QS_USER + 43
}
proc qspy::rec114 {} { ;# QS_USER + 44
}
proc qspy::rec115 {} { ;# QS_USER + 45
}
proc qspy::rec116 {} { ;# QS_USER + 46
}
proc qspy::rec117 {} { ;# QS_USER + 47
}
proc qspy::rec118 {} { ;# QS_USER + 48
}
proc qspy::rec119 {} { ;# QS_USER + 49
}
proc qspy::rec120 {} { ;# QS_USER + 50
}
proc qspy::rec121 {} { ;# QS_USER + 51
}
proc qspy::rec122 {} { ;# QS_USER + 52
}
proc qspy::rec123 {} { ;# QS_USER + 53
}
proc qspy::rec124 {} { ;# QS_USER + 54
}
# special record handlers ----------------------------------------------------
proc qspy::recRESET {} { ;# target reset callback
}
proc qspy::recINFO {} { ;# target info callback
}
# standard record handlers [1..54] -------------------------------------------
proc qspy::rec0 {} { ;# QS_EMPTY
}
# [1] QEP records...
proc qspy::rec1 {} { ;# QS_QEP_STATE_ENTRY
}
proc qspy::rec2 {} { ;# QS_QEP_STATE_EXIT
}
proc qspy::rec3 {} { ;# QS_QEP_STATE_INIT
}
proc qspy::rec4 {} { ;# QS_QEP_INIT_TRAN
}
proc qspy::rec5 {} { ;# QS_QEP_INTERN_TRAN
}
proc qspy::rec6 {} { ;# QS_QEP_TRAN
}
proc qspy::rec7 {} { ;# QS_QEP_IGNORED
}
proc qspy::rec8 {} { ;# QS_QEP_DISPATCH
}
proc qspy::rec9 {} { ;# QS_QEP_UNHANDLED
}
# [10] QF records...
proc qspy::rec10 {} { ;# QS_QF_ACTIVE_ADD
}
proc qspy::rec11 {} { ;# QS_QF_ACTIVE_REMOVE
}
proc qspy::rec12 {} { ;# QS_QF_ACTIVE_SUBSCRIBE
}
proc qspy::rec13 {} { ;# QS_QF_ACTIVE_UNSUBSCRIBE
}
proc qspy::rec14 {} { ;# QS_QF_ACTIVE_POST_FIFO
}
proc qspy::rec15 {} { ;# QS_QF_ACTIVE_POST_LIFO
}
proc qspy::rec16 {} { ;# QS_QF_ACTIVE_GET
}
proc qspy::rec17 {} { ;# QS_QF_ACTIVE_GET_LAST
}
proc qspy::rec18 {} { ;# QS_QF_EQUEUE_INIT
}
proc qspy::rec19 {} { ;# QS_QF_EQUEUE_POST_FIFO
}
proc qspy::rec20 {} { ;# QS_QF_EQUEUE_POST_LIFO
}
proc qspy::rec21 {} { ;# QS_QF_EQUEUE_GET
}
proc qspy::rec22 {} { ;# QS_QF_EQUEUE_GET_LAST
}
proc qspy::rec23 {} { ;# QS_QF_MPOOL_INIT
}
proc qspy::rec24 {} { ;# QS_QF_MPOOL_GET
}
proc qspy::rec25 {} { ;# QS_QF_MPOOL_PUT
}
proc qspy::rec26 {} { ;# QS_QF_PUBLISH
}
proc qspy::rec27 {} { ;# QS_QF_RESERVED8
}
proc qspy::rec28 {} { ;# QS_QF_NEW
}
proc qspy::rec29 {} { ;# QS_QF_GC_ATTEMPT
}
proc qspy::rec30 {} { ;# QS_QF_GC
}
proc qspy::rec31 {} { ;# QS_QF_TICK
}
proc qspy::rec32 {} { ;# QS_QF_TIMEEVT_ARM
}
proc qspy::rec33 {} { ;# QS_QF_TIMEEVT_AUTO_DISARM
}
proc qspy::rec34 {} { ;# QS_QF_TIMEEVT_DISARM_ATTEMPT
}
proc qspy::rec35 {} { ;# QS_QF_TIMEEVT_DISARM
}
proc qspy::rec36 {} { ;# QS_QF_TIMEEVT_REARM
}
proc qspy::rec37 {} { ;# QS_QF_TIMEEVT_POST
}
proc qspy::rec38 {} { ;# QS_QF_TIMEEVT_CTR
}
proc qspy::rec39 {} { ;# QS_QF_CRIT_ENTRY
}
proc qspy::rec40 {} { ;# QS_QF_CRIT_EXIT
}
proc qspy::rec41 {} { ;# QS_QF_ISR_ENTRY
}
proc qspy::rec42 {} { ;# QS_QF_ISR_EXIT
}
proc qspy::rec43 {} { ;# QS_QF_INT_DISABLE
}
proc qspy::rec44 {} { ;# QS_QF_INT_ENABLE
}
proc qspy::rec45 {} { ;# QS_QF_ACTIVE_POST_ATTEMPT
}
proc qspy::rec46 {} { ;# QS_QF_EQUEUE_POST_ATTEMPT
}
proc qspy::rec47 {} { ;# QS_QF_MPOOL_GET_ATTEMPT
}
proc qspy::rec48 {} { ;# QS_QF_RESERVED1
}
proc qspy::rec49 {} { ;# QS_QF_RESERVED0
}
# [50] QK/QV records
proc qspy::rec50 {} { ;# QS_QK_MUTEX_LOCK
}
proc qspy::rec51 {} { ;# QS_QK_MUTEX_UNLOCK
}
proc qspy::rec52 {} { ;# QS_QVK_SCHEDULE
}
proc qspy::rec53 {} { ;# QS_QVK_IDLE
}
proc qspy::rec54 {} { ;# QS_QK_RESUME
}
# [55] Additional QEP records
proc qspy::rec55 {} { ;# QS_QEP_TRAN_HIST
}
proc qspy::rec56 {} { ;# QS_QEP_TRAN_EP
}
proc qspy::rec57 {} { ;# QS_QEP_TRAN_XP
}
proc qspy::rec58 {} { ;# QS_QEP_RESERVED1
}
proc qspy::rec59 {} { ;# QS_QEP_RESERVED0
}
# Miscellaneous QS records
proc qspy::rec60 {} { ;# QS_SIG_DICT
}
proc qspy::rec61 {} { ;# QS_OBJ_DICT
}
proc qspy::rec62 {} { ;# QS_FUN_DICT
}
proc qspy::rec63 {} { ;# QS_USR_DICT
}
# proc qspy::64 ;# QS_TARGET_INFO not used, see proc recINFO
proc qspy::rec65 {} { ;# QS_RESERVED0
}
proc qspy::rec66 {} { ;# QS_RX_STATUS
}
proc qspy::rec67 {} { ;# QS_TEST_STATUS
}
proc qspy::rec68 {} { ;# QS_PEEK_DATA
}
proc qspy::rec69 {} { ;# QS_ASSERT_FAIL
}

View File

Before

Width:  |  Height:  |  Size: 2.0 KiB

After

Width:  |  Height:  |  Size: 2.0 KiB

View File

Before

Width:  |  Height:  |  Size: 1.9 KiB

After

Width:  |  Height:  |  Size: 1.9 KiB

View File

Before

Width:  |  Height:  |  Size: 3.1 KiB

After

Width:  |  Height:  |  Size: 3.1 KiB

View File

Before

Width:  |  Height:  |  Size: 2.4 KiB

After

Width:  |  Height:  |  Size: 2.4 KiB

View File

Before

Width:  |  Height:  |  Size: 2.3 KiB

After

Width:  |  Height:  |  Size: 2.3 KiB

View File

@ -0,0 +1,4 @@
if "%QTOOLS%"=="" (
set QTOOLS=C:\qp\qtools
)
wish %QTOOLS%\qspy\tcl\qspyview.tcl dpp.tcl

View File

@ -1,7 +1,7 @@
/***************************************************************************** /*****************************************************************************
* Product: DPP example, EFM32-SLSTK3401A board, cooperative QV kernel * Product: DPP example, EFM32-SLSTK3401A board, cooperative QV kernel
* Last Updated for Version: 5.6.5 * Last Updated for Version: 5.9.0
* Date of the Last Update: 2016-05-08 * Date of the Last Update: 2017-04-14
* *
* Q u a n t u m L e a P s * Q u a n t u m L e a P s
* --------------------------- * ---------------------------
@ -28,7 +28,7 @@
* along with this program. If not, see <http://www.gnu.org/licenses/>. * along with this program. If not, see <http://www.gnu.org/licenses/>.
* *
* Contact information: * Contact information:
* http://www.state-machine.com * https://state-machine.com
* mailto:info@state-machine.com * mailto:info@state-machine.com
*****************************************************************************/ *****************************************************************************/
#include "qpc.h" #include "qpc.h"
@ -114,7 +114,8 @@ void SysTick_Handler(void) {
} }
#endif #endif
QF_TICK_X(0U, &l_SysTick_Handler); /* process time events for rate 0 */ //QF_TICK_X(0U, &l_SysTick_Handler); /* process time events for rate 0 */
QACTIVE_POST(the_Ticker0, 0, &l_SysTick_Handler); /* post to Ticker0 */
/* Perform the debouncing of buttons. The algorithm for debouncing /* Perform the debouncing of buttons. The algorithm for debouncing
* adapted from the book "Embedded Systems Dictionary" by Jack Ganssle * adapted from the book "Embedded Systems Dictionary" by Jack Ganssle
@ -139,7 +140,7 @@ void SysTick_Handler(void) {
} }
/*..........................................................................*/ /*..........................................................................*/
void GPIO_EVEN_IRQHandler(void) { void GPIO_EVEN_IRQHandler(void) { /* for testing, NOTE03 */
QACTIVE_POST(AO_Table, Q_NEW(QEvt, MAX_PUB_SIG), /* for testing... */ QACTIVE_POST(AO_Table, Q_NEW(QEvt, MAX_PUB_SIG), /* for testing... */
&l_GPIO_EVEN_IRQHandler); &l_GPIO_EVEN_IRQHandler);
} }
@ -462,13 +463,19 @@ void QS_onReset(void) {
} }
/*..........................................................................*/ /*..........................................................................*/
/*! callback function to execute a user command (to be implemented in BSP) */ /*! callback function to execute a user command (to be implemented in BSP) */
void QS_onCommand(uint8_t cmdId, uint32_t param) { void QS_onCommand(uint8_t cmdId,
uint32_t param1, uint32_t param2, uint32_t param3)
{
void assert_failed(char const *module, int loc); void assert_failed(char const *module, int loc);
(void)cmdId; (void)cmdId;
(void)param; (void)param1;
(void)param2;
(void)param3;
QS_BEGIN(COMMAND_STAT, (void *)1) /* application-specific record begin */ QS_BEGIN(COMMAND_STAT, (void *)1) /* application-specific record begin */
QS_U8(2, cmdId); QS_U8(2, cmdId);
QS_U32(8, param); QS_U32(8, param1);
QS_U32(8, param2);
QS_U32(8, param3);
QS_END() QS_END()
if (cmdId == 10U) { if (cmdId == 10U) {
@ -512,4 +519,13 @@ void QS_onCommand(uint8_t cmdId, uint32_t param) {
* of the LED is proportional to the frequency of invcations of the idle loop. * of the LED is proportional to the frequency of invcations of the idle loop.
* Please note that the LED is toggled with interrupts locked, so no interrupt * Please note that the LED is toggled with interrupts locked, so no interrupt
* execution time contributes to the brightness of the User LED. * execution time contributes to the brightness of the User LED.
*
* NOTE03:
* GPIO_EVEN_IRQHandler() is for testing various preemption scenarios in QV.
* The general testing strategy is to trigger this IRQ manually from the
* debugger. To do so in IAR, you need to:
* 1. open the Register view
* 2. open NVIC registers
* 3. scroll down to NVIC_ISPR0 register
* 4. write 0x200 to NVIC_ISPR0.SETPEND register
*/ */

View File

@ -28,7 +28,7 @@
# along with this program. If not, see <http://www.gnu.org/licenses/>. # along with this program. If not, see <http://www.gnu.org/licenses/>.
# #
# Contact information: # Contact information:
# http://www.state-machine.com # https://state-machine.com
# mailto:info@state-machine.com # mailto:info@state-machine.com
############################################################################## ##############################################################################
# examples of invoking this Makefile: # examples of invoking this Makefile:

View File

@ -1,13 +1,13 @@
/***************************************************************************** /*****************************************************************************
* Product: DPP example * Product: DPP example
* Last Updated for Version: 5.6.2 * Last Updated for Version: 5.9.0
* Date of the Last Update: 2016-03-23 * Date of the Last Update: 2017-03-13
* *
* Q u a n t u m L e a P s * Q u a n t u m L e a P s
* --------------------------- * ---------------------------
* innovating embedded systems * innovating embedded systems
* *
* Copyright (C) Quantum Leaps, LLC. state-machine.com. * Copyright (C) 2005-2017 Quantum Leaps, LLC. All rights reserved.
* *
* This program is open source software: you can redistribute it and/or * This program is open source software: you can redistribute it and/or
* modify it under the terms of the GNU General Public License as published * modify it under the terms of the GNU General Public License as published
@ -28,13 +28,16 @@
* along with this program. If not, see <http://www.gnu.org/licenses/>. * along with this program. If not, see <http://www.gnu.org/licenses/>.
* *
* Contact information: * Contact information:
* Web : http://www.state-machine.com * https://state-machine.com
* Email: info@state-machine.com * mailto:info@state-machine.com
*****************************************************************************/ *****************************************************************************/
#include "qpc.h" #include "qpc.h"
#include "dpp.h" #include "dpp.h"
#include "bsp.h" #include "bsp.h"
static QTicker l_ticker0;
QActive *the_Ticker0 = &l_ticker0;
/*..........................................................................*/ /*..........................................................................*/
int main() { int main() {
static QEvt const *tableQueueSto[N_PHILO]; static QEvt const *tableQueueSto[N_PHILO];
@ -45,6 +48,7 @@ int main() {
Philo_ctor(); /* instantiate all Philosopher active objects */ Philo_ctor(); /* instantiate all Philosopher active objects */
Table_ctor(); /* instantiate the Table active object */ Table_ctor(); /* instantiate the Table active object */
QTicker_ctor(&l_ticker0, 0U); /* ticker AO for tick rate 0 */
QF_init(); /* initialize the framework and the underlying RT kernel */ QF_init(); /* initialize the framework and the underlying RT kernel */
BSP_init(); /* initialize the Board Support Package */ BSP_init(); /* initialize the Board Support Package */
@ -64,10 +68,12 @@ int main() {
/* initialize event pools... */ /* initialize event pools... */
QF_poolInit(smlPoolSto, sizeof(smlPoolSto), sizeof(smlPoolSto[0])); QF_poolInit(smlPoolSto, sizeof(smlPoolSto), sizeof(smlPoolSto[0]));
QACTIVE_START(the_Ticker0, 1U, 0, 0, 0, 0, 0);
/* start the active objects... */ /* start the active objects... */
for (n = 0U; n < N_PHILO; ++n) { for (n = 0U; n < N_PHILO; ++n) {
QACTIVE_START(AO_Philo[n], /* AO to start */ QACTIVE_START(AO_Philo[n], /* AO to start */
(uint_fast8_t)(n + 1), /* QP priority of the AO */ (uint_fast8_t)(n + 2), /* QP priority of the AO */
philoQueueSto[n], /* event queue storage */ philoQueueSto[n], /* event queue storage */
Q_DIM(philoQueueSto[n]), /* queue length [events] */ Q_DIM(philoQueueSto[n]), /* queue length [events] */
(void *)0, /* stack storage (not used) */ (void *)0, /* stack storage (not used) */
@ -75,7 +81,7 @@ int main() {
(QEvt *)0); /* initialization event */ (QEvt *)0); /* initialization event */
} }
QACTIVE_START(AO_Table, /* AO to start */ QACTIVE_START(AO_Table, /* AO to start */
(uint_fast8_t)(N_PHILO + 1), /* QP priority of the AO */ (uint_fast8_t)(N_PHILO + 2), /* QP priority of the AO */
tableQueueSto, /* event queue storage */ tableQueueSto, /* event queue storage */
Q_DIM(tableQueueSto), /* queue length [events] */ Q_DIM(tableQueueSto), /* queue length [events] */
(void *)0, /* stack storage (not used) */ (void *)0, /* stack storage (not used) */

View File

@ -1,7 +1,7 @@
/***************************************************************************** /*****************************************************************************
* Product: DPP example, EFM32-SLSTK3401A board, preemptive QXK kernel * Product: DPP example, EFM32-SLSTK3401A board, preemptive QXK kernel
* Last Updated for Version: 5.7.2 * Last Updated for Version: 5.9.0
* Date of the Last Update: 2016-09-29 * Date of the Last Update: 2017-04-14
* *
* Q u a n t u m L e a P s * Q u a n t u m L e a P s
* --------------------------- * ---------------------------
@ -28,7 +28,7 @@
* along with this program. If not, see <http://www.gnu.org/licenses/>. * along with this program. If not, see <http://www.gnu.org/licenses/>.
* *
* Contact information: * Contact information:
* http://www.state-machine.com * https://state-machine.com
* mailto:info@state-machine.com * mailto:info@state-machine.com
*****************************************************************************/ *****************************************************************************/
#include "qpc.h" #include "qpc.h"
@ -48,7 +48,7 @@ Q_DEFINE_THIS_FILE
* DO NOT LEAVE THE ISR PRIORITIES AT THE DEFAULT VALUE! * DO NOT LEAVE THE ISR PRIORITIES AT THE DEFAULT VALUE!
*/ */
enum KernelUnawareISRs { /* see NOTE00 */ enum KernelUnawareISRs { /* see NOTE00 */
UART0_PRIO, USART0_RX_PRIO,
/* ... */ /* ... */
MAX_KERNEL_UNAWARE_CMSIS_PRI /* keep always last */ MAX_KERNEL_UNAWARE_CMSIS_PRI /* keep always last */
}; };
@ -118,7 +118,8 @@ void SysTick_Handler(void) {
} }
#endif #endif
QF_TICK_X(0U, &l_SysTick_Handler); /* process time events for rate 0 */ //QF_TICK_X(0U, &l_SysTick_Handler); /* process time events for rate 0 */
QACTIVE_POST(the_Ticker0, 0, &l_SysTick_Handler); // post to Ticker0 */
/* Perform the debouncing of buttons. The algorithm for debouncing /* Perform the debouncing of buttons. The algorithm for debouncing
* adapted from the book "Embedded Systems Dictionary" by Jack Ganssle * adapted from the book "Embedded Systems Dictionary" by Jack Ganssle
@ -144,15 +145,7 @@ void SysTick_Handler(void) {
QXK_ISR_EXIT(); /* inform QXK about exiting an ISR */ QXK_ISR_EXIT(); /* inform QXK about exiting an ISR */
} }
/*..........................................................................*/ /*..........................................................................*/
/* The following IRQ handler is for testing various preemption scenarios void GPIO_EVEN_IRQHandler(void) { /* for testing, NOTE03 */
* in QXK. The general testing strategy is to trigger this IRQ manually
* from the debugger. To do so in IAR, you need to:
* 1. open the Register view
* 2. open NVIC registers
* 3. scroll down to NVIC_ISPR0 register
* 4. write 0x200 to NVIC_ISPR0.SETPEND register
*/
void GPIO_EVEN_IRQHandler(void) {
QXK_ISR_ENTRY(); /* inform QXK about entering an ISR */ QXK_ISR_ENTRY(); /* inform QXK about entering an ISR */
// QACTIVE_POST(AO_Table, Q_NEW(QEvt, TEST_SIG), /* for testing... */ // QACTIVE_POST(AO_Table, Q_NEW(QEvt, TEST_SIG), /* for testing... */
@ -301,7 +294,7 @@ void QF_onStartup(void) {
* Assign a priority to EVERY ISR explicitly by calling NVIC_SetPriority(). * Assign a priority to EVERY ISR explicitly by calling NVIC_SetPriority().
* DO NOT LEAVE THE ISR PRIORITIES AT THE DEFAULT VALUE! * DO NOT LEAVE THE ISR PRIORITIES AT THE DEFAULT VALUE!
*/ */
NVIC_SetPriority(USART0_RX_IRQn, UART0_PRIO); NVIC_SetPriority(USART0_RX_IRQn, USART0_RX_PRIO);
NVIC_SetPriority(SysTick_IRQn, SYSTICK_PRIO); NVIC_SetPriority(SysTick_IRQn, SYSTICK_PRIO);
NVIC_SetPriority(GPIO_EVEN_IRQn, GPIO_EVEN_PRIO); NVIC_SetPriority(GPIO_EVEN_IRQn, GPIO_EVEN_PRIO);
/* ... */ /* ... */
@ -486,13 +479,19 @@ void QS_onReset(void) {
} }
/*..........................................................................*/ /*..........................................................................*/
/*! callback function to execute a user command (to be implemented in BSP) */ /*! callback function to execute a user command (to be implemented in BSP) */
void QS_onCommand(uint8_t cmdId, uint32_t param) { void QS_onCommand(uint8_t cmdId,
uint32_t param1, uint32_t param2, uint32_t param3)
{
void assert_failed(char const *module, int loc); void assert_failed(char const *module, int loc);
(void)cmdId; (void)cmdId;
(void)param; (void)param1;
QS_BEGIN(COMMAND_STAT, (void *)0) /* application-specific record begin */ (void)param2;
(void)param3;
QS_BEGIN(COMMAND_STAT, (void *)1) /* application-specific record begin */
QS_U8(2, cmdId); QS_U8(2, cmdId);
QS_U32(8, param); QS_U32(8, param1);
QS_U32(8, param2);
QS_U32(8, param3);
QS_END() QS_END()
if (cmdId == 10U) { if (cmdId == 10U) {
@ -530,4 +529,13 @@ void QS_onCommand(uint8_t cmdId, uint32_t param) {
* of the LED is proportional to the frequency of invcations of the idle loop. * of the LED is proportional to the frequency of invcations of the idle loop.
* Please note that the LED is toggled with interrupts locked, so no interrupt * Please note that the LED is toggled with interrupts locked, so no interrupt
* execution time contributes to the brightness of the User LED. * execution time contributes to the brightness of the User LED.
*
* NOTE03:
* GPIO_EVEN_IRQHandler() is for testing various preemption scenarios in QXK.
* The general testing strategy is to trigger this IRQ manually from the
* debugger. To do so in IAR, you need to:
* 1. open the Register view
* 2. open NVIC registers
* 3. scroll down to NVIC_ISPR0 register
* 4. write 0x200 to NVIC_ISPR0.SETPEND register
*/ */

View File

@ -28,7 +28,7 @@
# along with this program. If not, see <http://www.gnu.org/licenses/>. # along with this program. If not, see <http://www.gnu.org/licenses/>.
# #
# Contact information: # Contact information:
# http://www.state-machine.com # https://state-machine.com
# mailto:info@state-machine.com # mailto:info@state-machine.com
############################################################################## ##############################################################################
# examples of invoking this Makefile: # examples of invoking this Makefile:

File diff suppressed because it is too large Load Diff

View File

@ -1,7 +1,6 @@
<?xml version="1.0" encoding="iso-8859-1"?> <?xml version="1.0" encoding="UTF-8"?>
<project> <project>
<fileVersion>2</fileVersion> <fileVersion>3</fileVersion>
<configuration> <configuration>
<name>Debug</name> <name>Debug</name>
<toolchain> <toolchain>
@ -12,7 +11,7 @@
<name>General</name> <name>General</name>
<archiveVersion>3</archiveVersion> <archiveVersion>3</archiveVersion>
<data> <data>
<version>24</version> <version>28</version>
<wantNonLocal>1</wantNonLocal> <wantNonLocal>1</wantNonLocal>
<debug>1</debug> <debug>1</debug>
<option> <option>
@ -31,20 +30,10 @@
<name>GEndianMode</name> <name>GEndianMode</name>
<state>0</state> <state>0</state>
</option> </option>
<option>
<name>Input variant</name>
<version>3</version>
<state>6</state>
</option>
<option> <option>
<name>Input description</name> <name>Input description</name>
<state>No specifier n, no float nor long long, no scan set, no assignment suppressing.</state> <state>No specifier n, no float nor long long, no scan set, no assignment suppressing.</state>
</option> </option>
<option>
<name>Output variant</name>
<version>2</version>
<state>7</state>
</option>
<option> <option>
<name>Output description</name> <name>Output description</name>
<state>No specifier a, A, no specifier n, no float nor long long, no flags.</state> <state>No specifier a, A, no specifier n, no float nor long long, no flags.</state>
@ -77,7 +66,7 @@
</option> </option>
<option> <option>
<name>OGLastSavedByProductVersion</name> <name>OGLastSavedByProductVersion</name>
<state>7.70.1.11471</state> <state>8.11.1.13270</state>
</option> </option>
<option> <option>
<name>GeneralEnableMisra</name> <name>GeneralEnableMisra</name>
@ -127,7 +116,7 @@
</option> </option>
<option> <option>
<name>GBECoreSlave</name> <name>GBECoreSlave</name>
<version>24</version> <version>25</version>
<state>39</state> <state>39</state>
</option> </option>
<option> <option>
@ -144,7 +133,7 @@
</option> </option>
<option> <option>
<name>CoreVariant</name> <name>CoreVariant</name>
<version>24</version> <version>25</version>
<state>39</state> <state>39</state>
</option> </option>
<option> <option>
@ -167,16 +156,53 @@
</option> </option>
<option> <option>
<name>GFPUCoreSlave2</name> <name>GFPUCoreSlave2</name>
<version>24</version> <version>25</version>
<state>39</state> <state>39</state>
</option> </option>
<option>
<name>OGCMSISPackSelectDevice</name>
</option>
<option>
<name>OgLibHeap</name>
<state>0</state>
</option>
<option>
<name>OGLibAdditionalLocale</name>
<state>0</state>
</option>
<option>
<name>OGPrintfVariant</name>
<version>0</version>
<state>4</state>
</option>
<option>
<name>OGPrintfMultibyteSupport</name>
<state>0</state>
</option>
<option>
<name>OGScanfVariant</name>
<version>0</version>
<state>3</state>
</option>
<option>
<name>OGScanfMultibyteSupport</name>
<state>0</state>
</option>
<option>
<name>GenLocaleTags</name>
<state></state>
</option>
<option>
<name>GenLocaleDisplayOnly</name>
<state></state>
</option>
</data> </data>
</settings> </settings>
<settings> <settings>
<name>ICCARM</name> <name>ICCARM</name>
<archiveVersion>2</archiveVersion> <archiveVersion>2</archiveVersion>
<data> <data>
<version>31</version> <version>34</version>
<wantNonLocal>1</wantNonLocal> <wantNonLocal>1</wantNonLocal>
<debug>1</debug> <debug>1</debug>
<option> <option>
@ -280,10 +306,6 @@
<name>CCRequirePrototypes</name> <name>CCRequirePrototypes</name>
<state>1</state> <state>1</state>
</option> </option>
<option>
<name>CCMultibyteSupport</name>
<state>0</state>
</option>
<option> <option>
<name>CCDiagWarnAreErr</name> <name>CCDiagWarnAreErr</name>
<state>0</state> <state>0</state>
@ -330,10 +352,6 @@
<name>CCCodeSection</name> <name>CCCodeSection</name>
<state>.text</state> <state>.text</state>
</option> </option>
<option>
<name>IInterwork2</name>
<state>0</state>
</option>
<option> <option>
<name>IProcessorMode2</name> <name>IProcessorMode2</name>
<state>1</state> <state>1</state>
@ -385,18 +403,6 @@
<name>IccAllowVLA</name> <name>IccAllowVLA</name>
<state>0</state> <state>0</state>
</option> </option>
<option>
<name>IccCppDialect</name>
<state>1</state>
</option>
<option>
<name>IccExceptions</name>
<state>1</state>
</option>
<option>
<name>IccRTTI</name>
<state>1</state>
</option>
<option> <option>
<name>IccStaticDestr</name> <name>IccStaticDestr</name>
<state>0</state> <state>0</state>
@ -426,13 +432,37 @@
<name>CCGuardCalls</name> <name>CCGuardCalls</name>
<state>1</state> <state>1</state>
</option> </option>
<option>
<name>CCEncSource</name>
<state>0</state>
</option>
<option>
<name>CCEncOutput</name>
<state>0</state>
</option>
<option>
<name>CCEncOutputBom</name>
<state>1</state>
</option>
<option>
<name>CCEncInput</name>
<state>0</state>
</option>
<option>
<name>IccExceptions2</name>
<state>0</state>
</option>
<option>
<name>IccRTTI2</name>
<state>0</state>
</option>
</data> </data>
</settings> </settings>
<settings> <settings>
<name>AARM</name> <name>AARM</name>
<archiveVersion>2</archiveVersion> <archiveVersion>2</archiveVersion>
<data> <data>
<version>9</version> <version>10</version>
<wantNonLocal>1</wantNonLocal> <wantNonLocal>1</wantNonLocal>
<debug>1</debug> <debug>1</debug>
<option> <option>
@ -560,10 +590,6 @@
<name>AOutputFile</name> <name>AOutputFile</name>
<state>$FILE_BNAME$.o</state> <state>$FILE_BNAME$.o</state>
</option> </option>
<option>
<name>AMultibyteSupport</name>
<state>0</state>
</option>
<option> <option>
<name>ALimitErrorsCheck</name> <name>ALimitErrorsCheck</name>
<state>0</state> <state>0</state>
@ -636,7 +662,7 @@
<settings> <settings>
<name>BICOMP</name> <name>BICOMP</name>
<archiveVersion>0</archiveVersion> <archiveVersion>0</archiveVersion>
<data/> <data />
</settings> </settings>
<settings> <settings>
<name>BUILDACTION</name> <name>BUILDACTION</name>
@ -650,7 +676,7 @@
<name>ILINK</name> <name>ILINK</name>
<archiveVersion>0</archiveVersion> <archiveVersion>0</archiveVersion>
<data> <data>
<version>17</version> <version>20</version>
<wantNonLocal>1</wantNonLocal> <wantNonLocal>1</wantNonLocal>
<debug>1</debug> <debug>1</debug>
<option> <option>
@ -922,7 +948,7 @@
</option> </option>
<option> <option>
<name>CrcAlgorithm</name> <name>CrcAlgorithm</name>
<version>0</version> <version>1</version>
<state>1</state> <state>1</state>
</option> </option>
<option> <option>
@ -938,6 +964,30 @@
<name>IlinkLogCallGraph</name> <name>IlinkLogCallGraph</name>
<state>0</state> <state>0</state>
</option> </option>
<option>
<name>IlinkIcfFile_AltDefault</name>
<state></state>
</option>
<option>
<name>IlinkEncInput</name>
<state>0</state>
</option>
<option>
<name>IlinkEncOutput</name>
<state>0</state>
</option>
<option>
<name>IlinkEncOutputBom</name>
<state>1</state>
</option>
<option>
<name>IlinkHeapSelect</name>
<state>1</state>
</option>
<option>
<name>IlinkLocaleSelect</name>
<state>1</state>
</option>
</data> </data>
</settings> </settings>
<settings> <settings>
@ -964,12 +1014,12 @@
<settings> <settings>
<name>BILINK</name> <name>BILINK</name>
<archiveVersion>0</archiveVersion> <archiveVersion>0</archiveVersion>
<data/> <data />
</settings> </settings>
<settings> <settings>
<name>Coder</name> <name>Coder</name>
<archiveVersion>0</archiveVersion> <archiveVersion>0</archiveVersion>
<data/> <data />
</settings> </settings>
</configuration> </configuration>
<configuration> <configuration>
@ -982,7 +1032,7 @@
<name>General</name> <name>General</name>
<archiveVersion>3</archiveVersion> <archiveVersion>3</archiveVersion>
<data> <data>
<version>24</version> <version>28</version>
<wantNonLocal>1</wantNonLocal> <wantNonLocal>1</wantNonLocal>
<debug>0</debug> <debug>0</debug>
<option> <option>
@ -1001,20 +1051,10 @@
<name>GEndianMode</name> <name>GEndianMode</name>
<state>0</state> <state>0</state>
</option> </option>
<option>
<name>Input variant</name>
<version>3</version>
<state>6</state>
</option>
<option> <option>
<name>Input description</name> <name>Input description</name>
<state>No specifier n, no float nor long long, no scan set, no assignment suppressing.</state> <state>No specifier n, no float nor long long, no scan set, no assignment suppressing.</state>
</option> </option>
<option>
<name>Output variant</name>
<version>2</version>
<state>7</state>
</option>
<option> <option>
<name>Output description</name> <name>Output description</name>
<state>No specifier a, A, no specifier n, no float nor long long, no flags.</state> <state>No specifier a, A, no specifier n, no float nor long long, no flags.</state>
@ -1097,7 +1137,7 @@
</option> </option>
<option> <option>
<name>GBECoreSlave</name> <name>GBECoreSlave</name>
<version>24</version> <version>25</version>
<state>39</state> <state>39</state>
</option> </option>
<option> <option>
@ -1114,7 +1154,7 @@
</option> </option>
<option> <option>
<name>CoreVariant</name> <name>CoreVariant</name>
<version>24</version> <version>25</version>
<state>39</state> <state>39</state>
</option> </option>
<option> <option>
@ -1137,16 +1177,53 @@
</option> </option>
<option> <option>
<name>GFPUCoreSlave2</name> <name>GFPUCoreSlave2</name>
<version>24</version> <version>25</version>
<state>39</state> <state>39</state>
</option> </option>
<option>
<name>OGCMSISPackSelectDevice</name>
</option>
<option>
<name>OgLibHeap</name>
<state>0</state>
</option>
<option>
<name>OGLibAdditionalLocale</name>
<state>0</state>
</option>
<option>
<name>OGPrintfVariant</name>
<version>0</version>
<state>4</state>
</option>
<option>
<name>OGPrintfMultibyteSupport</name>
<state>0</state>
</option>
<option>
<name>OGScanfVariant</name>
<version>0</version>
<state>3</state>
</option>
<option>
<name>OGScanfMultibyteSupport</name>
<state>0</state>
</option>
<option>
<name>GenLocaleTags</name>
<state></state>
</option>
<option>
<name>GenLocaleDisplayOnly</name>
<state></state>
</option>
</data> </data>
</settings> </settings>
<settings> <settings>
<name>ICCARM</name> <name>ICCARM</name>
<archiveVersion>2</archiveVersion> <archiveVersion>2</archiveVersion>
<data> <data>
<version>31</version> <version>34</version>
<wantNonLocal>1</wantNonLocal> <wantNonLocal>1</wantNonLocal>
<debug>0</debug> <debug>0</debug>
<option> <option>
@ -1251,10 +1328,6 @@
<name>CCRequirePrototypes</name> <name>CCRequirePrototypes</name>
<state>1</state> <state>1</state>
</option> </option>
<option>
<name>CCMultibyteSupport</name>
<state>0</state>
</option>
<option> <option>
<name>CCDiagWarnAreErr</name> <name>CCDiagWarnAreErr</name>
<state>0</state> <state>0</state>
@ -1301,10 +1374,6 @@
<name>CCCodeSection</name> <name>CCCodeSection</name>
<state>.text</state> <state>.text</state>
</option> </option>
<option>
<name>IInterwork2</name>
<state>0</state>
</option>
<option> <option>
<name>IProcessorMode2</name> <name>IProcessorMode2</name>
<state>1</state> <state>1</state>
@ -1356,18 +1425,6 @@
<name>IccAllowVLA</name> <name>IccAllowVLA</name>
<state>0</state> <state>0</state>
</option> </option>
<option>
<name>IccCppDialect</name>
<state>1</state>
</option>
<option>
<name>IccExceptions</name>
<state>1</state>
</option>
<option>
<name>IccRTTI</name>
<state>1</state>
</option>
<option> <option>
<name>IccStaticDestr</name> <name>IccStaticDestr</name>
<state>1</state> <state>1</state>
@ -1397,13 +1454,37 @@
<name>CCGuardCalls</name> <name>CCGuardCalls</name>
<state>1</state> <state>1</state>
</option> </option>
<option>
<name>CCEncSource</name>
<state>0</state>
</option>
<option>
<name>CCEncOutput</name>
<state>0</state>
</option>
<option>
<name>CCEncOutputBom</name>
<state>1</state>
</option>
<option>
<name>CCEncInput</name>
<state>0</state>
</option>
<option>
<name>IccExceptions2</name>
<state>0</state>
</option>
<option>
<name>IccRTTI2</name>
<state>0</state>
</option>
</data> </data>
</settings> </settings>
<settings> <settings>
<name>AARM</name> <name>AARM</name>
<archiveVersion>2</archiveVersion> <archiveVersion>2</archiveVersion>
<data> <data>
<version>9</version> <version>10</version>
<wantNonLocal>1</wantNonLocal> <wantNonLocal>1</wantNonLocal>
<debug>0</debug> <debug>0</debug>
<option> <option>
@ -1531,10 +1612,6 @@
<name>AOutputFile</name> <name>AOutputFile</name>
<state>$FILE_BNAME$.o</state> <state>$FILE_BNAME$.o</state>
</option> </option>
<option>
<name>AMultibyteSupport</name>
<state>0</state>
</option>
<option> <option>
<name>ALimitErrorsCheck</name> <name>ALimitErrorsCheck</name>
<state>0</state> <state>0</state>
@ -1607,7 +1684,7 @@
<settings> <settings>
<name>BICOMP</name> <name>BICOMP</name>
<archiveVersion>0</archiveVersion> <archiveVersion>0</archiveVersion>
<data/> <data />
</settings> </settings>
<settings> <settings>
<name>BUILDACTION</name> <name>BUILDACTION</name>
@ -1621,7 +1698,7 @@
<name>ILINK</name> <name>ILINK</name>
<archiveVersion>0</archiveVersion> <archiveVersion>0</archiveVersion>
<data> <data>
<version>17</version> <version>20</version>
<wantNonLocal>1</wantNonLocal> <wantNonLocal>1</wantNonLocal>
<debug>0</debug> <debug>0</debug>
<option> <option>
@ -1893,7 +1970,7 @@
</option> </option>
<option> <option>
<name>CrcAlgorithm</name> <name>CrcAlgorithm</name>
<version>0</version> <version>1</version>
<state>1</state> <state>1</state>
</option> </option>
<option> <option>
@ -1909,6 +1986,30 @@
<name>IlinkLogCallGraph</name> <name>IlinkLogCallGraph</name>
<state>0</state> <state>0</state>
</option> </option>
<option>
<name>IlinkIcfFile_AltDefault</name>
<state></state>
</option>
<option>
<name>IlinkEncInput</name>
<state>0</state>
</option>
<option>
<name>IlinkEncOutput</name>
<state>0</state>
</option>
<option>
<name>IlinkEncOutputBom</name>
<state>1</state>
</option>
<option>
<name>IlinkHeapSelect</name>
<state>1</state>
</option>
<option>
<name>IlinkLocaleSelect</name>
<state>1</state>
</option>
</data> </data>
</settings> </settings>
<settings> <settings>
@ -1935,12 +2036,12 @@
<settings> <settings>
<name>BILINK</name> <name>BILINK</name>
<archiveVersion>0</archiveVersion> <archiveVersion>0</archiveVersion>
<data/> <data />
</settings> </settings>
<settings> <settings>
<name>Coder</name> <name>Coder</name>
<archiveVersion>0</archiveVersion> <archiveVersion>0</archiveVersion>
<data/> <data />
</settings> </settings>
</configuration> </configuration>
<configuration> <configuration>
@ -1953,7 +2054,7 @@
<name>General</name> <name>General</name>
<archiveVersion>3</archiveVersion> <archiveVersion>3</archiveVersion>
<data> <data>
<version>24</version> <version>28</version>
<wantNonLocal>1</wantNonLocal> <wantNonLocal>1</wantNonLocal>
<debug>1</debug> <debug>1</debug>
<option> <option>
@ -1972,20 +2073,10 @@
<name>GEndianMode</name> <name>GEndianMode</name>
<state>0</state> <state>0</state>
</option> </option>
<option>
<name>Input variant</name>
<version>3</version>
<state>6</state>
</option>
<option> <option>
<name>Input description</name> <name>Input description</name>
<state>No specifier n, no float nor long long, no scan set, no assignment suppressing.</state> <state>No specifier n, no float nor long long, no scan set, no assignment suppressing.</state>
</option> </option>
<option>
<name>Output variant</name>
<version>2</version>
<state>7</state>
</option>
<option> <option>
<name>Output description</name> <name>Output description</name>
<state>No specifier a, A, no specifier n, no float nor long long, no flags.</state> <state>No specifier a, A, no specifier n, no float nor long long, no flags.</state>
@ -2068,7 +2159,7 @@
</option> </option>
<option> <option>
<name>GBECoreSlave</name> <name>GBECoreSlave</name>
<version>24</version> <version>25</version>
<state>39</state> <state>39</state>
</option> </option>
<option> <option>
@ -2085,7 +2176,7 @@
</option> </option>
<option> <option>
<name>CoreVariant</name> <name>CoreVariant</name>
<version>24</version> <version>25</version>
<state>39</state> <state>39</state>
</option> </option>
<option> <option>
@ -2108,16 +2199,53 @@
</option> </option>
<option> <option>
<name>GFPUCoreSlave2</name> <name>GFPUCoreSlave2</name>
<version>24</version> <version>25</version>
<state>39</state> <state>39</state>
</option> </option>
<option>
<name>OGCMSISPackSelectDevice</name>
</option>
<option>
<name>OgLibHeap</name>
<state>0</state>
</option>
<option>
<name>OGLibAdditionalLocale</name>
<state>0</state>
</option>
<option>
<name>OGPrintfVariant</name>
<version>0</version>
<state>4</state>
</option>
<option>
<name>OGPrintfMultibyteSupport</name>
<state>0</state>
</option>
<option>
<name>OGScanfVariant</name>
<version>0</version>
<state>3</state>
</option>
<option>
<name>OGScanfMultibyteSupport</name>
<state>0</state>
</option>
<option>
<name>GenLocaleTags</name>
<state></state>
</option>
<option>
<name>GenLocaleDisplayOnly</name>
<state></state>
</option>
</data> </data>
</settings> </settings>
<settings> <settings>
<name>ICCARM</name> <name>ICCARM</name>
<archiveVersion>2</archiveVersion> <archiveVersion>2</archiveVersion>
<data> <data>
<version>31</version> <version>34</version>
<wantNonLocal>1</wantNonLocal> <wantNonLocal>1</wantNonLocal>
<debug>1</debug> <debug>1</debug>
<option> <option>
@ -2222,10 +2350,6 @@
<name>CCRequirePrototypes</name> <name>CCRequirePrototypes</name>
<state>1</state> <state>1</state>
</option> </option>
<option>
<name>CCMultibyteSupport</name>
<state>0</state>
</option>
<option> <option>
<name>CCDiagWarnAreErr</name> <name>CCDiagWarnAreErr</name>
<state>0</state> <state>0</state>
@ -2272,10 +2396,6 @@
<name>CCCodeSection</name> <name>CCCodeSection</name>
<state>.text</state> <state>.text</state>
</option> </option>
<option>
<name>IInterwork2</name>
<state>0</state>
</option>
<option> <option>
<name>IProcessorMode2</name> <name>IProcessorMode2</name>
<state>1</state> <state>1</state>
@ -2327,18 +2447,6 @@
<name>IccAllowVLA</name> <name>IccAllowVLA</name>
<state>0</state> <state>0</state>
</option> </option>
<option>
<name>IccCppDialect</name>
<state>1</state>
</option>
<option>
<name>IccExceptions</name>
<state>1</state>
</option>
<option>
<name>IccRTTI</name>
<state>1</state>
</option>
<option> <option>
<name>IccStaticDestr</name> <name>IccStaticDestr</name>
<state>1</state> <state>1</state>
@ -2368,13 +2476,37 @@
<name>CCGuardCalls</name> <name>CCGuardCalls</name>
<state>1</state> <state>1</state>
</option> </option>
<option>
<name>CCEncSource</name>
<state>0</state>
</option>
<option>
<name>CCEncOutput</name>
<state>0</state>
</option>
<option>
<name>CCEncOutputBom</name>
<state>1</state>
</option>
<option>
<name>CCEncInput</name>
<state>0</state>
</option>
<option>
<name>IccExceptions2</name>
<state>0</state>
</option>
<option>
<name>IccRTTI2</name>
<state>0</state>
</option>
</data> </data>
</settings> </settings>
<settings> <settings>
<name>AARM</name> <name>AARM</name>
<archiveVersion>2</archiveVersion> <archiveVersion>2</archiveVersion>
<data> <data>
<version>9</version> <version>10</version>
<wantNonLocal>1</wantNonLocal> <wantNonLocal>1</wantNonLocal>
<debug>1</debug> <debug>1</debug>
<option> <option>
@ -2502,10 +2634,6 @@
<name>AOutputFile</name> <name>AOutputFile</name>
<state>$FILE_BNAME$.o</state> <state>$FILE_BNAME$.o</state>
</option> </option>
<option>
<name>AMultibyteSupport</name>
<state>0</state>
</option>
<option> <option>
<name>ALimitErrorsCheck</name> <name>ALimitErrorsCheck</name>
<state>0</state> <state>0</state>
@ -2578,7 +2706,7 @@
<settings> <settings>
<name>BICOMP</name> <name>BICOMP</name>
<archiveVersion>0</archiveVersion> <archiveVersion>0</archiveVersion>
<data/> <data />
</settings> </settings>
<settings> <settings>
<name>BUILDACTION</name> <name>BUILDACTION</name>
@ -2592,7 +2720,7 @@
<name>ILINK</name> <name>ILINK</name>
<archiveVersion>0</archiveVersion> <archiveVersion>0</archiveVersion>
<data> <data>
<version>17</version> <version>20</version>
<wantNonLocal>1</wantNonLocal> <wantNonLocal>1</wantNonLocal>
<debug>1</debug> <debug>1</debug>
<option> <option>
@ -2864,7 +2992,7 @@
</option> </option>
<option> <option>
<name>CrcAlgorithm</name> <name>CrcAlgorithm</name>
<version>0</version> <version>1</version>
<state>1</state> <state>1</state>
</option> </option>
<option> <option>
@ -2880,6 +3008,30 @@
<name>IlinkLogCallGraph</name> <name>IlinkLogCallGraph</name>
<state>0</state> <state>0</state>
</option> </option>
<option>
<name>IlinkIcfFile_AltDefault</name>
<state></state>
</option>
<option>
<name>IlinkEncInput</name>
<state>0</state>
</option>
<option>
<name>IlinkEncOutput</name>
<state>0</state>
</option>
<option>
<name>IlinkEncOutputBom</name>
<state>1</state>
</option>
<option>
<name>IlinkHeapSelect</name>
<state>1</state>
</option>
<option>
<name>IlinkLocaleSelect</name>
<state>1</state>
</option>
</data> </data>
</settings> </settings>
<settings> <settings>
@ -2906,12 +3058,12 @@
<settings> <settings>
<name>BILINK</name> <name>BILINK</name>
<archiveVersion>0</archiveVersion> <archiveVersion>0</archiveVersion>
<data/> <data />
</settings> </settings>
<settings> <settings>
<name>Coder</name> <name>Coder</name>
<archiveVersion>0</archiveVersion> <archiveVersion>0</archiveVersion>
<data/> <data />
</settings> </settings>
</configuration> </configuration>
<group> <group>
@ -3057,5 +3209,3 @@
</file> </file>
</group> </group>
</project> </project>

View File

@ -1,13 +1,13 @@
/***************************************************************************** /*****************************************************************************
* Product: DPP example extened for QXK * Product: DPP example extened for QXK
* Last Updated for Version: 5.7.2 * Last Updated for Version: 5.9.0
* Date of the Last Update: 2016-09-28 * Date of the Last Update: 2017-03-13
* *
* Q u a n t u m L e a P s * Q u a n t u m L e a P s
* --------------------------- * ---------------------------
* innovating embedded systems * innovating embedded systems
* *
* Copyright (C) Quantum Leaps, LLC. All rights reserved. * Copyright (C) 2005-2017 Quantum Leaps, LLC. All rights reserved.
* *
* This program is open source software: you can redistribute it and/or * This program is open source software: you can redistribute it and/or
* modify it under the terms of the GNU General Public License as published * modify it under the terms of the GNU General Public License as published
@ -28,13 +28,16 @@
* along with this program. If not, see <http://www.gnu.org/licenses/>. * along with this program. If not, see <http://www.gnu.org/licenses/>.
* *
* Contact information: * Contact information:
* http://www.state-machine.com * https://state-machine.com
* mailto:info@state-machine.com * mailto:info@state-machine.com
*****************************************************************************/ *****************************************************************************/
#include "qpc.h" #include "qpc.h"
#include "dpp.h" #include "dpp.h"
#include "bsp.h" #include "bsp.h"
static QTicker l_ticker0;
QActive *the_Ticker0 = &l_ticker0;
/*..........................................................................*/ /*..........................................................................*/
int main() { int main() {
static QEvt const *tableQueueSto[N_PHILO]; static QEvt const *tableQueueSto[N_PHILO];
@ -52,6 +55,7 @@ int main() {
Philo_ctor(); /* instantiate all Philosopher active objects */ Philo_ctor(); /* instantiate all Philosopher active objects */
Table_ctor(); /* instantiate the Table active object */ Table_ctor(); /* instantiate the Table active object */
QTicker_ctor(&l_ticker0, 0U); /* ticker AO for tick rate 0 */
Test1_ctor(); /* instantiate the Test1 extended thread */ Test1_ctor(); /* instantiate the Test1 extended thread */
Test2_ctor(); /* instantiate the Test2 extended thread */ Test2_ctor(); /* instantiate the Test2 extended thread */
@ -73,9 +77,11 @@ int main() {
/* initialize event pools... */ /* initialize event pools... */
QF_poolInit(smlPoolSto, sizeof(smlPoolSto), sizeof(smlPoolSto[0])); QF_poolInit(smlPoolSto, sizeof(smlPoolSto), sizeof(smlPoolSto[0]));
QACTIVE_START(the_Ticker0, 1U, 0, 0, 0, 0, 0);
/* start the extended thread */ /* start the extended thread */
QXTHREAD_START(&XT_Test1->super, /* Thread to start */ QXTHREAD_START(&XT_Test1->super, /* Thread to start */
(uint_fast8_t)1U, /* QP priority of the thread */ (uint_fast8_t)2U, /* QP priority of the thread */
test1QueueSto, /* message queue storage */ test1QueueSto, /* message queue storage */
Q_DIM(test1QueueSto), /* message length [events] */ Q_DIM(test1QueueSto), /* message length [events] */
test1StackSto, /* stack storage */ test1StackSto, /* stack storage */
@ -85,7 +91,7 @@ int main() {
/* start the Philo active objects... */ /* start the Philo active objects... */
for (n = 0U; n < N_PHILO; ++n) { for (n = 0U; n < N_PHILO; ++n) {
QACTIVE_START(AO_Philo[n], /* AO to start */ QACTIVE_START(AO_Philo[n], /* AO to start */
(uint_fast8_t)(n + 2), /* QP priority of the AO */ (uint_fast8_t)(n + 3), /* QP priority of the AO */
philoQueueSto[n], /* event queue storage */ philoQueueSto[n], /* event queue storage */
Q_DIM(philoQueueSto[n]), /* queue length [events] */ Q_DIM(philoQueueSto[n]), /* queue length [events] */
(void *)0, /* stack storage (not used) */ (void *)0, /* stack storage (not used) */
@ -93,7 +99,7 @@ int main() {
(QEvt *)0); /* initialization event */ (QEvt *)0); /* initialization event */
} }
QXTHREAD_START(&XT_Test2->super, /* Thread to start */ QXTHREAD_START(&XT_Test2->super, /* Thread to start */
(uint_fast8_t)(N_PHILO + 2), /* QP priority of the thread */ (uint_fast8_t)(N_PHILO + 3), /* QP priority of the thread */
test2QueueSto, /* message queue storage */ test2QueueSto, /* message queue storage */
Q_DIM(test2QueueSto), /* message length [events] */ Q_DIM(test2QueueSto), /* message length [events] */
test2StackSto, /* stack storage */ test2StackSto, /* stack storage */
@ -101,7 +107,7 @@ int main() {
(QEvt *)0); /* initialization event */ (QEvt *)0); /* initialization event */
QACTIVE_START(AO_Table, /* AO to start */ QACTIVE_START(AO_Table, /* AO to start */
(uint_fast8_t)(N_PHILO + 3), /* QP priority of the AO */ (uint_fast8_t)(N_PHILO + 4), /* QP priority of the AO */
tableQueueSto, /* event queue storage */ tableQueueSto, /* event queue storage */
Q_DIM(tableQueueSto), /* queue length [events] */ Q_DIM(tableQueueSto), /* queue length [events] */
(void *)0, /* stack storage (not used) */ (void *)0, /* stack storage (not used) */

View File

@ -28,7 +28,7 @@
* along with this program. If not, see <http://www.gnu.org/licenses/>. * along with this program. If not, see <http://www.gnu.org/licenses/>.
* *
* Contact information: * Contact information:
* http://www.state-machine.com * https://state-machine.com
* mailto:info@state-machine.com * mailto:info@state-machine.com
*****************************************************************************/ *****************************************************************************/
#include "qpc.h" #include "qpc.h"

View File

@ -28,7 +28,7 @@
# along with this program. If not, see <http://www.gnu.org/licenses/>. # along with this program. If not, see <http://www.gnu.org/licenses/>.
# #
# Contact information: # Contact information:
# http://www.state-machine.com # https://state-machine.com
# mailto:info@state-machine.com # mailto:info@state-machine.com
############################################################################## ##############################################################################
# examples of invoking this Makefile: # examples of invoking this Makefile:

View File

@ -1,7 +1,7 @@
/***************************************************************************** /*****************************************************************************
* Product: DPP example, Win32-GUI * Product: DPP example, Win32-GUI
* Last updated for version 5.6.5 * Last updated for version 5.9.0
* Last updated on 2016-05-13 * Last updated on 2017-04-14
* *
* Q u a n t u m L e a P s * Q u a n t u m L e a P s
* --------------------------- * ---------------------------
@ -28,7 +28,7 @@
* along with this program. If not, see <http://www.gnu.org/licenses/>. * along with this program. If not, see <http://www.gnu.org/licenses/>.
* *
* Contact information: * Contact information:
* http://www.state-machine.com * https://state-machine.com
* mailto:info@state-machine.com * mailto:info@state-machine.com
*****************************************************************************/ *****************************************************************************/
#include "qpc.h" #include "qpc.h"
@ -493,12 +493,18 @@ void QS_onReset(void) {
} }
/*..........................................................................*/ /*..........................................................................*/
/*! callback function to execute a uesr command (to be implemented in BSP) */ /*! callback function to execute a uesr command (to be implemented in BSP) */
void QS_onCommand(uint8_t cmdId, uint32_t param) { void QS_onCommand(uint8_t cmdId,
uint32_t param1, uint32_t param2, uint32_t param3)
{
(void)cmdId; (void)cmdId;
(void)param; (void)param1;
QS_BEGIN(COMMAND_STAT, (void *)0) /* application-specific record begin */ (void)param2;
(void)param3;
QS_BEGIN(COMMAND_STAT, (void *)1) /* application-specific record begin */
QS_U8(2, cmdId); QS_U8(2, cmdId);
QS_U32(8, param); QS_U32(8, param1);
QS_U32(8, param2);
QS_U32(8, param3);
QS_END() QS_END()
if (cmdId == 10U) { if (cmdId == 10U) {

View File

@ -28,7 +28,7 @@
* along with this program. If not, see <http://www.gnu.org/licenses/>. * along with this program. If not, see <http://www.gnu.org/licenses/>.
* *
* Contact information: * Contact information:
* Web : http://www.state-machine.com * Web : https://state-machine.com
* Email: info@state-machine.com * Email: info@state-machine.com
*****************************************************************************/ *****************************************************************************/
#include "qpc.h" #include "qpc.h"

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