diff options
author | reparo_liu <reparo_liu@realsil.com.cn> | 2023-05-18 11:23:40 +0800 |
---|---|---|
committer | reparo_liu <reparo_liu@realsil.com.cn> | 2023-05-19 09:18:25 +0800 |
commit | 64889cda2e397915ee6c3800d4acafb1c34e2ef3 (patch) | |
tree | f9d61cfc074d3297dff0d97ff1443617bc330bd2 /inc/os/system_trace/trace_hardfault.h | |
parent | 151cf392d25c5de46a4cdaaa78dfc46448a1f8c3 (diff) | |
download | realtek-master.tar.gz |
upload project and readme file
BYPASS_INCLUSIVE_LANGUAGE_REASON=false positive
bug:
Change-Id: Ibc24ce136cb2c838214643d90017530996589b37
test: manual
Diffstat (limited to 'inc/os/system_trace/trace_hardfault.h')
-rw-r--r-- | inc/os/system_trace/trace_hardfault.h | 123 |
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 + |