check.c 830 B

123456789101112131415161718192021222324252627282930313233343536
  1. #include "check.h"
  2. #include "furi-hal-task.h"
  3. #include <furi-hal-console.h>
  4. #include <stdio.h>
  5. void __furi_abort(void);
  6. void __furi_print_name(void) {
  7. furi_hal_console_puts("\r\n\033[0;31m[E]");
  8. if(task_is_isr_context()) {
  9. furi_hal_console_puts("[ISR] ");
  10. } else {
  11. const char* name = osThreadGetName(osThreadGetId());
  12. if(name == NULL) {
  13. furi_hal_console_puts("[main] ");
  14. } else {
  15. furi_hal_console_puts("[");
  16. furi_hal_console_puts(name);
  17. furi_hal_console_puts("] ");
  18. }
  19. }
  20. furi_hal_console_puts("\033[0m");
  21. }
  22. void __furi_check(void) {
  23. __furi_print_name();
  24. furi_hal_console_puts("assertion failed\r\n");
  25. __furi_abort();
  26. }
  27. void __furi_abort(void) {
  28. __disable_irq();
  29. asm("bkpt 1");
  30. while(1) {
  31. }
  32. }