独立的 C11 CRC8 MAXIM 与 CRC16 MODBUS 组件。提供一次计算和增量更新,不使用堆、RTOS、core 或其他 X-Gen 组件。当前包版本为 0.1.0,本地试点;未配置远端或公开发布。
| 算法 | 公开 target | 初值 | 反射多项式 | 最终异或 |
|---|---|---|---|---|
| CRC8 MAXIM | xgcrc::crc8 |
0x00 |
0x8c(正常形式 0x31) |
0 |
| CRC16 MODBUS | xgcrc::crc16 |
0xffff |
0xa001(正常形式 0x8005) |
0 |
两个算法独立编译、导出和消费。公开头为 xgen/crc/crc.h,版本头为 xgen/crc/version.h。校验值以整数返回,线上编码的字节顺序由消费者决定。
- 输入只读,不保存指针;调用同步完成,工作量与输入长度成正比。
len == 0时不读取数据,返回原 seed。- 为保持来源行为,
data == NULL时无论长度多少都返回原 seed;一次计算返回相应初值。 - 非空指针必须指向至少
len个可读字节。并发调用没有共享可变状态,但调用者不能同时修改输入范围。 - 不增加运行时算法注册、CRC32 或硬件后端。已有实现来源与授权状态见 PROVENANCE.md。
需要 CMake 3.24 或更新版本、C11 编译器,preset 使用 Ninja。生产构建默认关闭测试,不要求 C++ 编译器或 GoogleTest。
cmake --preset release
cmake --build --preset release
cmake --install out/release --prefix out/install安装消费者:
find_package(xgen_crc 0.1 CONFIG REQUIRED COMPONENTS crc8)
target_link_libraries(my_app PRIVATE xgcrc::crc8)配置消费者时通过 CMAKE_PREFIX_PATH 指向实际安装前缀。请求 crc8 不引入 crc16,请求不可用或未知的必需组件失败。源码消费可以显式 add_subdirectory 后链接相同 target;不要读取另一个仓库的私有目录。
只构建一种算法时使用 XGCRC_BUILD_CRC8 / XGCRC_BUILD_CRC16 开关;至少启用一种。当前完整主机测试集要求同时启用两种。API 的独立前缀替代原 xgc_,不是旧包的二进制兼容包装。
先按 贡献指南 显式准备固定 GoogleTest 包和检查工具,再执行:
cmake --preset host
cmake --build --preset host
python tools/quality.py test --build-dir out/host测试以 C++17 和 GoogleTest 编译,链接真实 C11 生产 target。覆盖 CRC 向量、分段、空输入、任意 seed 与独立参考算法,并检查 C/C++ 头文件、源码消费和安装包消费。测试框架不进入生产导出包。
质量入口、覆盖率、失败验证与版本基线见 贡献指南、规范采用 和 实施记录。GitHub Actions 配置不代表远端已经执行;本地结果与未执行事项分别记录。