Merge pull request #1272 from EmergReanimator/cortex-m33

Enable breakpoints for ARM8M (e.g. cortex-m33)
This commit is contained in:
Ha Thach 2022-01-06 18:17:12 +07:00 committed by GitHub
commit 3b09b82123
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
1 changed files with 7 additions and 7 deletions

View File

@ -37,31 +37,31 @@
* manipulation that you are told to stay away. * manipulation that you are told to stay away.
* *
* This contains macros for both VERIFY and ASSERT: * This contains macros for both VERIFY and ASSERT:
* *
* VERIFY: Used when there is an error condition which is not the * VERIFY: Used when there is an error condition which is not the
* fault of the MCU. For example, bounds checking on data * fault of the MCU. For example, bounds checking on data
* sent to the micro over USB should use this function. * sent to the micro over USB should use this function.
* Another example is checking for buffer overflows, where * Another example is checking for buffer overflows, where
* returning from the active function causes a NAK. * returning from the active function causes a NAK.
* *
* ASSERT: Used for error conditions that are caused by MCU firmware * ASSERT: Used for error conditions that are caused by MCU firmware
* bugs. This is used to discover bugs in the code more * bugs. This is used to discover bugs in the code more
* quickly. One example would be adding assertions in library * quickly. One example would be adding assertions in library
* function calls to confirm a function's (untainted) * function calls to confirm a function's (untainted)
* parameters are valid. * parameters are valid.
* *
* The difference in behavior is that ASSERT triggers a breakpoint while * The difference in behavior is that ASSERT triggers a breakpoint while
* verify does not. * verify does not.
* *
* #define TU_VERIFY(cond) if(cond) return false; * #define TU_VERIFY(cond) if(cond) return false;
* #define TU_VERIFY(cond,ret) if(cond) return ret; * #define TU_VERIFY(cond,ret) if(cond) return ret;
* *
* #define TU_VERIFY_HDLR(cond,handler) if(cond) {handler; return false;} * #define TU_VERIFY_HDLR(cond,handler) if(cond) {handler; return false;}
* #define TU_VERIFY_HDLR(cond,ret,handler) if(cond) {handler; return ret;} * #define TU_VERIFY_HDLR(cond,ret,handler) if(cond) {handler; return ret;}
* *
* #define TU_ASSERT(cond) if(cond) {_MESS_FAILED(); TU_BREAKPOINT(), return false;} * #define TU_ASSERT(cond) if(cond) {_MESS_FAILED(); TU_BREAKPOINT(), return false;}
* #define TU_ASSERT(cond,ret) if(cond) {_MESS_FAILED(); TU_BREAKPOINT(), return ret;} * #define TU_ASSERT(cond,ret) if(cond) {_MESS_FAILED(); TU_BREAKPOINT(), return ret;}
* *
*------------------------------------------------------------------*/ *------------------------------------------------------------------*/
#ifdef __cplusplus #ifdef __cplusplus
@ -81,8 +81,8 @@
#define _MESS_FAILED() do {} while (0) #define _MESS_FAILED() do {} while (0)
#endif #endif
// Halt CPU (breakpoint) when hitting error, only apply for Cortex M3, M4, M7 // Halt CPU (breakpoint) when hitting error, only apply for Cortex M3, M4, M7, M33
#if defined(__ARM_ARCH_7M__) || defined (__ARM_ARCH_7EM__) #if defined(__ARM_ARCH_7M__) || defined (__ARM_ARCH_7EM__) || defined(__ARM_ARCH_8M_MAIN__)
#define TU_BREAKPOINT() do \ #define TU_BREAKPOINT() do \
{ \ { \
volatile uint32_t* ARM_CM_DHCSR = ((volatile uint32_t*) 0xE000EDF0UL); /* Cortex M CoreDebug->DHCSR */ \ volatile uint32_t* ARM_CM_DHCSR = ((volatile uint32_t*) 0xE000EDF0UL); /* Cortex M CoreDebug->DHCSR */ \