Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- const int dataSize = 8; // Dimensione dell'array di dati
- // Funzione per calcolare il parity bit (parità pari o dispari)
- uint8_t calculateParityBit(const uint8_t *data, size_t length, bool evenParity) {
- uint8_t count = 0;
- for (size_t i = 0; i < length; i++) {
- count += __builtin_popcount(data[i]); // Conta i bit impostati in ogni byte
- }
- if (evenParity) {
- return (count % 2 == 0) ? 0 : 1; // Parità pari
- } else {
- return (count % 2 == 0) ? 1 : 0; // Parità dispari
- }
- }
- // Funzione per verificare il parity bit
- bool verifyParityBit(const uint8_t *data, size_t length, uint8_t receivedParity, bool evenParity) {
- uint8_t calculatedParity = calculateParityBit(data, length, evenParity);
- return calculatedParity == receivedParity;
- }
- void setup() {
- Serial.begin(9600);
- // Esempio di dati
- uint8_t data[dataSize] = {0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08};
- // Calcola il parity bit con parità pari
- bool evenParity = true; // Parità pari
- uint8_t parityBit = calculateParityBit(data, dataSize, evenParity);
- Serial.print("Parity bit calcolato (even parity): ");
- Serial.println(parityBit);
- // Verifica il parity bit
- bool isValid = verifyParityBit(data, dataSize, parityBit, evenParity);
- if (isValid) {
- Serial.println("Il parity bit è valido.");
- } else {
- Serial.println("Il parity bit è invalido.");
- }
- // Simula un errore nei dati
- data[3] ^= 0x01; // Modifica un bit nel quarto elemento
- // Verifica nuovamente il parity bit
- isValid = verifyParityBit(data, dataSize, parityBit, evenParity);
- if (isValid) {
- Serial.println("Il parity bit è valido (dopo la modifica).");
- } else {
- Serial.println("Il parity bit è invalido (dopo la modifica).");
- }
- }
- void loop() {
- // Ciclo vuoto
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement