Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/ClusterM/flipperzero-firmware.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAlbert Kharisov <albkharisov@gmail.com>2021-12-31 20:32:49 +0300
committerGitHub <noreply@github.com>2021-12-31 20:32:49 +0300
commit5b1f50e63a1b112a64525fbc591355ee377eb0dc (patch)
tree8b154e4b00425ea5a66e3c7e3633754bf5e5f232 /firmware
parent475fa91ba66457f59263fbd56d589a9920b876d4 (diff)
Much better crash handling. So wow.
* Furi, FuriHal, Desktop: much better crash handling. So wow. * FuriHal: add missing include in FreeRTOSConfig.h Co-authored-by: Aleksandr Kutuzov <alleteam@gmail.com>
Diffstat (limited to 'firmware')
-rw-r--r--firmware/targets/f6/Inc/FreeRTOSConfig.h3
-rw-r--r--firmware/targets/f6/Src/main.c3
-rw-r--r--firmware/targets/f6/furi-hal/furi-hal-interrupt.c14
-rw-r--r--firmware/targets/f6/furi-hal/furi-hal-os.c3
-rw-r--r--firmware/targets/f6/furi-hal/furi-hal-rtc.c8
-rw-r--r--firmware/targets/f7/Inc/FreeRTOSConfig.h3
-rw-r--r--firmware/targets/f7/Src/main.c3
-rw-r--r--firmware/targets/f7/furi-hal/furi-hal-interrupt.c14
-rw-r--r--firmware/targets/f7/furi-hal/furi-hal-os.c3
-rw-r--r--firmware/targets/f7/furi-hal/furi-hal-rtc.c8
-rw-r--r--firmware/targets/furi-hal-include/furi-hal-rtc.h5
11 files changed, 37 insertions, 30 deletions
diff --git a/firmware/targets/f6/Inc/FreeRTOSConfig.h b/firmware/targets/f6/Inc/FreeRTOSConfig.h
index 4a031f70..6235a2d4 100644
--- a/firmware/targets/f6/Inc/FreeRTOSConfig.h
+++ b/firmware/targets/f6/Inc/FreeRTOSConfig.h
@@ -119,7 +119,8 @@ See http://www.FreeRTOS.org/RTOS-Cortex-M3-M4.html. */
/* Normal assert() semantics without relying on the provision of an assert.h
header file. */
-#define configASSERT( x ) if ((x) == 0) { taskDISABLE_INTERRUPTS(); asm("bkpt 1"); for( ;; ); }
+#include <furi/check.h>
+#define configASSERT( x ) if ((x) == 0) { furi_crash("FreeRTOS Assert"); }
/* Definitions that map the FreeRTOS port interrupt handlers to their CMSIS
standard names. */
diff --git a/firmware/targets/f6/Src/main.c b/firmware/targets/f6/Src/main.c
index a546086f..44c5013e 100644
--- a/firmware/targets/f6/Src/main.c
+++ b/firmware/targets/f6/Src/main.c
@@ -30,8 +30,7 @@ int main(void) {
}
void Error_Handler(void) {
- asm("bkpt 1");
- while(1) {}
+ furi_crash("ErrorHandler");
}
#ifdef USE_FULL_ASSERT
diff --git a/firmware/targets/f6/furi-hal/furi-hal-interrupt.c b/firmware/targets/f6/furi-hal/furi-hal-interrupt.c
index 4ff2bc7b..8e24c488 100644
--- a/firmware/targets/f6/furi-hal/furi-hal-interrupt.c
+++ b/firmware/targets/f6/furi-hal/furi-hal-interrupt.c
@@ -182,25 +182,19 @@ void NMI_Handler(void) {
}
void HardFault_Handler(void) {
- if ((*(volatile uint32_t *)CoreDebug_BASE) & (1 << 0)) {
- __asm("bkpt 1");
- }
- while (1) {}
+ furi_crash("HardFault");
}
void MemManage_Handler(void) {
- __asm("bkpt 1");
- while (1) {}
+ furi_crash("MemManage");
}
void BusFault_Handler(void) {
- __asm("bkpt 1");
- while (1) {}
+ furi_crash("BusFault");
}
void UsageFault_Handler(void) {
- __asm("bkpt 1");
- while (1) {}
+ furi_crash("UsageFault");
}
void DebugMon_Handler(void) {
diff --git a/firmware/targets/f6/furi-hal/furi-hal-os.c b/firmware/targets/f6/furi-hal/furi-hal-os.c
index cd182136..f166c5ec 100644
--- a/firmware/targets/f6/furi-hal/furi-hal-os.c
+++ b/firmware/targets/f6/furi-hal/furi-hal-os.c
@@ -140,6 +140,5 @@ void vPortSuppressTicksAndSleep(TickType_t expected_idle_ticks) {
}
void vApplicationStackOverflowHook(TaskHandle_t xTask, char * pcTaskName) {
- asm("bkpt 1");
- while(1) {};
+ furi_crash("StackOverflow");
}
diff --git a/firmware/targets/f6/furi-hal/furi-hal-rtc.c b/firmware/targets/f6/furi-hal/furi-hal-rtc.c
index 45498077..a13913a1 100644
--- a/firmware/targets/f6/furi-hal/furi-hal-rtc.c
+++ b/firmware/targets/f6/furi-hal/furi-hal-rtc.c
@@ -153,3 +153,11 @@ bool furi_hal_rtc_validate_datetime(FuriHalRtcDateTime* datetime) {
return !invalid;
}
+
+void furi_hal_rtc_set_fault_data(uint32_t value) {
+ furi_hal_rtc_set_register(FuriHalRtcRegisterFaultData, value);
+}
+
+uint32_t furi_hal_rtc_get_fault_data() {
+ return furi_hal_rtc_get_register(FuriHalRtcRegisterFaultData);
+}
diff --git a/firmware/targets/f7/Inc/FreeRTOSConfig.h b/firmware/targets/f7/Inc/FreeRTOSConfig.h
index 4a031f70..6235a2d4 100644
--- a/firmware/targets/f7/Inc/FreeRTOSConfig.h
+++ b/firmware/targets/f7/Inc/FreeRTOSConfig.h
@@ -119,7 +119,8 @@ See http://www.FreeRTOS.org/RTOS-Cortex-M3-M4.html. */
/* Normal assert() semantics without relying on the provision of an assert.h
header file. */
-#define configASSERT( x ) if ((x) == 0) { taskDISABLE_INTERRUPTS(); asm("bkpt 1"); for( ;; ); }
+#include <furi/check.h>
+#define configASSERT( x ) if ((x) == 0) { furi_crash("FreeRTOS Assert"); }
/* Definitions that map the FreeRTOS port interrupt handlers to their CMSIS
standard names. */
diff --git a/firmware/targets/f7/Src/main.c b/firmware/targets/f7/Src/main.c
index a546086f..44c5013e 100644
--- a/firmware/targets/f7/Src/main.c
+++ b/firmware/targets/f7/Src/main.c
@@ -30,8 +30,7 @@ int main(void) {
}
void Error_Handler(void) {
- asm("bkpt 1");
- while(1) {}
+ furi_crash("ErrorHandler");
}
#ifdef USE_FULL_ASSERT
diff --git a/firmware/targets/f7/furi-hal/furi-hal-interrupt.c b/firmware/targets/f7/furi-hal/furi-hal-interrupt.c
index 4ff2bc7b..8e24c488 100644
--- a/firmware/targets/f7/furi-hal/furi-hal-interrupt.c
+++ b/firmware/targets/f7/furi-hal/furi-hal-interrupt.c
@@ -182,25 +182,19 @@ void NMI_Handler(void) {
}
void HardFault_Handler(void) {
- if ((*(volatile uint32_t *)CoreDebug_BASE) & (1 << 0)) {
- __asm("bkpt 1");
- }
- while (1) {}
+ furi_crash("HardFault");
}
void MemManage_Handler(void) {
- __asm("bkpt 1");
- while (1) {}
+ furi_crash("MemManage");
}
void BusFault_Handler(void) {
- __asm("bkpt 1");
- while (1) {}
+ furi_crash("BusFault");
}
void UsageFault_Handler(void) {
- __asm("bkpt 1");
- while (1) {}
+ furi_crash("UsageFault");
}
void DebugMon_Handler(void) {
diff --git a/firmware/targets/f7/furi-hal/furi-hal-os.c b/firmware/targets/f7/furi-hal/furi-hal-os.c
index cd182136..f166c5ec 100644
--- a/firmware/targets/f7/furi-hal/furi-hal-os.c
+++ b/firmware/targets/f7/furi-hal/furi-hal-os.c
@@ -140,6 +140,5 @@ void vPortSuppressTicksAndSleep(TickType_t expected_idle_ticks) {
}
void vApplicationStackOverflowHook(TaskHandle_t xTask, char * pcTaskName) {
- asm("bkpt 1");
- while(1) {};
+ furi_crash("StackOverflow");
}
diff --git a/firmware/targets/f7/furi-hal/furi-hal-rtc.c b/firmware/targets/f7/furi-hal/furi-hal-rtc.c
index 45498077..a13913a1 100644
--- a/firmware/targets/f7/furi-hal/furi-hal-rtc.c
+++ b/firmware/targets/f7/furi-hal/furi-hal-rtc.c
@@ -153,3 +153,11 @@ bool furi_hal_rtc_validate_datetime(FuriHalRtcDateTime* datetime) {
return !invalid;
}
+
+void furi_hal_rtc_set_fault_data(uint32_t value) {
+ furi_hal_rtc_set_register(FuriHalRtcRegisterFaultData, value);
+}
+
+uint32_t furi_hal_rtc_get_fault_data() {
+ return furi_hal_rtc_get_register(FuriHalRtcRegisterFaultData);
+}
diff --git a/firmware/targets/furi-hal-include/furi-hal-rtc.h b/firmware/targets/furi-hal-include/furi-hal-rtc.h
index 36bf218c..3a00b0da 100644
--- a/firmware/targets/furi-hal-include/furi-hal-rtc.h
+++ b/firmware/targets/furi-hal-include/furi-hal-rtc.h
@@ -37,6 +37,7 @@ typedef enum {
FuriHalRtcRegisterSystem,
FuriHalRtcRegisterSystemVersion,
FuriHalRtcRegisterLfsFingerprint,
+ FuriHalRtcRegisterFaultData,
} FuriHalRtcRegister;
/** Initialize RTC subsystem */
@@ -62,6 +63,10 @@ void furi_hal_rtc_get_datetime(FuriHalRtcDateTime* datetime);
bool furi_hal_rtc_validate_datetime(FuriHalRtcDateTime* datetime);
+void furi_hal_rtc_set_fault_data(uint32_t value);
+
+uint32_t furi_hal_rtc_get_fault_data();
+
#ifdef __cplusplus
}
#endif