From 99f5f9e434577057bc90f4835bfe5af17853495a Mon Sep 17 00:00:00 2001 From: Giovanni Di Sirio Date: Tue, 10 Mar 2015 15:53:36 +0000 Subject: [PATCH] MISRA fixes on NIL. git-svn-id: svn://svn.code.sf.net/p/chibios/svn/trunk@7751 35acf78f-673a-0410-8e92-d51de3d6d3f4 --- os/nil/include/nil.h | 92 ++++++------ os/nil/ports/ARMCMx/compilers/GCC/niltypes.h | 2 +- os/nil/ports/ARMCMx/nilcore.h | 14 +- os/nil/ports/ARMCMx/nilcore_v7m.c | 20 +-- os/nil/ports/ARMCMx/nilcore_v7m.h | 143 ++++++++++--------- os/nil/src/nil.c | 120 +++++++++------- 6 files changed, 207 insertions(+), 184 deletions(-) diff --git a/os/nil/include/nil.h b/os/nil/include/nil.h index 50e18982b..d0dfe18fa 100644 --- a/os/nil/include/nil.h +++ b/os/nil/include/nil.h @@ -30,6 +30,10 @@ #ifndef _NIL_H_ #define _NIL_H_ +/** + * @brief Type of a structure representing a thread. + * @note It is required as an early definition. + */ typedef struct nil_thread thread_t; #include "nilconf.h" @@ -44,7 +48,7 @@ typedef struct nil_thread thread_t; * @name Nil RTOS identification * @{ */ -#define _NIL_ /**< @brief Nil RTOS identification.*/ +#define _NIL_ #define CH_KERNEL_VERSION "1.0.0dev" @@ -57,11 +61,11 @@ typedef struct nil_thread thread_t; * @name Wakeup messages * @{ */ -#define MSG_OK 0 /**< @brief Normal wakeup message. */ -#define MSG_TIMEOUT -1 /**< @brief Wake-up caused by a timeout - condition. */ -#define MSG_RESET -2 /**< @brief Wake-up caused by a reset - condition. */ +#define MSG_OK (msg_t)0 /**< @brief OK wakeup message. */ +#define MSG_TIMEOUT (msg_t)-1 /**< @brief Wake-up caused by + a timeout condition. */ +#define MSG_RESET (msg_t)-2 /**< @brief Wake-up caused by + a reset condition. */ /** @} */ /** @@ -87,11 +91,12 @@ typedef struct nil_thread thread_t; * @name Thread state related macros * @{ */ -#define NIL_STATE_READY 0 /**< @brief Thread ready or executing. */ -#define NIL_STATE_SLEEPING 1 /**< @brief Thread sleeping. */ -#define NIL_STATE_SUSP 2 /**< @brief Thread suspended. */ -#define NIL_STATE_WTSEM 3 /**< @brief Thread waiting on semaphore.*/ -#define NIL_STATE_WTOREVT 4 /**< @brief Thread waiting for events. */ +#define NIL_STATE_READY (tstate_t)0 /**< @brief Thread ready or + executing. */ +#define NIL_STATE_SLEEPING (tstate_t)1 /**< @brief Thread sleeping. */ +#define NIL_STATE_SUSP (tstate_t)2 /**< @brief Thread suspended. */ +#define NIL_STATE_WTSEM (tstate_t)3 /**< @brief On semaphore. */ +#define NIL_STATE_WTOREVT (tstate_t)4 /**< @brief Waiting for events. */ #define NIL_THD_IS_READY(tr) ((tr)->state == NIL_STATE_READY) #define NIL_THD_IS_SLEEPING(tr) ((tr)->state == NIL_STATE_SLEEPING) #define NIL_THD_IS_SUSP(tr) ((tr)->state == NIL_STATE_SUSP) @@ -256,7 +261,7 @@ typedef struct nil_thread thread_t; "be zero or greater than one" #endif -#if NIL_CFG_ENABLE_ASSERTS || NIL_CFG_ENABLE_STACK_CHECK +#if (NIL_CFG_ENABLE_ASSERTS == TRUE) || (NIL_CFG_ENABLE_STACK_CHECK == TRUE) #define NIL_DBG_ENABLED TRUE #else #define NIL_DBG_ENABLED FALSE @@ -264,7 +269,7 @@ typedef struct nil_thread thread_t; /** Boundaries of the idle thread boundaries, only required if stack checking is enabled.*/ -#if NIL_CFG_ENABLE_STACK_CHECK || defined(__DOXYGEN__) +#if (NIL_CFG_ENABLE_STACK_CHECK == TRUE) || defined(__DOXYGEN__) extern stkalign_t __main_thread_stack_base__, __main_thread_stack_end__; #define THD_IDLE_BASE (&__main_thread_stack_base__) @@ -298,7 +303,7 @@ struct nil_semaphore { /** * @brief Thread function. */ -typedef void (*tfunc_t)(void *); +typedef void (*tfunc_t)(void *p); /** * @brief Type of a structure representing a thread static configuration. @@ -316,11 +321,6 @@ struct nil_thread_cfg { void *arg; /**< @brief Thread function argument. */ }; -/** - * @brief Type of a structure representing a thread. - */ -typedef struct nil_thread thread_t; - /** * @brief Type of a thread reference. */ @@ -339,16 +339,16 @@ struct nil_thread { void *p; /**< @brief Generic pointer. */ thread_reference_t *trp; /**< @brief Pointer to thread reference. */ semaphore_t *semp; /**< @brief Pointer to semaphore. */ -#if NIL_CFG_USE_EVENTS || defined(__DOXYGEN__) +#if (NIL_CFG_USE_EVENTS == TRUE) || defined(__DOXYGEN__) eventmask_t ewmask; /**< @brief Enabled events mask. */ #endif } u1; volatile systime_t timeout;/**< @brief Timeout counter, zero if disabled. */ -#if NIL_CFG_USE_EVENTS || defined(__DOXYGEN__) +#if (NIL_CFG_USE_EVENTS == TRUE) || defined(__DOXYGEN__) eventmask_t epmask; /**< @brief Pending events mask. */ #endif -#if NIL_CFG_ENABLE_STACK_CHECK || defined(__DOXYGEN__) +#if (NIL_CFG_ENABLE_STACK_CHECK == TRUE) || defined(__DOXYGEN__) stkalign_t *stklim;/**< @brief Thread stack boundary. */ #endif /* Optional extra fields.*/ @@ -376,13 +376,13 @@ struct nil_system { * or to an higher priority thread if a switch is required. */ thread_t *next; -#if NIL_CFG_ST_TIMEDELTA == 0 || defined(__DOXYGEN__) +#if (NIL_CFG_ST_TIMEDELTA == 0) || defined(__DOXYGEN__) /** * @brief System time. */ systime_t systime; #endif -#if NIL_CFG_ST_TIMEDELTA > 0 || defined(__DOXYGEN__) +#if (NIL_CFG_ST_TIMEDELTA > 0) || defined(__DOXYGEN__) /** * @brief System time of the last tick event. */ @@ -396,7 +396,7 @@ struct nil_system { * @brief Thread structures for all the defined threads. */ thread_t threads[NIL_CFG_NUM_THREADS + 1]; -#if NIL_DBG_ENABLED || defined(__DOXYGEN__) +#if (NIL_DBG_ENABLED == TRUE) || defined(__DOXYGEN__) /** * @brief Panic message. * @note This field is only present if some debug options have been @@ -433,7 +433,7 @@ struct nil_system { * @brief End of user threads table. */ #define THD_TABLE_END \ - {THD_IDLE_BASE, THD_IDLE_END, "idle", 0, NULL} \ + {THD_IDLE_BASE, THD_IDLE_END, "idle", NULL, NULL} \ }; /** @} */ @@ -450,7 +450,7 @@ struct nil_system { * @api */ #define THD_ALIGN_STACK_SIZE(n) \ - ((((n) - 1) | (sizeof(stkalign_t) - 1)) + 1) + ((((n) - 1U) | (sizeof(stkalign_t) - 1U)) + 1U) /** * @brief Calculates the total Working Area size. @@ -547,7 +547,7 @@ struct nil_system { * @api */ #define S2ST(sec) \ - ((systime_t)((sec) * NIL_CFG_ST_FREQUENCY)) + ((systime_t)((uint32_t)(sec) * (uint32_t)NIL_CFG_ST_FREQUENCY)) /** * @brief Milliseconds to system ticks. @@ -560,8 +560,8 @@ struct nil_system { * @api */ #define MS2ST(msec) \ - ((systime_t)(((((uint32_t)(msec)) * \ - ((uint32_t)NIL_CFG_ST_FREQUENCY) - 1UL) / 1000UL) + 1UL)) + ((systime_t)((((((uint32_t)(msec)) * \ + ((uint32_t)NIL_CFG_ST_FREQUENCY)) - 1UL) / 1000UL) + 1UL)) /** * @brief Microseconds to system ticks. @@ -574,8 +574,8 @@ struct nil_system { * @api */ #define US2ST(usec) \ - ((systime_t)(((((uint32_t)(usec)) * \ - ((uint32_t)NIL_CFG_ST_FREQUENCY) - 1UL) / 1000000UL) + 1UL)) + ((systime_t)((((((uint32_t)(usec)) * \ + ((uint32_t)NIL_CFG_ST_FREQUENCY)) - 1UL) / 1000000UL) + 1UL)) /** @} */ /** @@ -708,12 +708,13 @@ struct nil_system { * @brief Suspends the invoking thread until the system time arrives to the * specified value. * - * @param[in] time absolute system time + * @param[in] abstime absolute system time * * @sclass */ -#define chThdSleepUntilS(time) \ - chSchGoSleepTimeoutS(NIL_STATE_SLEEPING, (time) - chVTGetSystemTimeX()) +#define chThdSleepUntilS(abstime) \ + (void) chSchGoSleepTimeoutS(NIL_STATE_SLEEPING, (abstime) - \ + chVTGetSystemTimeX()) /** * @brief Initializes a semaphore with the specified counter value. @@ -774,7 +775,7 @@ struct nil_system { * * @xclass */ -#if NIL_CFG_ST_TIMEDELTA == 0 || defined(__DOXYGEN__) +#if (NIL_CFG_ST_TIMEDELTA == 0) || defined(__DOXYGEN__) #define chVTGetSystemTimeX() (nil.systime) #else #define chVTGetSystemTimeX() port_timer_get_time() @@ -824,9 +825,14 @@ struct nil_system { */ #if !defined(chDbgAssert) #define chDbgAssert(c, r) do { \ - if (NIL_CFG_ENABLE_ASSERTS && !(c)) \ - chSysHalt(__func__); \ -} while (0) + /*lint -save -e506 -e774 [2.1, 14.3] Can be a constant by design.*/ \ + if (NIL_CFG_ENABLE_ASSERTS != FALSE) { \ + if (!(c)) { \ + /*lint -restore*/ \ + chSysHalt(__func__); \ + } \ + } \ +} while (false) #endif /* !defined(chDbgAssert) */ /** @} */ @@ -854,10 +860,10 @@ extern "C" { msg_t chSchGoSleepTimeoutS(tstate_t newstate, systime_t timeout); msg_t chThdSuspendTimeoutS(thread_reference_t *trp, systime_t timeout); void chThdResumeI(thread_reference_t *trp, msg_t msg); - void chThdSleep(systime_t time); - void chThdSleepUntil(systime_t time); - msg_t chSemWaitTimeout(semaphore_t *sp, systime_t time); - msg_t chSemWaitTimeoutS(semaphore_t *sp, systime_t time); + void chThdSleep(systime_t timeout); + void chThdSleepUntil(systime_t abstime); + msg_t chSemWaitTimeout(semaphore_t *sp, systime_t timeout); + msg_t chSemWaitTimeoutS(semaphore_t *sp, systime_t timeout); void chSemSignal(semaphore_t *sp); void chSemSignalI(semaphore_t *sp); void chSemReset(semaphore_t *sp, cnt_t n); diff --git a/os/nil/ports/ARMCMx/compilers/GCC/niltypes.h b/os/nil/ports/ARMCMx/compilers/GCC/niltypes.h index b2e141c6f..402110096 100644 --- a/os/nil/ports/ARMCMx/compilers/GCC/niltypes.h +++ b/os/nil/ports/ARMCMx/compilers/GCC/niltypes.h @@ -46,7 +46,7 @@ * @brief Generic 'true' boolean constant. */ #if !defined(TRUE) || defined(__DOXYGEN__) -#define TRUE (!FALSE) +#define TRUE 1 #endif /** @} */ diff --git a/os/nil/ports/ARMCMx/nilcore.h b/os/nil/ports/ARMCMx/nilcore.h index 525e00542..d2777aeee 100644 --- a/os/nil/ports/ARMCMx/nilcore.h +++ b/os/nil/ports/ARMCMx/nilcore.h @@ -155,7 +155,7 @@ struct port_extctx {}; /** * @brief System saved context. * @details This structure represents the inner stack frame during a context - * switching. + * switch. */ struct port_intctx {}; #endif /* defined(__DOXYGEN__) */ @@ -169,7 +169,7 @@ struct port_intctx {}; /** * @brief Total priority levels. */ -#define CORTEX_PRIORITY_LEVELS (1 << CORTEX_PRIORITY_BITS) +#define CORTEX_PRIORITY_LEVELS (1U << CORTEX_PRIORITY_BITS) /** * @brief Minimum priority level. @@ -182,7 +182,7 @@ struct port_intctx {}; * @brief Maximum priority level. * @details The maximum allowed priority level is always zero. */ -#define CORTEX_MAXIMUM_PRIORITY 0 +#define CORTEX_MAXIMUM_PRIORITY 0U /** * @brief Priority level verification macro. @@ -200,7 +200,7 @@ struct port_intctx {}; * @brief Priority level to priority mask conversion macro. */ #define CORTEX_PRIO_MASK(n) \ - ((n) << (8 - CORTEX_PRIORITY_BITS)) + ((n) << (8U - (unsigned)CORTEX_PRIORITY_BITS)) /*===========================================================================*/ /* External declarations. */ @@ -221,11 +221,11 @@ struct port_intctx {}; #if !defined(_FROM_ASM_) #if NIL_CFG_ST_TIMEDELTA > 0 -#if !PORT_USE_ALT_TIMER +#if PORT_USE_ALT_TIMER == FALSE #include "nilcore_timer.h" -#else /* PORT_USE_ALT_TIMER */ +#else /* PORT_USE_ALT_TIMER != FALSE */ #include "nilcore_timer_alt.h" -#endif /* PORT_USE_ALT_TIMER */ +#endif /* PORT_USE_ALT_TIMER != FALSE */ #endif /* NIL_CFG_ST_TIMEDELTA > 0 */ #endif /* !defined(_FROM_ASM_) */ diff --git a/os/nil/ports/ARMCMx/nilcore_v7m.c b/os/nil/ports/ARMCMx/nilcore_v7m.c index 74851c64f..beb9dc393 100644 --- a/os/nil/ports/ARMCMx/nilcore_v7m.c +++ b/os/nil/ports/ARMCMx/nilcore_v7m.c @@ -51,17 +51,19 @@ /* Module interrupt handlers. */ /*===========================================================================*/ -#if !CORTEX_SIMPLIFIED_PRIORITY || defined(__DOXYGEN__) +#if (CORTEX_SIMPLIFIED_PRIORITY == FALSE) || defined(__DOXYGEN__) /** * @brief SVC vector. * @details The SVC vector is used for exception mode re-entering after a * context switch. * @note The PendSV vector is only used in advanced kernel mode. */ +/*lint -save -e9075 [8.4] All symbols are invoked from asm context.*/ void SVC_Handler(void) { +/*lint -restore*/ struct port_extctx *ctxp; -#if CORTEX_USE_FPU +#if CORTEX_USE_FPU == TRUE /* Enforcing unstacking of the FP part of the context.*/ SCB_FPCCR &= ~FPCCR_LSPACT; #endif @@ -79,19 +81,21 @@ void SVC_Handler(void) { /* Restoring the normal interrupts status.*/ port_unlock_from_isr(); } -#endif /* !CORTEX_SIMPLIFIED_PRIORITY */ +#endif /* CORTEX_SIMPLIFIED_PRIORITY == FALSE */ -#if CORTEX_SIMPLIFIED_PRIORITY || defined(__DOXYGEN__) +#if (CORTEX_SIMPLIFIED_PRIORITY == TRUE) || defined(__DOXYGEN__) /** * @brief PendSV vector. * @details The PendSV vector is used for exception mode re-entering after a * context switch. * @note The PendSV vector is only used in compact kernel mode. */ +/*lint -save -e9075 [8.4] All symbols are invoked from asm context.*/ void PendSV_Handler(void) { +/*lint -restore*/ struct port_extctx *ctxp; -#if CORTEX_USE_FPU +#if CORTEX_USE_FPU == TRUE /* Enforcing unstacking of the FP part of the context.*/ SCB_FPCCR &= ~FPCCR_LSPACT; #endif @@ -106,7 +110,7 @@ void PendSV_Handler(void) { /* Writing back the modified PSP value.*/ __set_PSP((uint32_t)ctxp); } -#endif /* CORTEX_SIMPLIFIED_PRIORITY */ +#endif /* CORTEX_SIMPLIFIED_PRIORITY == TRUE */ /*===========================================================================*/ /* Module exported functions. */ @@ -118,10 +122,10 @@ void PendSV_Handler(void) { void _port_irq_epilogue(void) { port_lock_from_isr(); - if ((SCB->ICSR & SCB_ICSR_RETTOBASE_Msk) != 0) { + if ((SCB->ICSR & SCB_ICSR_RETTOBASE_Msk) != 0U) { struct port_extctx *ctxp; -#if CORTEX_USE_FPU +#if CORTEX_USE_FPU == TRUE /* Enforcing a lazy FPU state save by accessing the FPCSR register.*/ (void) __get_FPSCR(); #endif diff --git a/os/nil/ports/ARMCMx/nilcore_v7m.h b/os/nil/ports/ARMCMx/nilcore_v7m.h index 55cdbb5a5..4a92fd704 100644 --- a/os/nil/ports/ARMCMx/nilcore_v7m.h +++ b/os/nil/ports/ARMCMx/nilcore_v7m.h @@ -25,53 +25,13 @@ * @{ */ -#ifndef _CHCORE_V7M_H_ -#define _CHCORE_V7M_H_ +#ifndef _NILCORE_V7M_H_ +#define _NILCORE_V7M_H_ /*===========================================================================*/ /* Module constants. */ /*===========================================================================*/ -/** - * @name Architecture and Compiler - * @{ - */ -#if (CORTEX_MODEL == CORTEX_M3) || defined(__DOXYGEN__) -/** - * @brief Macro defining the specific ARM architecture. - */ -#define PORT_ARCHITECTURE_ARM_v7M - -/** - * @brief Name of the implemented architecture. - */ -#define PORT_ARCHITECTURE_NAME "ARMv7-M" - -/** - * @brief Name of the architecture variant. - */ -#define PORT_CORE_VARIANT_NAME "Cortex-M3" - -#elif (CORTEX_MODEL == CORTEX_M4) -#define PORT_ARCHITECTURE_ARM_v7ME -#define PORT_ARCHITECTURE_NAME "ARMv7-ME" -#if CORTEX_USE_FPU -#define PORT_CORE_VARIANT_NAME "Cortex-M4F" -#else -#define PORT_CORE_VARIANT_NAME "Cortex-M4" -#endif -#endif - -/** - * @brief Port-specific information string. - */ -#if !CORTEX_SIMPLIFIED_PRIORITY || defined(__DOXYGEN__) -#define PORT_INFO "Advanced kernel mode" -#else -#define PORT_INFO "Compact kernel mode" -#endif -/** @} */ - /** * @brief This port supports a realtime counter. */ @@ -80,7 +40,7 @@ /** * @brief Disabled value for BASEPRI register. */ -#define CORTEX_BASEPRI_DISABLED 0 +#define CORTEX_BASEPRI_DISABLED 0U /*===========================================================================*/ /* Module pre-compile time settings. */ @@ -125,7 +85,7 @@ */ #if !defined(CORTEX_USE_FPU) #define CORTEX_USE_FPU CORTEX_HAS_FPU -#elif CORTEX_USE_FPU && !CORTEX_HAS_FPU +#elif (CORTEX_USE_FPU == TRUE) && (CORTEX_HAS_FPU == FALSE) /* This setting requires an FPU presence check in case it is externally redefined.*/ #error "the selected core does not have an FPU" @@ -149,7 +109,7 @@ * priority level. */ #if !defined(CORTEX_PRIORITY_SVCALL) -#define CORTEX_PRIORITY_SVCALL (CORTEX_MAXIMUM_PRIORITY + 1) +#define CORTEX_PRIORITY_SVCALL (CORTEX_MAXIMUM_PRIORITY + 1U) #elif !CORTEX_IS_VALID_PRIORITY(CORTEX_PRIORITY_SVCALL) /* If it is externally redefined then better perform a validity check on it.*/ #error "invalid priority level specified for CORTEX_PRIORITY_SVCALL" @@ -159,7 +119,7 @@ * @brief NVIC VTOR initialization expression. */ #if !defined(CORTEX_VTOR_INIT) || defined(__DOXYGEN__) -#define CORTEX_VTOR_INIT 0x00000000 +#define CORTEX_VTOR_INIT 0x00000000U #endif /** @@ -175,11 +135,51 @@ /* Derived constants and error checks. */ /*===========================================================================*/ -#if !CORTEX_SIMPLIFIED_PRIORITY || defined(__DOXYGEN__) +/** + * @name Architecture and Compiler + * @{ + */ +#if (CORTEX_MODEL == CORTEX_M3) || defined(__DOXYGEN__) +/** + * @brief Macro defining the specific ARM architecture. + */ +#define PORT_ARCHITECTURE_ARM_v7M + +/** + * @brief Name of the implemented architecture. + */ +#define PORT_ARCHITECTURE_NAME "ARMv7-M" + +/** + * @brief Name of the architecture variant. + */ +#define PORT_CORE_VARIANT_NAME "Cortex-M3" + +#elif (CORTEX_MODEL == CORTEX_M4) +#define PORT_ARCHITECTURE_ARM_v7ME +#define PORT_ARCHITECTURE_NAME "ARMv7-ME" +#if CORTEX_USE_FPU +#define PORT_CORE_VARIANT_NAME "Cortex-M4F" +#else +#define PORT_CORE_VARIANT_NAME "Cortex-M4" +#endif +#endif + +/** + * @brief Port-specific information string. + */ +#if (CORTEX_SIMPLIFIED_PRIORITY == FALSE) || defined(__DOXYGEN__) +#define PORT_INFO "Advanced kernel mode" +#else +#define PORT_INFO "Compact kernel mode" +#endif +/** @} */ + +#if (CORTEX_SIMPLIFIED_PRIORITY == FALSE) || defined(__DOXYGEN__) /** * @brief Maximum usable priority for normal ISRs. */ -#define CORTEX_MAX_KERNEL_PRIORITY (CORTEX_PRIORITY_SVCALL + 1) +#define CORTEX_MAX_KERNEL_PRIORITY (CORTEX_PRIORITY_SVCALL + 1U) /** * @brief BASEPRI level within kernel lock. @@ -188,7 +188,7 @@ CORTEX_PRIO_MASK(CORTEX_MAX_KERNEL_PRIORITY) #else -#define CORTEX_MAX_KERNEL_PRIORITY 0 +#define CORTEX_MAX_KERNEL_PRIORITY 0U #endif /** @@ -277,16 +277,18 @@ struct port_intctx { /*===========================================================================*/ /** - * @brief Platform dependent thread stack setup. + * @brief Platform dependent part of the @p chThdCreateI() API. * @details This code usually setup the context switching frame represented * by an @p port_intctx structure. */ #define PORT_SETUP_CONTEXT(tp, wend, pf, arg) { \ - (tp)->ctxp = (struct port_intctx *)(((uint8_t *)(wend)) - \ + /*lint -save -e611 -e9074 -e9087 [11.1, 11.3] Casts are planned here.*/ \ + (tp)->ctxp = (struct port_intctx *)((uint8_t *)(wend) - \ sizeof(struct port_intctx)); \ (tp)->ctxp->r4 = (regarm_t)(pf); \ (tp)->ctxp->r5 = (regarm_t)(arg); \ (tp)->ctxp->lr = (regarm_t)(_port_thread_start); \ + /*lint -restore*/ \ } /** @@ -295,7 +297,7 @@ struct port_intctx { */ #define PORT_WA_SIZE(n) (sizeof(struct port_intctx) + \ sizeof(struct port_extctx) + \ - (n) + (PORT_INT_REQUIRED_STACK)) + ((size_t)(n)) + ((size_t)(PORT_INT_REQUIRED_STACK))) /** * @brief IRQ prologue code. @@ -335,13 +337,14 @@ struct port_intctx { * @param[in] ntp the thread to be switched in * @param[in] otp the thread to be switched out */ -#if !NIL_CFG_ENABLE_STACK_CHECK || defined(__DOXYGEN__) +#if (NIL_CFG_ENABLE_STACK_CHECK == FALSE) || defined(__DOXYGEN__) #define port_switch(ntp, otp) _port_switch(ntp, otp) #else #define port_switch(ntp, otp) { \ struct port_intctx *r13 = (struct port_intctx *)__get_PSP(); \ - if ((stkalign_t *)(r13 - 1) < (otp)->stklim) \ + if ((stkalign_t *)(r13 - 1) < (otp)->stklim) { \ chSysHalt("stack overflow"); \ + } \ _port_switch(ntp, otp); \ } #endif @@ -382,7 +385,7 @@ static inline void port_init(void) { DWT->CTRL |= DWT_CTRL_CYCCNTENA_Msk; /* Initialization of the system vectors used by the port.*/ -#if !CORTEX_SIMPLIFIED_PRIORITY +#if CORTEX_SIMPLIFIED_PRIORITY == FALSE NVIC_SetPriority(SVCall_IRQn, CORTEX_PRIORITY_SVCALL); #endif NVIC_SetPriority(PendSV_IRQn, CORTEX_PRIORITY_PENDSV); @@ -394,12 +397,12 @@ static inline void port_init(void) { * @return The interrupts status. */ static inline syssts_t port_get_irq_status(void) { - register uint32_t sts; + syssts_t sts; -#if !CORTEX_SIMPLIFIED_PRIORITY - sts = __get_BASEPRI(); +#if CORTEX_SIMPLIFIED_PRIORITY == FALSE + sts = (syssts_t)__get_BASEPRI(); #else /* CORTEX_SIMPLIFIED_PRIORITY */ - sts = __get_PRIMASK(); + sts = (syssts_t)__get_PRIMASK(); #endif /* CORTEX_SIMPLIFIED_PRIORITY */ return sts; } @@ -415,10 +418,10 @@ static inline syssts_t port_get_irq_status(void) { */ static inline bool port_irq_enabled(syssts_t sts) { -#if !CORTEX_SIMPLIFIED_PRIORITY - return sts == CORTEX_BASEPRI_DISABLED; +#if CORTEX_SIMPLIFIED_PRIORITY == FALSE + return sts == (syssts_t)CORTEX_BASEPRI_DISABLED; #else /* CORTEX_SIMPLIFIED_PRIORITY */ - return (sts & 1) == 0; + return (sts & (syssts_t)1) == (syssts_t)0; #endif /* CORTEX_SIMPLIFIED_PRIORITY */ } @@ -431,7 +434,7 @@ static inline bool port_irq_enabled(syssts_t sts) { */ static inline bool port_is_isr_context(void) { - return (bool)((__get_IPSR() & 0x1FF) != 0); + return (bool)((__get_IPSR() & 0x1FFU) != 0U); } /** @@ -441,7 +444,7 @@ static inline bool port_is_isr_context(void) { */ static inline void port_lock(void) { -#if !CORTEX_SIMPLIFIED_PRIORITY +#if CORTEX_SIMPLIFIED_PRIORITY == FALSE __set_BASEPRI(CORTEX_BASEPRI_KERNEL); #else /* CORTEX_SIMPLIFIED_PRIORITY */ __disable_irq(); @@ -455,7 +458,7 @@ static inline void port_lock(void) { */ static inline void port_unlock(void) { -#if !CORTEX_SIMPLIFIED_PRIORITY +#if CORTEX_SIMPLIFIED_PRIORITY == FALSE __set_BASEPRI(CORTEX_BASEPRI_DISABLED); #else /* CORTEX_SIMPLIFIED_PRIORITY */ __enable_irq(); @@ -501,7 +504,7 @@ static inline void port_disable(void) { */ static inline void port_suspend(void) { -#if !CORTEX_SIMPLIFIED_PRIORITY || defined(__DOXYGEN__) +#if (CORTEX_SIMPLIFIED_PRIORITY == FALSE) || defined(__DOXYGEN__) __set_BASEPRI(CORTEX_BASEPRI_KERNEL); __enable_irq(); #else @@ -515,7 +518,7 @@ static inline void port_suspend(void) { */ static inline void port_enable(void) { -#if !CORTEX_SIMPLIFIED_PRIORITY || defined(__DOXYGEN__) +#if (CORTEX_SIMPLIFIED_PRIORITY == FALSE) || defined(__DOXYGEN__) __set_BASEPRI(CORTEX_BASEPRI_DISABLED); #endif __enable_irq(); @@ -531,8 +534,8 @@ static inline void port_enable(void) { */ static inline void port_wait_for_interrupt(void) { -#if CORTEX_ENABLE_WFI_IDLE - __WFI; +#if CORTEX_ENABLE_WFI_IDLE == TRUE + __WFI(); #endif } @@ -548,6 +551,6 @@ static inline rtcnt_t port_rt_get_counter_value(void) { #endif /* !defined(_FROM_ASM_) */ -#endif /* _CHCORE_V7M_H_ */ +#endif /* _NILCORE_V7M_H_ */ /** @} */ diff --git a/os/nil/src/nil.c b/os/nil/src/nil.c index a598300bc..c1a522d02 100644 --- a/os/nil/src/nil.c +++ b/os/nil/src/nil.c @@ -91,7 +91,8 @@ void chSysInit(void) { /* Initialization hook.*/ NIL_CFG_THREAD_EXT_INIT_HOOK(tp); - tp++, tcp++; + tp++; + tcp++; } #if NIL_CFG_ENABLE_STACK_CHECK @@ -134,8 +135,8 @@ void chSysHalt(const char *reason) { NIL_CFG_SYSTEM_HALT_HOOK(reason); /* Harmless infinite loop.*/ - while (true) - ; + while (true) { + } } /** @@ -152,19 +153,23 @@ void chSysTimerHandlerI(void) { nil.systime++; do { /* Is the thread in a wait state with timeout?.*/ - if (tp->timeout > 0) { + if (tp->timeout > (systime_t)0) { chDbgAssert(!NIL_THD_IS_READY(tp), "is ready"); /* Did the timer reach zero?*/ - if (--tp->timeout == 0) { + if (--tp->timeout == (systime_t)0) { /* Timeout on semaphores requires a special handling because the semaphore counter must be incremented.*/ - if (NIL_THD_IS_WTSEM(tp)) + /*lint -save -e9013 [15.7] There is no else because it is not needed.*/ + if (NIL_THD_IS_WTSEM(tp)) { tp->u1.semp->cnt++; - else if (NIL_THD_IS_SUSP(tp)) + } + else if (NIL_THD_IS_SUSP(tp)) { *tp->u1.trp = NULL; - chSchReadyI(tp, MSG_TIMEOUT); + } + /*lint -restore*/ + (void) chSchReadyI(tp, MSG_TIMEOUT); } } /* Lock released in order to give a preemption chance on those @@ -175,30 +180,35 @@ void chSysTimerHandlerI(void) { } while (tp < &nil.threads[NIL_CFG_NUM_THREADS]); #else thread_t *tp = &nil.threads[0]; - systime_t next = 0; + systime_t next = (systime_t)0; chDbgAssert(nil.nexttime == port_timer_get_alarm(), "time mismatch"); do { /* Is the thread in a wait state with timeout?.*/ - if (tp->timeout > 0) { + if (tp->timeout > (systime_t)0) { chDbgAssert(!NIL_THD_IS_READY(tp), "is ready"); chDbgAssert(tp->timeout >= nil.nexttime - nil.lasttime, "skipped one"); tp->timeout -= nil.nexttime - nil.lasttime; - if (tp->timeout == 0) { + if (tp->timeout == (systime_t)0) { /* Timeout on semaphores requires a special handling because the semaphore counter must be incremented.*/ - if (NIL_THD_IS_WTSEM(tp)) + /*lint -save -e9013 [15.7] There is no else because it is not needed.*/ + if (NIL_THD_IS_WTSEM(tp)) { tp->u1.semp->cnt++; - else if (NIL_THD_IS_SUSP(tp)) + } + else if (NIL_THD_IS_SUSP(tp)) { *tp->u1.trp = NULL; - chSchReadyI(tp, MSG_TIMEOUT); + } + /*lint -restore*/ + (void) chSchReadyI(tp, MSG_TIMEOUT); } else { - if (tp->timeout <= (systime_t)(next - 1)) + if (tp->timeout <= (systime_t)(next - (systime_t)1)) { next = tp->timeout; + } } } /* Lock released in order to give a preemption chance on those @@ -208,7 +218,7 @@ void chSysTimerHandlerI(void) { chSysLockFromISR(); } while (tp < &nil.threads[NIL_CFG_NUM_THREADS]); nil.lasttime = nil.nexttime; - if (next > 0) { + if (next > (systime_t)0) { nil.nexttime += next; port_timer_set_alarm(nil.nexttime); } @@ -228,8 +238,9 @@ void chSysTimerHandlerI(void) { */ void chSysUnconditionalLock(void) { - if (port_irq_enabled(port_get_irq_status())) + if (port_irq_enabled(port_get_irq_status())) { chSysLock(); + } } /** @@ -241,8 +252,9 @@ void chSysUnconditionalLock(void) { */ void chSysUnconditionalUnlock(void) { - if (!port_irq_enabled(port_get_irq_status())) + if (!port_irq_enabled(port_get_irq_status())) { chSysUnlock(); + } } /** @@ -262,10 +274,12 @@ syssts_t chSysGetStatusAndLockX(void) { syssts_t sts = port_get_irq_status(); if (port_irq_enabled(sts)) { - if (port_is_isr_context()) + if (port_is_isr_context()) { chSysLockFromISR(); - else + } + else { chSysLock(); + } } return sts; } @@ -282,8 +296,9 @@ syssts_t chSysGetStatusAndLockX(void) { void chSysRestoreStatusX(syssts_t sts) { if (port_irq_enabled(sts)) { - if (port_is_isr_context()) + if (port_is_isr_context()) { chSysUnlockFromISR(); + } else { chSchRescheduleS(); chSysUnlock(); @@ -309,9 +324,10 @@ thread_t *chSchReadyI(thread_t *tp, msg_t msg) { tp->u1.msg = msg; tp->state = NIL_STATE_READY; - tp->timeout = 0; - if (tp < nil.next) + tp->timeout = (systime_t)0; + if (tp < nil.next) { nil.next = tp; + } return tp; } @@ -455,23 +471,21 @@ void chThdResumeI(thread_reference_t *trp, msg_t msg) { chDbgAssert(NIL_THD_IS_SUSP(tr), "not suspended"); *trp = NULL; - chSchReadyI(tr, msg); + (void) chSchReadyI(tr, msg); } } /** * @brief Suspends the invoking thread for the specified time. * - * @param[in] time the delay in system ticks + * @param[in] timeout the delay in system ticks * * @api */ -void chThdSleep(systime_t time) { +void chThdSleep(systime_t timeout) { chSysLock(); - - chThdSleepS(time); - + (void) chThdSleepS(timeout); chSysUnlock(); } @@ -479,16 +493,14 @@ void chThdSleep(systime_t time) { * @brief Suspends the invoking thread until the system time arrives to the * specified value. * - * @param[in] time absolute system time + * @param[in] abstime absolute system time * * @api */ -void chThdSleepUntil(systime_t time) { +void chThdSleepUntil(systime_t abstime) { chSysLock(); - - chThdSleepUntilS(time); - + chThdSleepUntilS(abstime); chSysUnlock(); } @@ -515,10 +527,9 @@ msg_t chSemWaitTimeout(semaphore_t *sp, systime_t timeout) { msg_t msg; chSysLock(); - msg = chSemWaitTimeoutS(sp, timeout); - chSysUnlock(); + return msg; } @@ -546,14 +557,15 @@ msg_t chSemWaitTimeoutS(semaphore_t *sp, systime_t timeout) { /* Note, the semaphore counter is a volatile variable so accesses are manually optimized.*/ cnt_t cnt = sp->cnt; - if (cnt <= 0) { - if (TIME_IMMEDIATE == timeout) + if (cnt <= (cnt_t)0) { + if (TIME_IMMEDIATE == timeout) { return MSG_TIMEOUT; - sp->cnt = cnt - 1; + } + sp->cnt = cnt - (cnt_t)1; nil.current->u1.semp = sp; return chSchGoSleepTimeoutS(NIL_STATE_WTSEM, timeout); } - sp->cnt = cnt - 1; + sp->cnt = cnt - (cnt_t)1; return MSG_OK; } @@ -571,10 +583,8 @@ msg_t chSemWaitTimeoutS(semaphore_t *sp, systime_t timeout) { void chSemSignal(semaphore_t *sp) { chSysLock(); - chSemSignalI(sp); chSchRescheduleS(); - chSysUnlock(); } @@ -591,7 +601,7 @@ void chSemSignal(semaphore_t *sp) { */ void chSemSignalI(semaphore_t *sp) { - if (++sp->cnt <= 0) { + if (++sp->cnt <= (cnt_t)0) { thread_reference_t tr = nil.threads; while (true) { /* Is this thread waiting on this semaphore?*/ @@ -599,7 +609,7 @@ void chSemSignalI(semaphore_t *sp) { chDbgAssert(NIL_THD_IS_WTSEM(tr), "not waiting"); - chSchReadyI(tr, MSG_OK); + (void) chSchReadyI(tr, MSG_OK); return; } tr++; @@ -629,10 +639,8 @@ void chSemSignalI(semaphore_t *sp) { void chSemReset(semaphore_t *sp, cnt_t n) { chSysLock(); - chSemResetI(sp, n); chSchRescheduleS(); - chSysUnlock(); } @@ -659,14 +667,14 @@ void chSemResetI(semaphore_t *sp, cnt_t n) { cnt = sp->cnt; sp->cnt = n; tp = nil.threads; - while (cnt < 0) { + while (cnt < (cnt_t)0) { /* Is this thread waiting on this semaphore?*/ if (tp->u1.semp == sp) { chDbgAssert(NIL_THD_IS_WTSEM(tp), "not waiting"); cnt++; - chSchReadyI(tp, MSG_RESET); + (void) chSchReadyI(tp, MSG_RESET); } tp++; @@ -686,10 +694,8 @@ void chSemResetI(semaphore_t *sp, cnt_t n) { void chEvtSignal(thread_t *tp, eventmask_t mask) { chSysLock(); - chEvtSignalI(tp, mask); chSchRescheduleS(); - chSysUnlock(); } @@ -708,8 +714,10 @@ void chEvtSignal(thread_t *tp, eventmask_t mask) { void chEvtSignalI(thread_t *tp, eventmask_t mask) { tp->epmask |= mask; - if (NIL_THD_IS_WTOREVT(tp) && ((tp->epmask & tp->u1.ewmask) != 0)) - chSchReadyI(tp, MSG_OK); + if (NIL_THD_IS_WTOREVT(tp) && + ((tp->epmask & tp->u1.ewmask) != (eventmask_t)0)) { + (void) chSchReadyI(tp, MSG_OK); + } } /** @@ -734,10 +742,9 @@ eventmask_t chEvtWaitAnyTimeout(eventmask_t mask, systime_t timeout) { eventmask_t m; chSysLock(); - m = chEvtWaitAnyTimeoutS(mask, timeout); - chSysUnlock(); + return m; } @@ -763,19 +770,22 @@ eventmask_t chEvtWaitAnyTimeoutS(eventmask_t mask, systime_t timeout) { thread_t *ctp = nil.current; eventmask_t m; - if ((m = (ctp->epmask & mask)) == 0) { + if ((m = (ctp->epmask & mask)) == (eventmask_t)0) { if (TIME_IMMEDIATE == timeout) { chSysUnlock(); + return (eventmask_t)0; } ctp->u1.ewmask = mask; if (chSchGoSleepTimeoutS(NIL_STATE_WTOREVT, timeout) < MSG_OK) { chSysUnlock(); + return (eventmask_t)0; } m = ctp->epmask & mask; } ctp->epmask &= ~m; + return m; }