aboutsummaryrefslogtreecommitdiff
path: root/inc/os/system_trace/trace_hardfault.h
diff options
context:
space:
mode:
Diffstat (limited to 'inc/os/system_trace/trace_hardfault.h')
-rw-r--r--inc/os/system_trace/trace_hardfault.h123
1 files changed, 123 insertions, 0 deletions
diff --git a/inc/os/system_trace/trace_hardfault.h b/inc/os/system_trace/trace_hardfault.h
new file mode 100644
index 0000000..94c9931
--- /dev/null
+++ b/inc/os/system_trace/trace_hardfault.h
@@ -0,0 +1,123 @@
+/****************************************************************************************************//**
+ * @file trace_hardfault.h
+ *
+ * @brief
+ *
+ * @version v0.1
+ * @date 2018-11-05
+ *
+ * @note
+ ****************************************************************************************************/
+
+#ifndef TRACE_HARDFAULT_H
+#define TRACE_HARDFAULT_H
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#include <stdint.h>
+#include <stdbool.h>
+#include "trace_common.h"
+#include "trace_port_config.h"
+
+typedef struct
+{
+ uint32_t stacked_r0;
+ uint32_t stacked_r1;
+ uint32_t stacked_r2;
+ uint32_t stacked_r3;
+ uint32_t stacked_r4;
+ uint32_t stacked_r5;
+ uint32_t stacked_r6;
+ uint32_t stacked_r7;
+ uint32_t stacked_r8;
+ uint32_t stacked_r9;
+ uint32_t stacked_r10;
+ uint32_t stacked_r11;
+ uint32_t stacked_r12;
+ uint32_t stacked_lr;
+ uint32_t stacked_pc;
+ uint32_t stacked_psr;
+ uint32_t old_sp;
+ uint32_t msp;
+ uint32_t cfsr;
+ uint32_t bus_fault_address;
+ uint32_t memmanage_fault_address;
+
+ uint32_t PRIMASK;
+ uint32_t BASEPRI;
+ uint32_t EXC_RETURN;
+
+ uint32_t HFSR;
+ uint32_t DFSR;
+ uint32_t AFSR;
+} T_HARDFAULT_RECORD;
+
+/******** magic pattern for hardfault record ********/
+#define HARDFAULT_PATTERN_BEG (0xbeefface)
+#define HARDFAULT_PATTERN_END (0xbabeface)
+#define HARDFAULT_PATTERN_MID (0xdcabface)
+
+extern bool patch_hardfault_save_to_flash_init(void);
+
+/************Dump info: *********
+*********Part0: beg pattern*******************
+4: PATTERN_BEG
+*********Part1: hardfault register record****
+sizeof(*record): hardfault reg info
+4: PATTERN_MID
+*********Part2: Current task stack****
+1024: current task stack
+4: PATTERN_MID
+16: bottom of current task stack
+4: PATTERN_MID
+*********Part3: specific task stack****
+task stack size0: task stack0
+4: PATTERN_MID
+16: bottom of task stack0
+4: PATTERN_MID
+task stack size1: task stack1
+4: PATTERN_MID
+16: bottom of task stack1
+4: PATTERN_MID
+.......
+task stack size n: task stack n
+4: PATTERN_MID
+16: bottom of task stack n
+4: PATTERN_MID
+**********Part4: end pattern*******************
+4: PATTERN_END
+*********************************/
+
+/**
+ * extern void *app_task_handle;
+ * TCB_t *pxTimerTCB =(TCB_t *)xTimerTaskHandle;
+ * TCB_t *pxLowerTCB =(TCB_t *)low_task_handle;
+ * TCB_t *pxUpperTCB =(TCB_t *)upperstack_handle;
+ * TCB_t *pxAppTCB =(TCB_t *)app_task_handle;
+*/
+/**
+ * @brief Initializes trace_hardfault save to flash including critical task stack
+ * @param dump_task_stack_num: number of task
+ * @return if it is successfully initialized , return true
+
+ * For example
+ hardfault_save_to_flash_init(2, &low_task_handle, 1024, &app_task_handle, 1024);
+ @param 2: dump two task stack
+ @param low_task_handle: lowstack task handler value
+ @param 1024: dump task stack size
+ @param app_task_handle: upperstack task handler value
+ @param 1024: dump task stack size
+ @note if need dump app task, must call this api after app task created!!!
+ Upperstack handler address is different when used different upperstack img!
+ */
+void hardfault_save_to_flash_init(uint32_t dump_task_stack_num, ...);
+
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
+