2 releases (1 stable)
1.0.0 | May 13, 2021 |
---|---|
0.1.0 | Aug 9, 2020 |
#2035 in Embedded development
2,158 downloads per month
Used in 3 crates
(via smbus-pec)
18KB
144 lines
Rust Portable CRC Calculation Macros
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
- Apache License, Version 2.0 (LICENSE-APACHE or http://www.apache.org/licenses/LICENSE-2.0)
- MIT license (LICENSE-MIT or http://opensource.org/licenses/MIT)
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.