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

no-std embedded-crc-macros

Macros implementing portable CRC calculation algorithms for use in no_std

2 releases (1 stable)

1.0.0 May 13, 2021
0.1.0 Aug 9, 2020

#1986 in Embedded development

Download history 566/week @ 2024-06-05 1836/week @ 2024-06-12 678/week @ 2024-06-19 852/week @ 2024-06-26 2023/week @ 2024-07-03 1782/week @ 2024-07-10 961/week @ 2024-07-17 680/week @ 2024-07-24 1413/week @ 2024-07-31 1093/week @ 2024-08-07 828/week @ 2024-08-14 644/week @ 2024-08-21 550/week @ 2024-08-28 963/week @ 2024-09-04 848/week @ 2024-09-11 734/week @ 2024-09-18

3,163 downloads per month
Used in 3 crates (via smbus-pec)

MIT/Apache

18KB
144 lines

Rust Portable CRC Calculation Macros

crates.io Docs Build Status Coverage Status

This crate provides macros that define portable CRC-8 algorithm implementations with the parameters directly provided at compile time and without any dependencies. Intended for use in no_std.

How this crate compares to others

There is a number of crates implementing CRC algorithms but their intention is to be configurable, generic, use acceleration via SIMD instructions, etc.

This crate provides macros that define portable and non-configurable CRC-8 algorithm implementations with the parameters provided at compile time (optionally using a pre-calculated lookup table) and without any dependencies.

This should allow the compiler to make good optimizations and allows for use of the algorithm in any target architecture with minimal code bloat.

Furthermore, this crate provides macros to generate the lookup tables on build time.

This makes this crate specially well suited for use in no_std environments.

Usage

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
}

Support

For questions, issues, feature requests, other changes, or just feedback, please file an issue in the github project.

License

Licensed under either of

at your option.

Contributing

Unless you explicitly state otherwise, any contribution intentionally submitted for inclusion in the work by you, as defined in the Apache-2.0 license, shall be dual licensed as above, without any additional terms or conditions.

No runtime deps