#crc #algorithm #checksum #macro #lookup-tables #compile-time

no-std embedded-crc-macros

为no_std环境实现可移植的CRC计算算法的宏

2个版本 (1个稳定版)

1.0.0 2021年5月13日
0.1.0 2020年8月9日

#18#crc

Download history 910/week @ 2024-03-14 1534/week @ 2024-03-21 2321/week @ 2024-03-28 1919/week @ 2024-04-04 1321/week @ 2024-04-11 726/week @ 2024-04-18 676/week @ 2024-04-25 1030/week @ 2024-05-02 635/week @ 2024-05-09 1139/week @ 2024-05-16 729/week @ 2024-05-23 594/week @ 2024-05-30 814/week @ 2024-06-06 1624/week @ 2024-06-13 680/week @ 2024-06-20 746/week @ 2024-06-27

3,918 每月下载量
3 个crate中使用(通过 smbus-pec

MIT/Apache

18KB
144 代码行

Rust可移植CRC计算宏

crates.io Docs Build Status Coverage Status

此crate提供定义可移植的CRC-8算法实现的宏,参数在编译时直接提供,无需任何依赖。适用于no_std

与其他crate的比较

存在许多实现CRC算法的crate,但它们的目的是可配置的、通用的、使用SIMD指令进行加速等。

此crate提供定义可移植且不可配置的CRC-8算法实现的宏,参数在编译时提供(可选地使用预计算的查找表)且无需任何依赖。

这应该允许编译器进行良好的优化,并允许在具有最小代码膨胀的任何目标架构中使用该算法。

此外,此crate还提供在构建时生成查找表的宏。

这使得此crate特别适合用于no_std环境。

使用方法

use embedded_crc_macros::crc8;

crc8!(fn pec, 7 /* x^8+x^2+x+1 */, 0, "SMBus Packet Error Code");

const ADDRESS: u8 = 0x5A;
const REGISTER: u8 = 0x06;

fn main() {
    let crc = pec(&[ADDRESS << 1, REGISTER, 0xAB, 0xCD]);
    println!("PEC: {}", crc); // prints 95
}

支持

有关问题、问题、功能请求、其他更改或只是反馈,请在github项目中提交问题。

许可证

许可方式为以下两种之一

由您选择。

贡献

除非您明确表示,否则任何有意提交给作品并包含在您的工作中的贡献(根据Apache-2.0许可证定义),都应按照上述双重许可,无需任何附加条款或条件。

无运行时依赖