/* * check_fun.c * * Created on: Nov 8, 2025 * Author: cc */ #include "includes.h" /******************************************************************************* * Function Name : Log_CheckSum * Description : 和校验取反,数据内容从SRAM中读取 *******************************************************************************/ __attribute__((section(".non_0_wait"))) uint8_t Log_CheckSum(uint32_t addr,uint8_t len) { uint8_t data_sum = 0; for(uint8_t i = 0;i>= 1 ; if( xdabit ) xda ^= xdapoly ; } } aStr[alen] = (uint8_t)(xda & 0xFF) ; aStr[alen+1] = (uint8_t)(xda>>8) ; } /******************************************************************************* * Function Name : NetCRC16_2 * Description : CRC校验 - 读取SRAM中数据 * Input : aStr : 需要校验的数组首地址 len : 数据的长度 -- Flash中的数据校验一般是512Byte * Return : 数据的校验值 *******************************************************************************/ __attribute__((section(".non_0_wait"))) uint16_t NetCRC16_2(uint8_t *aStr ,uint16_t len) { uint16_t xda , xdapoly ; uint16_t i,j, xdabit ; xda = 0xFFFF ; xdapoly = 0xA001 ; // (X**16 + X**15 + X**2 + 1) for(i=0;i>= 1 ; if( xdabit ) xda ^= xdapoly ; } } return xda; } /******************************************************************************* * Function Name : NetCRC16_Data * Description : CRC校验 - CRC在检验数据中 * Input : aStr : 需要校验的数组首地址 len : 数据的长度 -- Flash中的数据校验一般是512Byte crc_id :CRC在数组中的下标位置,低地址在前 * Return : 数据的校验值 *******************************************************************************/ __attribute__((section(".non_0_wait"))) uint16_t NetCRC16_Data(uint8_t *aStr ,uint16_t len,uint16_t crc_id) { uint16_t xda , xdapoly ; uint16_t i,j, xdabit ; xda = 0xFFFF ; xdapoly = 0xA001 ; // (X**16 + X**15 + X**2 + 1) for(i=0;i>= 1 ; if( xdabit ) xda ^= xdapoly ; } } return xda; } /******************************************************************************* * Function Name : DoubleData_CheckSum * Description : 两个数组和校验取反 * Data1 数据包1 * Data1Len 数据包1的长度 * Data2 数据包2 * Data2Len 数据包2的长度 *******************************************************************************/ __attribute__((section(".non_0_wait"))) uint8_t DoubleData_CheckSum(uint8_t *Data1, uint16_t Data1Len, uint8_t *Data2, uint16_t Data2Len) { uint8_t data_sum = 0; uint16_t i; for(i = 0; i < Data1Len;i++) { data_sum += Data1[i]; } for(i = 0; i < Data2Len; i++) { data_sum += Data2[i]; } return ~data_sum; } /******************************************************************************* * Function Name : SOR_CRC * Description : 和校验 *******************************************************************************/ __attribute__((section(".non_0_wait"))) uint8_t SOR_CRC(uint8_t *Data, uint8_t DataLen) { uint8_t i; uint8_t sor_data = 0; for(i = 0; i < DataLen; i++)//i可能为0 ,也可以是1 { sor_data = sor_data+Data[i]; } return sor_data; } /******************************************************************************* * Function Name : DevAction_Data_Check * Description : 设备动作链表数据校验 *******************************************************************************/ __attribute__((section(".non_0_wait"))) uint8_t DeAction_Data_Check(uint32_t sram_addr) { uint16_t data_len = SRAM_Read_Word(sram_addr + sizeof(Dev_Action_Core) + sizeof(Dev_Action_Input) + sizeof(Dev_Action_Cond) + sizeof(Dev_Action_State) + 1); uint8_t data_sum = 0; uint8_t check_temp_buff[SRAM_DevAction_List_Size] = {0}; if(data_len > SRAM_DevAction_List_Size) { Dbg_Println(DBG_BIT_LOGIC_STATUS_bit,"当前动作数据校验错误1,当前地址:%08X 存储的长度,%04X",sram_addr, data_len); return 1; } memset(check_temp_buff,0,SRAM_DevAction_List_Size); SRAM_DMA_Read_Buff(check_temp_buff,data_len,sram_addr); for(uint16_t i = 0;i SRAM_DevAction_List_Size) { Dbg_Println(DBG_BIT_LOGIC_STATUS_bit,"当前动作数据校验错误2,当前地址:%08X 存储的长度,%04X",addr, len); return 1; } memset(check_temp_buff,0,SRAM_DevAction_List_Size); SRAM_DMA_Read_Buff(check_temp_buff,len,addr); for(uint16_t i = 0;i