Files
Motor_v2/Robot_V2/Algorithm/CRC.h
T

85 lines
1.8 KiB
C++
Raw Normal View History

#ifndef __CRC_H
#define __CRC_H
#include <cstdint>
#ifdef __cplusplus
extern "C" {
#endif
#include "gd32c10x.h"
#ifdef __cplusplus
}
#endif
#ifdef __cplusplus
#include <cstddef>
class CRC_Calculator {
private:
static bool table_initialized;
static uint32_t crc_table[256];
/**
* @brief 初始化CRC表
*/
static void init_crc_table();
/**
* @brief 更新CRC值
* @param crc 当前CRC值
* @param data 要处理的数据
* @return 更新后的CRC值
*/
static uint32_t update_crc(uint32_t crc, uint8_t data);
public:
/**
* @brief 计算单个float值的CRC32
* @param data float值
* @return CRC32校验值
*/
static uint32_t calculate(const float& data);
/**
* @brief 计算float数组的CRC32
* @param data float数组指针
* @param length 数组长度
* @return CRC32校验值
*/
static uint32_t calculate(const float* data, size_t length);
/**
* @brief 验证单个float值的CRC32
* @param data float值
* @param expected_crc 期望的CRC值
* @return true表示校验成功,false表示校验失败
*/
static bool verify(const float& data, uint32_t expected_crc);
/**
* @brief 验证float数组的CRC32
* @param data float数组指针
* @param length 数组长度
* @param expected_crc 期望的CRC值
* @return true表示校验成功,false表示校验失败
*/
static bool verify(const float* data, size_t length, uint32_t expected_crc);
/**
* @brief 获取CRC表初始化状态
* @return true表示已初始化,false表示未初始化
*/
static bool isInitialized();
/**
* @brief 强制重新初始化CRC表
*/
static void reinitialize();
};
#endif // __cplusplus
#endif // __CRC_H