Advertisement
pleasedontcode

Parity Bit

Jan 21st, 2025
109
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Arduino 1.79 KB | Source Code | 0 0
  1. const int dataSize = 8; // Dimensione dell'array di dati
  2.  
  3. // Funzione per calcolare il parity bit (parità pari o dispari)
  4. uint8_t calculateParityBit(const uint8_t *data, size_t length, bool evenParity) {
  5.   uint8_t count = 0;
  6.   for (size_t i = 0; i < length; i++) {
  7.     count += __builtin_popcount(data[i]); // Conta i bit impostati in ogni byte
  8.   }
  9.   if (evenParity) {
  10.     return (count % 2 == 0) ? 0 : 1; // Parità pari
  11.   } else {
  12.     return (count % 2 == 0) ? 1 : 0; // Parità dispari
  13.   }
  14. }
  15.  
  16. // Funzione per verificare il parity bit
  17. bool verifyParityBit(const uint8_t *data, size_t length, uint8_t receivedParity, bool evenParity) {
  18.   uint8_t calculatedParity = calculateParityBit(data, length, evenParity);
  19.   return calculatedParity == receivedParity;
  20. }
  21.  
  22. void setup() {
  23.   Serial.begin(9600);
  24.  
  25.   // Esempio di dati
  26.   uint8_t data[dataSize] = {0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08};
  27.  
  28.   // Calcola il parity bit con parità pari
  29.   bool evenParity = true; // Parità pari
  30.   uint8_t parityBit = calculateParityBit(data, dataSize, evenParity);
  31.   Serial.print("Parity bit calcolato (even parity): ");
  32.   Serial.println(parityBit);
  33.  
  34.   // Verifica il parity bit
  35.   bool isValid = verifyParityBit(data, dataSize, parityBit, evenParity);
  36.   if (isValid) {
  37.     Serial.println("Il parity bit è valido.");
  38.   } else {
  39.     Serial.println("Il parity bit è invalido.");
  40.   }
  41.  
  42.   // Simula un errore nei dati
  43.   data[3] ^= 0x01; // Modifica un bit nel quarto elemento
  44.  
  45.   // Verifica nuovamente il parity bit
  46.   isValid = verifyParityBit(data, dataSize, parityBit, evenParity);
  47.   if (isValid) {
  48.     Serial.println("Il parity bit è valido (dopo la modifica).");
  49.   } else {
  50.     Serial.println("Il parity bit è invalido (dopo la modifica).");
  51.   }
  52. }
  53.  
  54. void loop() {
  55.   // Ciclo vuoto
  56. }
  57.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement