MISRA-related fixes.

git-svn-id: svn://svn.code.sf.net/p/chibios/svn/trunk@9229 35acf78f-673a-0410-8e92-d51de3d6d3f4
This commit is contained in:
Giovanni Di Sirio 2016-04-03 09:27:34 +00:00
parent a5156a2f8f
commit 88fc433e5d
7 changed files with 104 additions and 22 deletions

View File

@ -66,6 +66,14 @@
#define H_SIZE(hp) ((hp)->used.size)
/*
* Number of pages between two pointers in a MISRA-compatible way.
*/
#define NPAGES(p1, p2) \
/*lint -save -e9033 [10.8] The cast is safe.*/ \
((size_t)((p1) - (p2))) \
/*lint -restore*/
/*===========================================================================*/
/* Module exported variables. */
/*===========================================================================*/
@ -188,7 +196,7 @@ void *chHeapAllocAligned(memory_heap_t *heapp, size_t size, unsigned align) {
/* Pointer aligned to the requested alignment.*/
ahp = (heap_header_t *)MEM_ALIGN_NEXT(H_BLOCK(hp), align) - 1U;
if ((ahp < H_LIMIT(hp)) && (pages <= (size_t)(H_LIMIT(hp) - 1U - ahp))) {
if ((ahp < H_LIMIT(hp)) && (pages <= NPAGES(H_LIMIT(hp), ahp - 1U))) {
/* The block is large enough to contain a correctly aligned area
of sufficient size.*/
@ -196,15 +204,15 @@ void *chHeapAllocAligned(memory_heap_t *heapp, size_t size, unsigned align) {
/* The block is not properly aligned, must split it.*/
size_t bpages;
bpages = H_LIMIT(hp) - H_BLOCK(ahp);
H_PAGES(hp) = ahp - H_BLOCK(hp);
bpages = NPAGES(H_LIMIT(hp), H_BLOCK(ahp));
H_PAGES(hp) = NPAGES(ahp, H_BLOCK(hp));
if (bpages > pages) {
/* The block is bigger than required, must split the excess.*/
heap_header_t *fp;
/* Creating the excess block.*/
fp = H_BLOCK(ahp) + pages;
H_PAGES(fp) = bpages - pages - 1U;
H_PAGES(fp) = NPAGES(bpages, pages - 1U);
/* Linking the excess block.*/
H_NEXT(fp) = H_NEXT(hp);
@ -226,7 +234,7 @@ void *chHeapAllocAligned(memory_heap_t *heapp, size_t size, unsigned align) {
fp = H_BLOCK(hp) + pages;
H_NEXT(fp) = H_NEXT(hp);
H_PAGES(fp) = H_LIMIT(hp) - H_BLOCK(fp);
H_PAGES(fp) = NPAGES(H_LIMIT(hp), H_BLOCK(fp));
H_NEXT(qp) = fp;
}
}

View File

@ -114,9 +114,7 @@ void *chCoreAllocAlignedI(size_t size, unsigned align) {
size = MEM_ALIGN_NEXT(size, align);
p = (uint8_t *)MEM_ALIGN_NEXT(nextmem, align);
/* ---????? lint -save -e9033 [10.8] The cast is safe.*/
if ((size_t)(endmem - p) < size) {
/* ---????? lint -restore*/
if (((size_t)endmem - (size_t)p) < size) {
return NULL;
}
nextmem = p + size;

View File

@ -64,7 +64,10 @@
* @param[in] p variable to be aligned
* @param[in] a alignment, must be a power of two
*/
#define MEM_ALIGN_PREV(p, a) ((size_t)(p) & ~MEM_ALIGN_MASK(a))
#define MEM_ALIGN_PREV(p, a) \
/*lint -save -e9033 [10.8] The cast is safe.*/ \
((size_t)(p) & ~MEM_ALIGN_MASK(a)) \
/*lint -restore*/
/**
* @brief Aligns to the new aligned memory address.
@ -72,8 +75,10 @@
* @param[in] p variable to be aligned
* @param[in] a alignment, must be a power of two
*/
#define MEM_ALIGN_NEXT(p, a) MEM_ALIGN_PREV((size_t)(p) + \
MEM_ALIGN_MASK(a), (a))
#define MEM_ALIGN_NEXT(p, a) \
/*lint -save -e9033 [10.8] The cast is safe.*/ \
MEM_ALIGN_PREV((size_t)(p) + MEM_ALIGN_MASK(a), (a)) \
/*lint -restore*/
/**
* @brief Returns whatever a pointer or memory size is aligned.

View File

@ -244,17 +244,17 @@ typedef struct {
/* When a trace feature is disabled the associated functions are replaced by
an empty macro.*/
#if (CH_DBG_TRACE_MASK & CH_DBG_TRACE_MASK_SWITCH) == 0
#if (CH_DBG_TRACE_MASK & CH_DBG_TRACE_MASK_SWITCH) == 0U
#define _dbg_trace_switch(otp)
#endif
#if (CH_DBG_TRACE_MASK & CH_DBG_TRACE_MASK_ISR) == 0
#if (CH_DBG_TRACE_MASK & CH_DBG_TRACE_MASK_ISR) == 0U
#define _dbg_trace_isr_enter(isr)
#define _dbg_trace_isr_leave(isr)
#endif
#if (CH_DBG_TRACE_MASK & CH_DBG_TRACE_MASK_HALT) == 0
#if (CH_DBG_TRACE_MASK & CH_DBG_TRACE_MASK_HALT) == 0U
#define _dbg_trace_halt(reason)
#endif
#if (CH_DBG_TRACE_MASK & CH_DBG_TRACE_MASK_USER) == 0
#if (CH_DBG_TRACE_MASK & CH_DBG_TRACE_MASK_USER) == 0U
#define chDbgWriteTraceI(up1, up2)
#define chDbgWriteTrace(up1, up2)
#endif
@ -334,17 +334,17 @@ extern "C" {
#endif
#if (CH_DBG_TRACE_MASK != CH_DBG_TRACE_MASK_NONE) || defined(__DOXYGEN__)
void _dbg_trace_init(void);
#if (CH_DBG_TRACE_MASK & CH_DBG_TRACE_MASK_SWITCH) != 0
#if (CH_DBG_TRACE_MASK & CH_DBG_TRACE_MASK_SWITCH) != 0U
void _dbg_trace_switch(thread_t *otp);
#endif
#if (CH_DBG_TRACE_MASK & CH_DBG_TRACE_MASK_ISR) != 0
#if (CH_DBG_TRACE_MASK & CH_DBG_TRACE_MASK_ISR) != 0U
void _dbg_trace_isr_enter(const char *isr);
void _dbg_trace_isr_leave(const char *isr);
#endif
#if (CH_DBG_TRACE_MASK & CH_DBG_TRACE_MASK_HALT) != 0
#if (CH_DBG_TRACE_MASK & CH_DBG_TRACE_MASK_HALT) != 0U
void _dbg_trace_halt(const char *reason);
#endif
#if (CH_DBG_TRACE_MASK & CH_DBG_TRACE_MASK_USER) != 0
#if (CH_DBG_TRACE_MASK & CH_DBG_TRACE_MASK_USER) != 0U
void chDbgWriteTraceI(void *up1, void *up2);
void chDbgWriteTrace(void *up1, void *up2);
void chDbgSuspendTraceI(uint16_t mask);

View File

@ -295,6 +295,10 @@
/* External declarations. */
/*===========================================================================*/
#if !defined(__DOXYGEN__)
extern stkalign_t ch_idle_thread_wa[];
#endif
#ifdef __cplusplus
extern "C" {
#endif

View File

@ -172,8 +172,7 @@ thread_t *chThdCreateSuspendedI(const thread_descriptor_t *tdp) {
chDbgCheck(MEM_IS_ALIGNED(tdp->wbase, PORT_WORKING_AREA_ALIGN) &&
MEM_IS_ALIGNED(tdp->wend, PORT_STACK_ALIGN) &&
(tdp->wend > tdp->wbase) &&
((size_t)((tdp->wend - tdp->wbase) *
sizeof (stkalign_t)) >= THD_WORKING_AREA_SIZE(0)));
(((size_t)tdp->wend - (size_t)tdp->wbase) >= THD_WORKING_AREA_SIZE(0)));
chDbgCheck((tdp->prio <= HIGHPRIO) && (tdp->funcp != NULL));
/* The thread structure is laid out in the upper part of the thread
@ -518,7 +517,7 @@ void chThdExitS(msg_t msg) {
registry because there is no memory to recover.*/
#if CH_CFG_USE_DYNAMIC == TRUE
if ((tp->refs == (trefs_t)0) &&
(tp->flags & CH_FLAG_MODE_MASK) == CH_FLAG_MODE_STATIC) {
((tp->flags & CH_FLAG_MODE_MASK) == CH_FLAG_MODE_STATIC)) {
REG_REMOVE(tp);
}
#else

View File

@ -41,14 +41,18 @@
* @brief System time counter resolution.
* @note Allowed values are 16 or 32 bits.
*/
#if !defined(CH_CFG_ST_RESOLUTION) || defined(__DOXIGEN__)
#define CH_CFG_ST_RESOLUTION 32
#endif
/**
* @brief System tick frequency.
* @details Frequency of the system timer that drives the system ticks. This
* setting also defines the system tick time unit.
*/
#if !defined(CH_CFG_ST_FREQUENCY) || defined(__DOXIGEN__)
#define CH_CFG_ST_FREQUENCY 1000
#endif
/**
* @brief Time delta constant for the tick-less mode.
@ -58,7 +62,9 @@
* The value one is not valid, timeouts are rounded up to
* this value.
*/
#if !defined(CH_CFG_ST_TIMEDELTA) || defined(__DOXIGEN__)
#define CH_CFG_ST_TIMEDELTA 0
#endif
/** @} */
@ -81,7 +87,9 @@
* @note The round robin preemption is not supported in tickless mode and
* must be set to zero in that case.
*/
#if !defined(CH_CFG_TIME_QUANTUM) || defined(__DOXIGEN__)
#define CH_CFG_TIME_QUANTUM 20
#endif
/**
* @brief Managed RAM size.
@ -94,7 +102,9 @@
* provide the @p __heap_base__ and @p __heap_end__ symbols.
* @note Requires @p CH_CFG_USE_MEMCORE.
*/
#if !defined(CH_CFG_MEMCORE_SIZE) || defined(__DOXIGEN__)
#define CH_CFG_MEMCORE_SIZE 0x20000
#endif
/**
* @brief Idle thread automatic spawn suppression.
@ -103,7 +113,9 @@
* function becomes the idle thread and must implement an
* infinite loop.
*/
#if !defined(CH_CFG_NO_IDLE_THREAD) || defined(__DOXIGEN__)
#define CH_CFG_NO_IDLE_THREAD FALSE
#endif
/** @} */
@ -122,7 +134,9 @@
* @note This is not related to the compiler optimization options.
* @note The default is @p TRUE.
*/
#if !defined(CH_CFG_OPTIMIZE_SPEED) || defined(__DOXIGEN__)
#define CH_CFG_OPTIMIZE_SPEED TRUE
#endif
/** @} */
@ -140,7 +154,9 @@
*
* @note The default is @p TRUE.
*/
#if !defined(CH_CFG_USE_TM) || defined(__DOXIGEN__)
#define CH_CFG_USE_TM TRUE
#endif
/**
* @brief Threads registry APIs.
@ -148,7 +164,9 @@
*
* @note The default is @p TRUE.
*/
#if !defined(CH_CFG_USE_REGISTRY) || defined(__DOXIGEN__)
#define CH_CFG_USE_REGISTRY TRUE
#endif
/**
* @brief Threads synchronization APIs.
@ -157,7 +175,9 @@
*
* @note The default is @p TRUE.
*/
#if !defined(CH_CFG_USE_WAITEXIT) || defined(__DOXIGEN__)
#define CH_CFG_USE_WAITEXIT TRUE
#endif
/**
* @brief Semaphores APIs.
@ -165,7 +185,9 @@
*
* @note The default is @p TRUE.
*/
#if !defined(CH_CFG_USE_SEMAPHORES) || defined(__DOXIGEN__)
#define CH_CFG_USE_SEMAPHORES TRUE
#endif
/**
* @brief Semaphores queuing mode.
@ -176,7 +198,9 @@
* requirements.
* @note Requires @p CH_CFG_USE_SEMAPHORES.
*/
#if !defined(CH_CFG_USE_SEMAPHORES_PRIORITY) || defined(__DOXIGEN__)
#define CH_CFG_USE_SEMAPHORES_PRIORITY FALSE
#endif
/**
* @brief Mutexes APIs.
@ -184,7 +208,9 @@
*
* @note The default is @p TRUE.
*/
#if !defined(CH_CFG_USE_MUTEXES) || defined(__DOXIGEN__)
#define CH_CFG_USE_MUTEXES TRUE
#endif
/**
* @brief Enables recursive behavior on mutexes.
@ -194,7 +220,9 @@
* @note The default is @p FALSE.
* @note Requires @p CH_CFG_USE_MUTEXES.
*/
#if !defined(CH_CFG_USE_MUTEXES_RECURSIVE) || defined(__DOXIGEN__)
#define CH_CFG_USE_MUTEXES_RECURSIVE FALSE
#endif
/**
* @brief Conditional Variables APIs.
@ -204,7 +232,9 @@
* @note The default is @p TRUE.
* @note Requires @p CH_CFG_USE_MUTEXES.
*/
#if !defined(CH_CFG_USE_CONDVARS) || defined(__DOXIGEN__)
#define CH_CFG_USE_CONDVARS TRUE
#endif
/**
* @brief Conditional Variables APIs with timeout.
@ -214,7 +244,9 @@
* @note The default is @p TRUE.
* @note Requires @p CH_CFG_USE_CONDVARS.
*/
#if !defined(CH_CFG_USE_CONDVARS_TIMEOUT) || defined(__DOXIGEN__)
#define CH_CFG_USE_CONDVARS_TIMEOUT TRUE
#endif
/**
* @brief Events Flags APIs.
@ -222,7 +254,9 @@
*
* @note The default is @p TRUE.
*/
#if !defined(CH_CFG_USE_EVENTS) || defined(__DOXIGEN__)
#define CH_CFG_USE_EVENTS TRUE
#endif
/**
* @brief Events Flags APIs with timeout.
@ -232,7 +266,9 @@
* @note The default is @p TRUE.
* @note Requires @p CH_CFG_USE_EVENTS.
*/
#if !defined(CH_CFG_USE_EVENTS_TIMEOUT) || defined(__DOXIGEN__)
#define CH_CFG_USE_EVENTS_TIMEOUT TRUE
#endif
/**
* @brief Synchronous Messages APIs.
@ -241,7 +277,9 @@
*
* @note The default is @p TRUE.
*/
#if !defined(CH_CFG_USE_MESSAGES) || defined(__DOXIGEN__)
#define CH_CFG_USE_MESSAGES TRUE
#endif
/**
* @brief Synchronous Messages queuing mode.
@ -252,7 +290,9 @@
* requirements.
* @note Requires @p CH_CFG_USE_MESSAGES.
*/
#if !defined(CH_CFG_USE_MESSAGES_PRIORITY) || defined(__DOXIGEN__)
#define CH_CFG_USE_MESSAGES_PRIORITY FALSE
#endif
/**
* @brief Mailboxes APIs.
@ -262,7 +302,9 @@
* @note The default is @p TRUE.
* @note Requires @p CH_CFG_USE_SEMAPHORES.
*/
#if !defined(CH_CFG_USE_MAILBOXES) || defined(__DOXIGEN__)
#define CH_CFG_USE_MAILBOXES TRUE
#endif
/**
* @brief Core Memory Manager APIs.
@ -271,7 +313,9 @@
*
* @note The default is @p TRUE.
*/
#if !defined(CH_CFG_USE_MEMCORE) || defined(__DOXIGEN__)
#define CH_CFG_USE_MEMCORE TRUE
#endif
/**
* @brief Heap Allocator APIs.
@ -283,7 +327,9 @@
* @p CH_CFG_USE_SEMAPHORES.
* @note Mutexes are recommended.
*/
#if !defined(CH_CFG_USE_HEAP) || defined(__DOXIGEN__)
#define CH_CFG_USE_HEAP TRUE
#endif
/**
* @brief Memory Pools Allocator APIs.
@ -292,7 +338,9 @@
*
* @note The default is @p TRUE.
*/
#if !defined(CH_CFG_USE_MEMPOOLS) || defined(__DOXIGEN__)
#define CH_CFG_USE_MEMPOOLS TRUE
#endif
/**
* @brief Dynamic Threads APIs.
@ -303,7 +351,9 @@
* @note Requires @p CH_CFG_USE_WAITEXIT.
* @note Requires @p CH_CFG_USE_HEAP and/or @p CH_CFG_USE_MEMPOOLS.
*/
#if !defined(CH_CFG_USE_DYNAMIC) || defined(__DOXIGEN__)
#define CH_CFG_USE_DYNAMIC TRUE
#endif
/** @} */
@ -319,7 +369,9 @@
*
* @note The default is @p FALSE.
*/
#if !defined(CH_DBG_STATISTICS) || defined(__DOXIGEN__)
#define CH_DBG_STATISTICS FALSE
#endif
/**
* @brief Debug option, system state check.
@ -328,7 +380,9 @@
*
* @note The default is @p FALSE.
*/
#if !defined(CH_DBG_SYSTEM_STATE_CHECK) || defined(__DOXIGEN__)
#define CH_DBG_SYSTEM_STATE_CHECK FALSE
#endif
/**
* @brief Debug option, parameters checks.
@ -337,7 +391,9 @@
*
* @note The default is @p FALSE.
*/
#if !defined(CH_DBG_ENABLE_CHECKS) || defined(__DOXIGEN__)
#define CH_DBG_ENABLE_CHECKS FALSE
#endif
/**
* @brief Debug option, consistency checks.
@ -347,7 +403,9 @@
*
* @note The default is @p FALSE.
*/
#if !defined(CH_DBG_ENABLE_ASSERTS) || defined(__DOXIGEN__)
#define CH_DBG_ENABLE_ASSERTS FALSE
#endif
/**
* @brief Debug option, trace buffer.
@ -356,14 +414,18 @@
*
* @note The default is @p CH_DBG_TRACE_MASK_NONE.
*/
#if !defined(CH_DBG_TRACE_MASK) || defined(__DOXIGEN__)
#define CH_DBG_TRACE_MASK CH_DBG_TRACE_MASK_NONE
#endif
/**
* @brief Trace buffer entries.
* @note The trace buffer is only allocated if @p CH_DBG_TRACE_MASK is
* different from @p CH_DBG_TRACE_MASK_NONE.
*/
#if !defined(CH_DBG_TRACE_BUFFER_SIZE) || defined(__DOXIGEN__)
#define CH_DBG_TRACE_BUFFER_SIZE 128
#endif
/**
* @brief Debug option, stack checks.
@ -375,7 +437,9 @@
* @note The default failure mode is to halt the system with the global
* @p panic_msg variable set to @p NULL.
*/
#if !defined(CH_DBG_ENABLE_STACK_CHECK) || defined(__DOXIGEN__)
#define CH_DBG_ENABLE_STACK_CHECK FALSE
#endif
/**
* @brief Debug option, stacks initialization.
@ -385,7 +449,9 @@
*
* @note The default is @p FALSE.
*/
#if !defined(CH_DBG_FILL_THREADS) || defined(__DOXIGEN__)
#define CH_DBG_FILL_THREADS FALSE
#endif
/**
* @brief Debug option, threads profiling.
@ -396,7 +462,9 @@
* @note This debug option is not currently compatible with the
* tickless mode.
*/
#if !defined(CH_DBG_THREADS_PROFILING) || defined(__DOXIGEN__)
#define CH_DBG_THREADS_PROFILING FALSE
#endif
/** @} */