git-svn-id: svn://svn.code.sf.net/p/chibios/svn/trunk@7744 35acf78f-673a-0410-8e92-d51de3d6d3f4

master
Giovanni Di Sirio 2015-03-09 14:57:41 +00:00
parent a9cbe386f2
commit b8dcd884ff
8 changed files with 69 additions and 43 deletions

View File

@ -199,4 +199,4 @@ include $(RULESPATH)/rules.mk
# MISRA check rule, requires PCLint and the setup files, not provided. # MISRA check rule, requires PCLint and the setup files, not provided.
# #
misra: misra:
@lint-nt -v -w3 $(DEFS) pclint/co-gcc.lnt pclint/au-misra3.lnt pclint/waivers.lnt $(INCDIR) $(KERNSRC) &> misra.txt @lint-nt -v -w3 $(DEFS) pclint/co-gcc.lnt pclint/au-misra3.lnt pclint/waivers.lnt $(IINCDIR) $(CSRC) &> misra.txt

View File

@ -29,8 +29,6 @@ static THD_FUNCTION(Thread1, arg) {
while (true) { while (true) {
chThdSleepMilliseconds(1000); chThdSleepMilliseconds(1000);
} }
return 0;
} }
/* /*
@ -48,7 +46,7 @@ int main(void) {
/* /*
* Creates the example thread. * Creates the example thread.
*/ */
chThdCreateStatic(waThread1, sizeof(waThread1), NORMALPRIO, Thread1, NULL); (void) chThdCreateStatic(waThread1, sizeof(waThread1), NORMALPRIO, Thread1, NULL);
/* /*
* Normal main() thread activity, in this demo it just sleeps. * Normal main() thread activity, in this demo it just sleeps.

View File

@ -26,36 +26,40 @@
*/ */
#include <stdint.h> #include <stdint.h>
#include <stdbool.h>
#if !defined(FALSE) #if !defined(FALSE)
#define FALSE 0 #define FALSE 0
#endif #endif
#if !defined(TRUE) #if !defined(TRUE)
#define TRUE (!FALSE) #define TRUE 1
#endif #endif
#define SCB_CPACR *((uint32_t *)0xE000ED88U) #define SCB_CPACR *((uint32_t *)0xE000ED88U)
#define SCB_FPCCR *((uint32_t *)0xE000EF34U) #define SCB_FPCCR *((uint32_t *)0xE000EF34U)
#define SCB_FPDSCR *((uint32_t *)0xE000EF3CU) #define SCB_FPDSCR *((uint32_t *)0xE000EF3CU)
#define FPCCR_ASPEN (0x1U << 31) #define FPCCR_ASPEN (uint32_t)((uint32_t)0x1U << (uint32_t)31U)
#define FPCCR_LSPEN (0x1U << 30) #define FPCCR_LSPEN (uint32_t)((uint32_t)0x1U << (uint32_t)30U)
typedef void (*funcp_t)(void); typedef void (*funcp_t)(void);
typedef funcp_t * funcpp_t; typedef funcp_t * funcpp_t;
#define SYMVAL(sym) (uint32_t)(((uint8_t *)&(sym)) - ((uint8_t *)0)) #define SYMVAL(sym) (uint32_t)&(sym)
/* /*
* Area fill code, it is a macro because here functions cannot be called * Area fill code, it is a macro because here functions cannot be called
* until stacks are initialized. * until stacks are initialized.
*/ */
#define fill32(start, end, filler) { \ #define fill32(start, end, filler) do { \
uint32_t *p1 = (start); \ uint32_t *p1 = (start); \
uint32_t *p2 = (end); \ uint32_t *p2 = (end); \
while (p1 < p2) \ /*lint -save -e681 [2.1] Lint cannot see the scatter file symbols.*/ \
while (p1 < p2) { \
/*lint -restore*/ \
*p1++ = (filler); \ *p1++ = (filler); \
} } \
} while (false)
/*===========================================================================*/ /*===========================================================================*/
/** /**
@ -223,7 +227,9 @@ extern void main(void);
#if !defined(__DOXYGEN__) #if !defined(__DOXYGEN__)
__attribute__((weak)) __attribute__((weak))
#endif #endif
/*lint -save -e9075 [8.4] All symbols are invoked from asm context.*/
void __early_init(void) {} void __early_init(void) {}
/*lint -restore*/
/** /**
* @brief Late initialization. * @brief Late initialization.
@ -235,7 +241,9 @@ void __early_init(void) {}
#if !defined(__DOXYGEN__) #if !defined(__DOXYGEN__)
__attribute__((weak)) __attribute__((weak))
#endif #endif
/*lint -save -e9075 [8.4] All symbols are invoked from asm context.*/
void __late_init(void) {} void __late_init(void) {}
/*lint -restore*/
/** /**
* @brief Default @p main() function exit handler. * @brief Default @p main() function exit handler.
@ -246,9 +254,12 @@ void __late_init(void) {}
#if !defined(__DOXYGEN__) #if !defined(__DOXYGEN__)
__attribute__((noreturn, weak)) __attribute__((noreturn, weak))
#endif #endif
/*lint -save -e9075 [8.4] All symbols are invoked from asm context.*/
void _default_exit(void) { void _default_exit(void) {
while (1) /*lint -restore*/
;
while (true) {
}
} }
/** /**
@ -257,63 +268,68 @@ void _default_exit(void) {
#if !defined(__DOXYGEN__) #if !defined(__DOXYGEN__)
__attribute__((naked)) __attribute__((naked))
#endif #endif
/*lint -save -e9075 [8.4] All symbols are invoked from asm context.*/
void Reset_Handler(void) { void Reset_Handler(void) {
/*lint -restore*/
uint32_t psp, reg; uint32_t psp, reg;
/* Process Stack initialization, it is allocated starting from the /* Process Stack initialization, it is allocated starting from the
symbol __process_stack_end__ and its lower limit is the symbol symbol __process_stack_end__ and its lower limit is the symbol
__process_stack_base__.*/ __process_stack_base__.*/
asm volatile ("cpsid i"); __asm volatile ("cpsid i");
psp = SYMVAL(__process_stack_end__); psp = SYMVAL(__process_stack_end__);
asm volatile ("msr PSP, %0" : : "r" (psp)); __asm volatile ("msr PSP, %0" : : "r" (psp));
#if CORTEX_USE_FPU #if CORTEX_USE_FPU == TRUE
/* Initializing the FPU context save in lazy mode.*/ /* Initializing the FPU context save in lazy mode.*/
SCB_FPCCR = FPCCR_ASPEN | FPCCR_LSPEN; SCB_FPCCR = FPCCR_ASPEN | FPCCR_LSPEN;
/* CP10 and CP11 set to full access.*/ /* CP10 and CP11 set to full access.*/
SCB_CPACR |= 0x00F00000; SCB_CPACR |= 0x00F00000U;
/* FPSCR and FPDSCR initially zero.*/ /* FPSCR and FPDSCR initially zero.*/
reg = 0; reg = 0;
asm volatile ("vmsr FPSCR, %0" : : "r" (reg) : "memory"); __asm volatile ("vmsr FPSCR, %0" : : "r" (reg) : "memory");
SCB_FPDSCR = reg; SCB_FPDSCR = reg;
/* CPU mode initialization, enforced FPCA bit.*/ /* CPU mode initialization, enforced FPCA bit.*/
reg = CRT0_CONTROL_INIT | 4; reg = (uint32_t)CRT0_CONTROL_INIT | 4U;
#else #else
/* CPU mode initialization.*/ /* CPU mode initialization.*/
reg = CRT0_CONTROL_INIT; reg = CRT0_CONTROL_INIT;
#endif #endif
asm volatile ("msr CONTROL, %0" : : "r" (reg)); __asm volatile ("msr CONTROL, %0" : : "r" (reg));
asm volatile ("isb"); __asm volatile ("isb");
/* Early initialization hook invocation.*/ /* Early initialization hook invocation.*/
__early_init(); __early_init();
#if CRT0_INIT_STACKS #if CRT0_INIT_STACKS == TRUE
/* Main and Process stacks initialization.*/ /* Main and Process stacks initialization.*/
fill32(&__main_stack_base__, fill32(&__main_stack_base__,
&__main_stack_end__, &__main_stack_end__,
CRT0_STACKS_FILL_PATTERN); (uint32_t)CRT0_STACKS_FILL_PATTERN);
fill32(&__process_stack_base__, fill32(&__process_stack_base__,
&__process_stack_end__, &__process_stack_end__,
CRT0_STACKS_FILL_PATTERN); (uint32_t)CRT0_STACKS_FILL_PATTERN);
#endif #endif
#if CRT0_INIT_DATA #if CRT0_INIT_DATA == TRUE
/* DATA segment initialization.*/ /* DATA segment initialization.*/
{ {
uint32_t *tp, *dp; uint32_t *tp, *dp;
tp = &_textdata; tp = &_textdata;
dp = &_data; dp = &_data;
while (dp < &_edata) /*lint -save -e681 [2.1] Lint cannot see the scatter file symbols.*/
while (dp < &_edata) {
/*lint -restore*/
*dp++ = *tp++; *dp++ = *tp++;
} }
}
#endif #endif
#if CRT0_INIT_BSS #if CRT0_INIT_BSS == TRUE
/* BSS segment initialization.*/ /* BSS segment initialization.*/
fill32(&_bss_start, &_bss_end, 0); fill32(&_bss_start, &_bss_end, 0);
#endif #endif
@ -325,7 +341,9 @@ void Reset_Handler(void) {
/* Constructors invocation.*/ /* Constructors invocation.*/
{ {
funcpp_t fpp = &__init_array_start; funcpp_t fpp = &__init_array_start;
/*lint -save -e681 [2.1] Lint cannot see the scatter file symbols.*/
while (fpp < &__init_array_end) { while (fpp < &__init_array_end) {
/*lint -restore*/
(*fpp)(); (*fpp)();
fpp++; fpp++;
} }
@ -335,11 +353,13 @@ void Reset_Handler(void) {
/* Invoking application main() function.*/ /* Invoking application main() function.*/
main(); main();
#if CRT0_CALL_DESTRUCTORS #if CRT0_CALL_DESTRUCTORS == TRUE
/* Destructors invocation.*/ /* Destructors invocation.*/
{ {
funcpp_t fpp = &__fini_array_start; funcpp_t fpp = &__fini_array_start;
/*lint -save -e681 [2.1] Lint cannot see the scatter file symbols.*/
while (fpp < &__fini_array_end) { while (fpp < &__fini_array_end) {
/*lint -restore*/
(*fpp)(); (*fpp)();
fpp++; fpp++;
} }

View File

@ -30,7 +30,7 @@
#include "cmparams.h" #include "cmparams.h"
#if (CORTEX_NUM_VECTORS & 7) != 0 #if (CORTEX_NUM_VECTORS % 8) != 0
#error "the constant CORTEX_NUM_VECTORS must be a multiple of 8" #error "the constant CORTEX_NUM_VECTORS must be a multiple of 8"
#endif #endif
@ -73,10 +73,12 @@ typedef struct {
* *
* @notapi * @notapi
*/ */
/*lint -save -e9075 [8.4] All symbols are invoked from asm context.*/
void _unhandled_exception(void) { void _unhandled_exception(void) {
/*lint -restore*/
while (true) while (true) {
; }
} }
#if !defined(__DOXYGEN__) #if !defined(__DOXYGEN__)
@ -462,7 +464,9 @@ void Vector3FC(void) __attribute__((weak, alias("_unhandled_exception")));
#if !defined(__DOXYGEN__) #if !defined(__DOXYGEN__)
__attribute__ ((used, section("vectors"))) __attribute__ ((used, section("vectors")))
#endif #endif
/*lint -save -e9075 [8.4] All symbols are invoked from asm context.*/
vectors_t _vectors = { vectors_t _vectors = {
/*lint -restore*/
&__main_stack_end__,Reset_Handler, NMI_Handler, HardFault_Handler, &__main_stack_end__,Reset_Handler, NMI_Handler, HardFault_Handler,
MemManage_Handler, BusFault_Handler, UsageFault_Handler, Vector1C, MemManage_Handler, BusFault_Handler, UsageFault_Handler, Vector1C,
Vector20, Vector24, Vector28, SVC_Handler, Vector20, Vector24, Vector28, SVC_Handler,

View File

@ -51,14 +51,16 @@
/* Module interrupt handlers. */ /* Module interrupt handlers. */
/*===========================================================================*/ /*===========================================================================*/
#if !CORTEX_SIMPLIFIED_PRIORITY || defined(__DOXYGEN__) #if (CORTEX_SIMPLIFIED_PRIORITY == FALSE) || defined(__DOXYGEN__)
/** /**
* @brief SVC vector. * @brief SVC vector.
* @details The SVC vector is used for exception mode re-entering after a * @details The SVC vector is used for exception mode re-entering after a
* context switch. * context switch.
* @note The PendSV vector is only used in advanced kernel mode. * @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) { void SVC_Handler(void) {
/*lint -restore*/
struct port_extctx *ctxp; struct port_extctx *ctxp;
#if CORTEX_USE_FPU #if CORTEX_USE_FPU
@ -79,16 +81,18 @@ void SVC_Handler(void) {
/* Restoring the normal interrupts status.*/ /* Restoring the normal interrupts status.*/
port_unlock_from_isr(); 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. * @brief PendSV vector.
* @details The PendSV vector is used for exception mode re-entering after a * @details The PendSV vector is used for exception mode re-entering after a
* context switch. * context switch.
* @note The PendSV vector is only used in compact kernel mode. * @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) { void PendSV_Handler(void) {
/*lint -restore*/
struct port_extctx *ctxp; struct port_extctx *ctxp;
#if CORTEX_USE_FPU #if CORTEX_USE_FPU
@ -106,7 +110,7 @@ void PendSV_Handler(void) {
/* Writing back the modified PSP value.*/ /* Writing back the modified PSP value.*/
__set_PSP((uint32_t)ctxp); __set_PSP((uint32_t)ctxp);
} }
#endif /* CORTEX_SIMPLIFIED_PRIORITY */ #endif /* CORTEX_SIMPLIFIED_PRIORITY == TRUE */
/*===========================================================================*/ /*===========================================================================*/
/* Module exported functions. */ /* Module exported functions. */
@ -118,10 +122,10 @@ void PendSV_Handler(void) {
void _port_irq_epilogue(void) { void _port_irq_epilogue(void) {
port_lock_from_isr(); port_lock_from_isr();
if ((SCB->ICSR & SCB_ICSR_RETTOBASE_Msk) != 0) { if ((SCB->ICSR & SCB_ICSR_RETTOBASE_Msk) != 0U) {
struct port_extctx *ctxp; struct port_extctx *ctxp;
#if CORTEX_USE_FPU #if CORTEX_USE_FPU == TRUE
/* Enforcing a lazy FPU state save by accessing the FPCSR register.*/ /* Enforcing a lazy FPU state save by accessing the FPCSR register.*/
(void) __get_FPSCR(); (void) __get_FPSCR();
#endif #endif
@ -135,7 +139,7 @@ void _port_irq_epilogue(void) {
/* Setting up a fake XPSR register value.*/ /* Setting up a fake XPSR register value.*/
ctxp->xpsr = (regarm_t)0x01000000; ctxp->xpsr = (regarm_t)0x01000000;
#if CORTEX_USE_FPU #if CORTEX_USE_FPU == TRUE
ctxp->fpscr = (regarm_t)FPU->FPDSCR; ctxp->fpscr = (regarm_t)FPU->FPDSCR;
#endif #endif

View File

@ -85,7 +85,7 @@
*/ */
#if !defined(CORTEX_USE_FPU) #if !defined(CORTEX_USE_FPU)
#define CORTEX_USE_FPU CORTEX_HAS_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 /* This setting requires an FPU presence check in case it is externally
redefined.*/ redefined.*/
#error "the selected core does not have an FPU" #error "the selected core does not have an FPU"

View File

@ -14,8 +14,8 @@
Remove temporarily the following -e in order to perform extra code quality Remove temporarily the following -e in order to perform extra code quality
checks.*/ checks.*/
-e526 -e537 -e552 -e526 -e537 -e552
-e613 -e611 -e613
-e714 -e716 -e717 -e749 -e757 -e758 -e759 -e766 -e768 -e769 -e773 -e778 -e793 -e714 -e716 -e717 -e749 -e750 -e754 -e757 -e758 -e759 -e766 -e768 -e769 -e773 -e778 -e793
-e826 -e830 -e835 -e845 -e826 -e830 -e835 -e845
/* Removing *advisory* directives and rules that would negatively impact /* Removing *advisory* directives and rules that would negatively impact

View File

@ -15,8 +15,8 @@
Remove temporarily the following -e in order to perform extra code quality Remove temporarily the following -e in order to perform extra code quality
checks.*/ checks.*/
-e526 -e537 -e552 -e526 -e537 -e552
-e613 -e611 -e613
-e714 -e716 -e717 -e749 -e757 -e758 -e759 -e766 -e768 -e769 -e773 -e778 -e793 -e714 -e716 -e717 -e749 -e750 -e754 -e757 -e758 -e759 -e766 -e768 -e769 -e773 -e778 -e793
-e826 -e830 -e835 -e845 -e826 -e830 -e835 -e845
/* Removing *advisory* directives and rules that would negatively impact /* Removing *advisory* directives and rules that would negatively impact