diff --git a/arch/arm/arm-v6m/cortex-m0/iccarm/port_c.c b/arch/arm/arm-v6m/cortex-m0/iccarm/port_c.c
index 8316e60e..106bb319 100644
--- a/arch/arm/arm-v6m/cortex-m0/iccarm/port_c.c
+++ b/arch/arm/arm-v6m/cortex-m0/iccarm/port_c.c
@@ -76,43 +76,28 @@ __PORT__ void port_standby_mode_enter(void)
#endif
#if TOS_CFG_FAULT_BACKTRACE_EN > 0u
+
__PORT__ void port_fault_diagnosis(void)
{
k_fault_log_writer("fault diagnosis is not supported in CORTEX M0\n");
}
-/*------------------ RealView Compiler -----------------*/
-/* V5 */
-#if defined(__CC_ARM)
-
-__PORT__ __ASM__ void HardFault_Handler(void)
-{
- IMPORT fault_backtrace
-
- MOV r0, lr
- TST lr, #0x04
- ITE EQ
- MRSEQ r1, MSP
- MRSNE r1, PSP
- BL fault_backtrace
-}
-
-/*------------------ ARM Compiler V6 -------------------*/
-#elif defined(__ARMCC_VERSION) && (__ARMCC_VERSION >= 6010050)
-
__PORT__ void __NAKED__ HardFault_Handler(void)
{
__ASM__ __VOLATILE__ (
"MOV r0, lr\n\t"
- "TST lr, #0x04\n\t"
- "ITE EQ\n\t"
- "MRSEQ r1, MSP\n\t"
- "MRSNE r1, PSP\n\t"
- "BL fault_backtrace\n\t"
+ "MOVS r1, #0x04\n\t"
+ "TST r0, r1\n\t"
+ "BEQ _LD_MSP\n\t"
+ "MRS r1, PSP\n\t"
+ "B _EXIT\n"
+ "_LD_MSP:\n\t"
+ "MRS r1, MSP\n"
+ "_EXIT:\n\t"
+ "LDR r2, =fault_backtrace\n\t"
+ "BX r2\n\t"
);
}
-#endif /* ARMCC VERSION */
-
#endif /* TOS_CFG_FAULT_BACKTRACE_EN */
diff --git a/arch/arm/arm-v7m/cortex-m0+/iccarm/port_c.c b/arch/arm/arm-v7m/cortex-m0+/iccarm/port_c.c
index 40f810f2..e2041903 100644
--- a/arch/arm/arm-v7m/cortex-m0+/iccarm/port_c.c
+++ b/arch/arm/arm-v7m/cortex-m0+/iccarm/port_c.c
@@ -93,43 +93,28 @@ __PORT__ void port_standby_mode_enter(void)
#endif
#if TOS_CFG_FAULT_BACKTRACE_EN > 0u
+
__PORT__ void port_fault_diagnosis(void)
{
k_fault_log_writer("fault diagnosis is not supported in CORTEX M0+\n");
}
-/*------------------ RealView Compiler -----------------*/
-/* V5 */
-#if defined(__CC_ARM)
-
-__PORT__ __ASM__ void HardFault_Handler(void)
-{
- IMPORT fault_backtrace
-
- MOV r0, lr
- TST lr, #0x04
- ITE EQ
- MRSEQ r1, MSP
- MRSNE r1, PSP
- BL fault_backtrace
-}
-
-/*------------------ ARM Compiler V6 -------------------*/
-#elif defined(__ARMCC_VERSION) && (__ARMCC_VERSION >= 6010050)
-
__PORT__ void __NAKED__ HardFault_Handler(void)
{
__ASM__ __VOLATILE__ (
"MOV r0, lr\n\t"
- "TST lr, #0x04\n\t"
- "ITE EQ\n\t"
- "MRSEQ r1, MSP\n\t"
- "MRSNE r1, PSP\n\t"
- "BL fault_backtrace\n\t"
+ "MOVS r1, #0x04\n\t"
+ "TST r0, r1\n\t"
+ "BEQ _LD_MSP\n\t"
+ "MRS r1, PSP\n\t"
+ "B _EXIT\n"
+ "_LD_MSP:\n\t"
+ "MRS r1, MSP\n"
+ "_EXIT:\n\t"
+ "LDR r2, =fault_backtrace\n\t"
+ "BX r2\n\t"
);
}
-#endif /* ARMCC VERSION */
-
#endif /* TOS_CFG_FAULT_BACKTRACE_EN */
diff --git a/arch/arm/arm-v7m/cortex-m4/iccarm/port_c.c b/arch/arm/arm-v7m/cortex-m4/iccarm/port_c.c
index 43497d09..f82dfe28 100644
--- a/arch/arm/arm-v7m/cortex-m4/iccarm/port_c.c
+++ b/arch/arm/arm-v7m/cortex-m4/iccarm/port_c.c
@@ -244,25 +244,6 @@ __PORT__ void port_fault_diagnosis(void)
port_fault_do_diagnosis(®s);
}
-/*------------------ RealView Compiler -----------------*/
-/* V5 */
-#if defined(__CC_ARM)
-
-__PORT__ __ASM__ void HardFault_Handler(void)
-{
- IMPORT fault_backtrace
-
- MOV r0, lr
- TST lr, #0x04
- ITE EQ
- MRSEQ r1, MSP
- MRSNE r1, PSP
- BL fault_backtrace
-}
-
-/*------------------ ARM Compiler V6 -------------------*/
-#elif defined(__ARMCC_VERSION) && (__ARMCC_VERSION >= 6010050)
-
__PORT__ void __NAKED__ HardFault_Handler(void)
{
__ASM__ __VOLATILE__ (
@@ -271,11 +252,10 @@ __PORT__ void __NAKED__ HardFault_Handler(void)
"ITE EQ\n\t"
"MRSEQ r1, MSP\n\t"
"MRSNE r1, PSP\n\t"
- "BL fault_backtrace\n\t"
+ "LDR r2, =fault_backtrace\n\t"
+ "BX r2\n\t"
);
}
-#endif /* ARMCC VERSION */
-
#endif /* TOS_CFG_FAULT_BACKTRACE_EN */
diff --git a/arch/arm/arm-v7m/cortex-m7/iccarm/port_c.c b/arch/arm/arm-v7m/cortex-m7/iccarm/port_c.c
index 830be415..62815480 100644
--- a/arch/arm/arm-v7m/cortex-m7/iccarm/port_c.c
+++ b/arch/arm/arm-v7m/cortex-m7/iccarm/port_c.c
@@ -227,25 +227,6 @@ __PORT__ void port_fault_diagnosis(void)
port_fault_do_diagnosis(®s);
}
-/*------------------ RealView Compiler -----------------*/
-/* V5 */
-#if defined(__CC_ARM)
-
-__PORT__ __ASM__ void HardFault_Handler(void)
-{
- IMPORT fault_backtrace
-
- MOV r0, lr
- TST lr, #0x04
- ITE EQ
- MRSEQ r1, MSP
- MRSNE r1, PSP
- BL fault_backtrace
-}
-
-/*------------------ ARM Compiler V6 -------------------*/
-#elif defined(__ARMCC_VERSION) && (__ARMCC_VERSION >= 6010050)
-
__PORT__ void __NAKED__ HardFault_Handler(void)
{
__ASM__ __VOLATILE__ (
@@ -254,11 +235,10 @@ __PORT__ void __NAKED__ HardFault_Handler(void)
"ITE EQ\n\t"
"MRSEQ r1, MSP\n\t"
"MRSNE r1, PSP\n\t"
- "BL fault_backtrace\n\t"
+ "LDR r2, =fault_backtrace\n\t"
+ "BX r2\n\t"
);
}
-#endif /* ARMCC VERSION */
-
#endif /* TOS_CFG_FAULT_BACKTRACE_EN */
diff --git a/arch/arm/arm-v8m/cortex-m23/iccarm/port_c.c b/arch/arm/arm-v8m/cortex-m23/iccarm/port_c.c
index 02a1d724..6276a38a 100644
--- a/arch/arm/arm-v8m/cortex-m23/iccarm/port_c.c
+++ b/arch/arm/arm-v8m/cortex-m23/iccarm/port_c.c
@@ -93,30 +93,12 @@ __PORT__ void port_standby_mode_enter(void)
#endif
#if TOS_CFG_FAULT_BACKTRACE_EN > 0u
+
__PORT__ void port_fault_diagnosis(void)
{
k_fault_log_writer("fault diagnosis is not supported in CORTEX M23\n");
}
-/*------------------ RealView Compiler -----------------*/
-/* V5 */
-#if defined(__CC_ARM)
-
-__PORT__ __ASM__ void HardFault_Handler(void)
-{
- IMPORT fault_backtrace
-
- MOV r0, lr
- TST lr, #0x04
- ITE EQ
- MRSEQ r1, MSP
- MRSNE r1, PSP
- BL fault_backtrace
-}
-
-/*------------------ ARM Compiler V6 -------------------*/
-#elif defined(__ARMCC_VERSION) && (__ARMCC_VERSION >= 6010050)
-
__PORT__ void __NAKED__ HardFault_Handler(void)
{
__ASM__ __VOLATILE__ (
@@ -125,11 +107,10 @@ __PORT__ void __NAKED__ HardFault_Handler(void)
"ITE EQ\n\t"
"MRSEQ r1, MSP\n\t"
"MRSNE r1, PSP\n\t"
- "BL fault_backtrace\n\t"
+ "LDR r2, =fault_backtrace\n\t"
+ "BX r2\n\t"
);
}
-#endif /* ARMCC VERSION */
-
#endif /* TOS_CFG_FAULT_BACKTRACE_EN */
diff --git a/board/ALIENTEK_Apollo_STM32F767/BSP/Src/stm32f7xx_it.c b/board/ALIENTEK_Apollo_STM32F767/BSP/Src/stm32f7xx_it.c
index aa1e0341..26c03169 100644
--- a/board/ALIENTEK_Apollo_STM32F767/BSP/Src/stm32f7xx_it.c
+++ b/board/ALIENTEK_Apollo_STM32F767/BSP/Src/stm32f7xx_it.c
@@ -61,7 +61,7 @@ void NMI_Handler(void)
/**
* @brief This function handles Hard fault interrupt.
*/
-void HardFault_Handler(void)
+void xHardFault_Handler(void)
{
/* USER CODE BEGIN HardFault_IRQn 0 */
diff --git a/board/ALIENTEK_Apollo_STM32F767/IAR/hello_world/ALIENTEK_Aploo_STM32F767.ewp b/board/ALIENTEK_Apollo_STM32F767/IAR/hello_world/ALIENTEK_Aploo_STM32F767.ewp
index e472463a..de868a86 100644
--- a/board/ALIENTEK_Apollo_STM32F767/IAR/hello_world/ALIENTEK_Aploo_STM32F767.ewp
+++ b/board/ALIENTEK_Apollo_STM32F767/IAR/hello_world/ALIENTEK_Aploo_STM32F767.ewp
@@ -1169,6 +1169,9 @@
$PROJ_DIR$\..\..\..\..\arch\arm\arm-v7m\common\tos_cpu.c
+
+ $PROJ_DIR$\..\..\..\..\arch\arm\arm-v7m\common\tos_fault.c
+
kernel
diff --git a/board/ALIENTEK_Apollo_STM32F767/TOS-CONFIG/tos_config.h b/board/ALIENTEK_Apollo_STM32F767/TOS-CONFIG/tos_config.h
index d2abb9dd..23081687 100644
--- a/board/ALIENTEK_Apollo_STM32F767/TOS-CONFIG/tos_config.h
+++ b/board/ALIENTEK_Apollo_STM32F767/TOS-CONFIG/tos_config.h
@@ -37,5 +37,7 @@
#define TOS_CFG_TIMER_AS_PROC 1u
+#define TOS_CFG_FAULT_BACKTRACE_EN 1u
+
#endif
diff --git a/board/NUCLEO_STM32L073RZ/BSP/Src/stm32l0xx_it.c b/board/NUCLEO_STM32L073RZ/BSP/Src/stm32l0xx_it.c
index 90b89401..0f6084c9 100644
--- a/board/NUCLEO_STM32L073RZ/BSP/Src/stm32l0xx_it.c
+++ b/board/NUCLEO_STM32L073RZ/BSP/Src/stm32l0xx_it.c
@@ -82,7 +82,7 @@ void NMI_Handler(void)
/**
* @brief This function handles Hard fault interrupt.
*/
-void HardFault_Handler(void)
+void HardFault_Handlerx(void)
{
/* USER CODE BEGIN HardFault_IRQn 0 */
diff --git a/board/NUCLEO_STM32L073RZ/IAR/hello_world/TencentOS_tiny.ewp b/board/NUCLEO_STM32L073RZ/IAR/hello_world/TencentOS_tiny.ewp
index b77c05a0..c580d4f5 100644
--- a/board/NUCLEO_STM32L073RZ/IAR/hello_world/TencentOS_tiny.ewp
+++ b/board/NUCLEO_STM32L073RZ/IAR/hello_world/TencentOS_tiny.ewp
@@ -66,7 +66,7 @@
ADefines
-
+ STM32L073xx
AList
@@ -611,7 +623,16 @@
AUserIncludes
-
+ $PROJ_DIR$\..\..\TOS_CONFIG
+ $PROJ_DIR$\..\..\BSP\Inc
+ $PROJ_DIR$\..\..\..\..\arch\arm\arm-v7m\common\include
+ $PROJ_DIR$\..\..\..\..\arch\arm\arm-v7m\cortex-m0+\iccarm
+ $PROJ_DIR$\..\..\..\..\kernel\core\include
+ $PROJ_DIR$\..\..\..\..\osal\cmsis_os
+ $PROJ_DIR$\..\..\..\..\platform\vendor_bsp\st\CMSIS\Device\ST\STM32L0xx\Include
+ $PROJ_DIR$\..\..\TOS_CONFIG
+ $PROJ_DIR$\..\..\..\..\platform\vendor_bsp\st\STM32L0xx_HAL_Driver\Inc
+ $PROJ_DIR$\..\..\..\..\platform\vendor_bsp\st\CMSIS\Core\Include
AExtraOptionsCheckV2
@@ -683,7 +704,7 @@
ILINK
0
- 21
+ 22
1
1
@@ -764,7 +785,7 @@
IlinkIcfFile
- lnk0t.icf
+ $TOOLKIT_DIR$\config\linker\ST\stm32l073xZ.icf
IlinkIcfFileSlave
@@ -824,7 +845,7 @@
IlinkProgramEntryLabel
-
+ __iar_program_start
DoFill
@@ -997,7 +1018,11 @@
IlinkTrustzoneImportLibraryOut
- ###Unitialized###
+ TencentOS_tiny_import_lib.o
+
+
+ OILinkExtraOption
+ 1
@@ -1141,6 +1166,9 @@
$PROJ_DIR$\..\..\..\..\arch\arm\arm-v7m\common\tos_cpu.c
+
+ $PROJ_DIR$\..\..\..\..\arch\arm\arm-v7m\common\tos_fault.c
+
tos/cmsis-os
diff --git a/board/NUCLEO_STM32L073RZ/IAR/hello_world/TencentOS_tiny.ewt b/board/NUCLEO_STM32L073RZ/IAR/hello_world/TencentOS_tiny.ewt
index 9ec5a978..a3e79bde 100644
--- a/board/NUCLEO_STM32L073RZ/IAR/hello_world/TencentOS_tiny.ewt
+++ b/board/NUCLEO_STM32L073RZ/IAR/hello_world/TencentOS_tiny.ewt
@@ -1298,6 +1298,9 @@
$PROJ_DIR$\..\..\..\..\arch\arm\arm-v7m\common\tos_cpu.c
+
+ $PROJ_DIR$\..\..\..\..\arch\arm\arm-v7m\common\tos_fault.c
+
tos/cmsis-os
diff --git a/board/NUCLEO_STM32L073RZ/TOS_CONFIG/tos_config.h b/board/NUCLEO_STM32L073RZ/TOS_CONFIG/tos_config.h
index 1e4ec2a2..ce475fc4 100644
--- a/board/NUCLEO_STM32L073RZ/TOS_CONFIG/tos_config.h
+++ b/board/NUCLEO_STM32L073RZ/TOS_CONFIG/tos_config.h
@@ -33,5 +33,7 @@
#define TOS_CFG_TIMER_AS_PROC 1u
+#define TOS_CFG_FAULT_BACKTRACE_EN 1u // 配置TencentOS tiny是否开启异常栈回溯功能
+
#endif