diff --git a/cortex_handlers.c b/cortex_handlers.c index edc0e8e..cbf63b0 100644 --- a/cortex_handlers.c +++ b/cortex_handlers.c @@ -35,7 +35,8 @@ void vApplicationStackOverflowHook(TaskHandle_t xTask, signed char *pcTaskName) while (1); } -#if VERBOSE_HARDFAULT && (__CORTEX_M >= 3) +// && (__CORTEX_M >= 3) +#if VERBOSE_HARDFAULT void prvGetRegistersFromStack( uint32_t *origStack, uint32_t lr_value) { /* These are volatile to try and prevent the compiler/linker optimising them @@ -51,7 +52,9 @@ of this function. */ volatile uint32_t stacked_pc; /* Program counter. */ volatile uint32_t stacked_psr;/* Program status register. */ +#if (__CORTEX_M >= 3) uint32_t cfsr, hfsr, dfsr; + uint32_t bus_fault_address; uint32_t memmanage_fault_address; @@ -60,6 +63,7 @@ of this function. */ cfsr = SCB->CFSR; hfsr = SCB->HFSR; dfsr = SCB->DFSR; +#endif stacked_r0 = origStack[0]; stacked_r1 = origStack[1]; @@ -100,6 +104,7 @@ of this function. */ (exc>=16)?"IRQ":"Unknown" ); +#if (__CORTEX_M >= 3) PRINTF("\r\n- FSR/FAR:\r\n"); PRINTF(" CFSR = \033[36m0x%08"PRIX32"\033[m\r\n", cfsr); PRINTF(" UsageFault: \033[31;1m%s%s%s%s%s%s%s\033[m\r\n" @@ -151,8 +156,9 @@ of this function. */ if (cfsr & 0x8000) PRINTF(" BFAR = \033[33m0x%08"PRIX32"\033[m\r\n", bus_fault_address); PRINTF("\r\n- Misc\r\n"); PRINTF(" LR/EXC_RETURN= %s0x%08"PRIX32"\033[m\n", REDPTR(lr_value), lr_value); +#endif - StatusLed_On(STATUS_FAULT); + Indicator_Effect(STATUS_FAULT); while (1); } #endif @@ -162,19 +168,32 @@ of this function. */ */ void __attribute__((naked)) HardFault_Handler(void) { -#if VERBOSE_HARDFAULT && (__CORTEX_M >= 3) - __asm volatile - ( - " tst lr, #4 \n" - " ite eq \n" - " mrseq r0, msp \n" - " mrsne r0, psp \n" - " ldr r1, [r0, #24] \n" - " mov r2, lr \n" - " ldr r3, handler2_address_const \n" - " bx r3 \n" - " handler2_address_const: .word prvGetRegistersFromStack \n" - ); +#if VERBOSE_HARDFAULT +// __asm volatile +// ( +// " tst lr, #4 \n" +// " ite eq \n" +// " mrseq r0, msp \n" +// " mrsne r0, psp \n" +// " ldr r1, [r0, #24] \n" +// " mov r2, lr \n" +// " ldr r3, handler2_address_const \n" +// " bx r3 \n" +// " handler2_address_const: .word prvGetRegistersFromStack \n" +// ); +// + __asm volatile( ".syntax unified\n" + "MOVS R0, #4 \n" + "MOV R1, LR \n" + "TST R0, R1 \n" + "BEQ _MSP \n" + "MRS R0, PSP \n" + "B prvGetRegistersFromStack \n" + "_MSP: \n" + "MRS R0, MSP \n" + "B prvGetRegistersFromStack \n" + ".syntax divided\n") ; + #endif PRINTF(tFAULT" HARD FAULT\r\n\r\n"); diff --git a/framework/settings.c b/framework/settings.c index f6f04eb..6ad1870 100644 --- a/framework/settings.c +++ b/framework/settings.c @@ -270,7 +270,7 @@ void settings_load_ini_begin(void) void settings_load_ini_key(const char *restrict section, const char *restrict key, const char *restrict value) { - //dbg("[%s] %s = %s", section, key, value); + dbg("[%s] %s = %s", section, key, value); static char namebuf[INI_KEY_MAX]; // SYSTEM and UNITS files must be separate. diff --git a/gex.mk b/gex.mk index 405fc17..7de5234 100644 --- a/gex.mk +++ b/gex.mk @@ -49,14 +49,13 @@ GEX_CFLAGS = \ -D__weak="__attribute__((weak))" -D__packed="__attribute__((__packed__))" \ -std=gnu99 -Wfatal-errors \ -Wall -Wextra -Wshadow \ - -Wwrite-strings -Wold-style-definition -Winline -Wno-missing-noreturn -Wstrict-prototypes -Wreturn-type \ + -Wwrite-strings -Wold-style-definition -Winline -Wstrict-prototypes -Wreturn-type \ -Wredundant-decls -Wfloat-equal -Wsign-compare \ -fno-common -ffunction-sections -fdata-sections -Wno-unused-function \ - -MD -Wno-format-zero-length -Wno-redundant-decls -Wno-unused-parameter \ - -Wno-discarded-qualifiers -Wno-unused-variable -Wno-inline \ - -Wno-float-equal -Wno-implicit-fallthrough -Wno-strict-aliasing \ - -fmerge-constants -fmerge-all-constants \ - -fno-exceptions -Wno-pointer-to-int-cast -Wno-int-to-pointer-cast -finline-small-functions -findirect-inlining \ + -MD -Wno-redundant-decls -Wno-unused-parameter \ + -Wno-unused-variable -Wno-inline \ + -fmerge-constants -fmerge-all-constants -Wno-implicit-fallthrough \ + -fno-exceptions -finline-small-functions -findirect-inlining -Wno-strict-aliasing -Wno-float-equal -Wno-discarded-qualifiers GEX_CDEFS_BASE = \ -D__weak="__attribute__((weak))" \ diff --git a/utils/payload_parser.h b/utils/payload_parser.h index 62d5ac0..e9cc431 100644 --- a/utils/payload_parser.h +++ b/utils/payload_parser.h @@ -41,9 +41,9 @@ typedef struct PayloadParser_ PayloadParser; typedef bool (*pp_empty_handler)(PayloadParser *pp, uint32_t needed); struct PayloadParser_ { - uint8_t *start; //!< Pointer to the beginning of the buffer - uint8_t *current; //!< Pointer to the next byte to be read - uint8_t *end; //!< Pointer to the end of the buffer (start + length) + const uint8_t *start; //!< Pointer to the beginning of the buffer + const uint8_t *current; //!< Pointer to the next byte to be read + const uint8_t *end; //!< Pointer to the end of the buffer (start + length) pp_empty_handler empty_handler; //!< Callback for buffer underrun bool bigendian; //!< Flag to use big-endian parsing bool ok; //!< Indicates that all reads were successful