Realtek/inc/os/system_trace/trace_hardfault.h
2025-11-25 10:21:47 +08:00

124 lines
3.4 KiB
C

/****************************************************************************************************//**
* @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