Algorithme de vérification example_sum en langage C

1. Présentation de l'algorithme

La somme de contrôle est un algorithme de correction d'erreurs simple utilisé pour détecter ou vérifier les erreurs de transmission ou de stockage des données. Il calcule et génère une somme de contrôle sur les données, puis ajoute la somme de contrôle aux données, calcule à nouveau la somme de contrôle à l'extrémité réceptrice et la compare pour déterminer si les données sont complètes et correctes.

Les algorithmes de somme de contrôle utilisent généralement des opérations au niveau du bit pour calculer la somme de contrôle.

Les algorithmes de contrôle de somme courants sont les suivants :

(1) Somme de contrôle simple : ajoutez tous les octets des données et comparez le résultat avec une somme de contrôle prédéfinie. Si les deux sont égaux, les données ne sont pas erronées.

(2) CRC (Cyclic Redundancy Check): Il utilise la division pour calculer la somme de contrôle, qui a une capacité de détection d'erreur plus élevée. L'algorithme CRC utilise un polynôme générateur fixe pour diviser les données et générer un reste sous forme de somme de contrôle.

L'algorithme de contrôle de somme peut être utilisé dans une variété de scénarios d'application différents :

(1) Transmission de données : lorsque les données sont transmises via la transmission réseau, la communication par port série ou d'autres canaux de communication, le contrôle de somme peut détecter les erreurs de bit ou les erreurs de transmission qui se produisent pendant le processus de transmission pour garantir l'intégrité et l'exactitude des données.

(2) Vérification du stockage : lors de l'écriture ou de la lecture de données sur un support de stockage de données, la vérification de la somme peut aider à détecter une défaillance du support ou une corruption des données.

(3) Vérification de fichier : dans des scénarios tels que le téléchargement de fichiers, la sauvegarde de fichiers ou le transfert de fichiers, la vérification de la somme peut être utilisée pour vérifier l'intégrité du fichier afin de s'assurer que le fichier n'a pas été falsifié ou endommagé.

(4) Vérification de la base de données : dans un système de base de données, la vérification de la somme peut être utilisée pour détecter l'intégrité des données et empêcher les données d'être erronées ou endommagées pendant le stockage ou la transmission.

L'algorithme de contrôle de somme est un algorithme de correction d'erreurs simple mais pratique pour détecter les erreurs de transmission ou de stockage de données, et a été largement utilisé dans de nombreuses applications pour garantir l'intégrité et la précision des données.

image-20230626213659368

2. Mise en œuvre du code

Scénario : dans une communication à puce unique, la puce unique doit envoyer un élément de données à l'ordinateur hôte. Par exemple, stocké dans char buff[1024] ; ce tableau. Deux fonctions doivent être encapsulées. Le MCU appelle la fonction pour effectuer un contrôle de somme sur cette donnée, encapsule la valeur de contrôle, puis l'ordinateur hôte vérifie la somme de contrôle après avoir reçu les données et vérifie si les données sont transmises correctement.

2.1 Fonction d'encapsulation côté MCU (envoyer des données et calculer et vérifier)

// 计算校验和
unsigned char calculateChecksum(const char* data, int length) {
    
    
    unsigned char checksum = 0;
    for (int i = 0; i < length; i++) {
    
    
        checksum += data[i];
    }
    return checksum;
}

// 发送数据并附加校验和
void sendDataWithChecksum(const char* data, int length) {
    
    
    // 发送数据...
    
    unsigned char checksum = calculateChecksum(data, length);
    
    // 发送校验和
    // 若使用UART通信,可以使用以下代码发送校验和,并确保上位机端能够解析它
    // sendByte(checksum); // 发送校验和
}

Dans le code ci-dessus, calculateChecksumla fonction est utilisée pour calculer la somme de contrôle des données, en ajoutant chaque octet de données et en renvoyant la valeur de la somme de contrôle. sendDataWithChecksumLa fonction est utilisée pour calculer la somme de contrôle avant d'envoyer des données et envoyer la somme de contrôle à l'ordinateur hôte.

2.2 Fonction d'encapsulation de l'ordinateur hôte (réception de données et vérification de la somme de contrôle)

e// 验证校验和
bool verifyChecksum(const char* data, int length, unsigned char receivedChecksum) {
    
    
    unsigned char calculatedChecksum = calculateChecksum(data, length);
    return calculatedChecksum == receivedChecksum;
}

// 接收数据并验证校验和
void receiveDataWithChecksum(const char* data, int length) {
    
    
    // 接收数据...
    
    unsigned char receivedChecksum = receiveChecksum(); // 假设从上位机接收到校验和的值
    
    if (verifyChecksum(data, length, receivedChecksum)) {
    
    
        // 校验通过,数据传输正确
        // 处理数据...
    } else {
    
    
        // 校验失败,数据传输错误
        // 进行相应的处理...
    }
}

Côté hôte, verifyChecksumla fonction est utilisée pour vérifier que la somme de contrôle correspond à la somme de contrôle reçue. receiveDataWithChecksumLa fonction est utilisée pour recevoir des données et une somme de contrôle, et appeler verifyChecksumla fonction pour vérifier. Si la vérification est réussie, la transmission des données est correcte ; sinon, la transmission des données est erronée.

Je suppose que tu aimes

Origine blog.csdn.net/xiaolong1126626497/article/details/132269319
conseillé
Classement