/** ########################################################################## ** Filename : ** Project : ** Module : ** Processor : ** Version : ** Compiler : ** Date/Time : ** Abstract : ** Contents : ** Note : ** ** (c) Copyright dmdz Co.,Ltd ** -------------------------------------------------------------------------- ** R E V I S I O N H I S T O R Y ** -------------------------------------------------------------------------- ** Date Ver Author Description ** -20230602- --V1.0-- --mingyea--- --修改-- ** #########################################################################*/ /*--------------------------------------------------------------------------- - I N C L U D E F I L E S ----------------------------------------------------------------------------*/ #include "stack_check.h" #include "common_memory.h" //#include "rcm_check.h" /*--------------------------------------------------------------------------- - D E F I N E S / M A C R O S ----------------------------------------------------------------------------*/ /*--------------------------------------------------------------------------- - T Y P E D E F I N I T I O N S ----------------------------------------------------------------------------*/ typedef struct { u8 time_count; #ifdef STACK_CHECK_DEBUG_EN u8 test[3]; #endif }stack_check_s; /*--------------------------------------------------------------------------- - S T A T I C V A R I A B L E S ----------------------------------------------------------------------------*/ MEMORY_MAP_RAM_FLAG_NOINIT stack_check_s g_stack_check ={0u}; /*--------------------------------------------------------------------------- * G L O B A L V A R I A B L E S ----------------------------------------------------------------------------*/ /*--------------------------------------------------------------------------- - C O N S T A N T S ----------------------------------------------------------------------------*/ volatile u8 g_stack_check_addr[RAM_STACK_CHECK_MAX_LEN] __attribute__((section(".STACK_CHECK_ADDR"))) = { RAM_STACK_CHECK_VALUE_BUF0, RAM_STACK_CHECK_VALUE_BUF1, RAM_STACK_CHECK_VALUE_BUF2, RAM_STACK_CHECK_VALUE_BUF3, RAM_STACK_CHECK_VALUE_BUF0, RAM_STACK_CHECK_VALUE_BUF1, RAM_STACK_CHECK_VALUE_BUF2, RAM_STACK_CHECK_VALUE_BUF3, RAM_STACK_CHECK_VALUE_BUF0, RAM_STACK_CHECK_VALUE_BUF1, RAM_STACK_CHECK_VALUE_BUF2, RAM_STACK_CHECK_VALUE_BUF3, RAM_STACK_CHECK_VALUE_BUF0, RAM_STACK_CHECK_VALUE_BUF1, RAM_STACK_CHECK_VALUE_BUF2, RAM_STACK_CHECK_VALUE_BUF3, }; /*--------------------------------------------------------------------------- - F U N C T I O N P R O T O T Y P E ----------------------------------------------------------------------------*/ /*--------------------------------------------------------------------------- |Prototype : |Called by : |Preconditions : |Input parameters : |Output parameters : |Return value : |Description : ----------------------------------------------------------------------------*/ MEMORY_MAP_ROM_FOR_ASIL void stack_check_init(void) { #if 0 u8 i; for(i=0;i=STACK_CHECK_TASK_TIME) { g_stack_check.time_count=0u; if( (g_stack_check_addr[0] == RAM_STACK_CHECK_VALUE_BUF0) && (g_stack_check_addr[1] == RAM_STACK_CHECK_VALUE_BUF1) && (g_stack_check_addr[2] == RAM_STACK_CHECK_VALUE_BUF2) && (g_stack_check_addr[3] == RAM_STACK_CHECK_VALUE_BUF3) && (g_stack_check_addr[4] == RAM_STACK_CHECK_VALUE_BUF0) && (g_stack_check_addr[5] == RAM_STACK_CHECK_VALUE_BUF1) && (g_stack_check_addr[6] == RAM_STACK_CHECK_VALUE_BUF2) && (g_stack_check_addr[7] == RAM_STACK_CHECK_VALUE_BUF3) && (g_stack_check_addr[8] == RAM_STACK_CHECK_VALUE_BUF0) && (g_stack_check_addr[9] == RAM_STACK_CHECK_VALUE_BUF1) && (g_stack_check_addr[10] == RAM_STACK_CHECK_VALUE_BUF2) && (g_stack_check_addr[11] == RAM_STACK_CHECK_VALUE_BUF3) && (g_stack_check_addr[12] == RAM_STACK_CHECK_VALUE_BUF0) && (g_stack_check_addr[13] == RAM_STACK_CHECK_VALUE_BUF1) && (g_stack_check_addr[14] == RAM_STACK_CHECK_VALUE_BUF2) && (g_stack_check_addr[15] == RAM_STACK_CHECK_VALUE_BUF3) ) { #ifdef STACK_CHECK_DEBUG_EN g_stack_check.test[0]++; #endif } else { //执行复位 #ifdef STACK_CHECK_DEBUG_EN g_stack_check.test[1]++; #endif //rcm_check_set_reset_flag(RCM_LOGIC_FLAG_STACK_CHECK); SystemSoftwareReset(); } } #endif } /*--------------------------------------------------------------------------- |Prototype : |Called by : |Preconditions : |Input parameters : |Output parameters : |Return value : |Description : ----------------------------------------------------------------------------*/ MEMORY_MAP_ROM_FOR_ASIL u8 stack_check_get_test_value(u8 id) { u8 l_temp; if(id < 3u) { #ifdef STACK_CHECK_DEBUG_EN l_temp = g_stack_check.test[id]; #else l_temp = 0; #endif } else { l_temp = 0; } return l_temp; }