[APM32F4] 奇偶校验算法实现一则

[复制链接]
1025|41
uptown 发表于 2025-11-5 21:08 | 显示全部楼层
奇校验确保数据位中1的个数为奇数。如果数据位中1的个数已经是奇数,则校验位设为0;否则设为1。
uptown 发表于 2025-11-7 08:46 | 显示全部楼层
偶校验:确保“1”的总个数是偶数。
奇校验:确保“1”的总个数是奇数。
macpherson 发表于 2025-11-8 10:32 | 显示全部楼层
通过循环统计字节中“1”的个数,利用异或运算优化效率
ingramward 发表于 2025-11-8 12:35 | 显示全部楼层
只能检测出奇数个比特的错误。如果错误比特数是偶数个,1的个数奇偶性不变,校验会错误地通过。
sesefadou 发表于 2025-11-8 15:36 | 显示全部楼层
get_parity_xor(uint8_t data) {
    data ^= data >> 4; // 将高4位和低4位的奇偶性异或
    data ^= data >> 2; // 将(4+2)位和(2)位的奇偶性异或
    data ^= data >> 1; // 将(2+1)位和(1)位的奇偶性异或
    return data & 1;   // 结果的最低位就是最终的奇偶性
}
uptown 发表于 2025-11-8 21:33 | 显示全部楼层
通过在数据中添加一个附加的奇偶位 来实现错误的检测。
chenci2013 发表于 2025-11-9 18:32 | 显示全部楼层
算法只能发现错误,不能确定错误位置或进行纠正
wilhelmina2 发表于 2025-11-9 21:38 | 显示全部楼层
通过增加一个校验位,使得整个数据单元(包括数据位和校验位)中 1的个数为奇数或偶数。
jackcat 发表于 2025-11-10 20:16 | 显示全部楼层
利用位运算的技巧,可以非常高效地计算出奇偶性,且不占用额外内存。
yeates333 发表于 2025-11-11 10:20 | 显示全部楼层
对突发错误的检测能力较弱,需结合其他纠错机制
linfelix 发表于 2025-11-11 12:07 | 显示全部楼层
校验位通常添加在数据的最低位或最高位。
iyoum 发表于 2025-11-11 15:31 | 显示全部楼层
在单片机等资源受限设备中,可通过查表法替代循环计数,提升校验位计算速度
febgxu 发表于 2025-11-11 18:01 | 显示全部楼层
校验位可放在数据的最高位、最低位或单独作为一个字节
xiaoyaodz 发表于 2025-11-11 20:37 | 显示全部楼层
循环移位法              
bestwell 发表于 2025-11-12 10:19 | 显示全部楼层
奇偶校验是一种简单高效的差错检测手段
vivilyly 发表于 2025-11-12 14:15 | 显示全部楼层
发送端与接收端必须采用相同的校验类型
linfelix 发表于 2025-11-12 17:07 | 显示全部楼层
在FPGA或硬件加速器中实现并行奇偶校验,提升高速通信性能。
plsbackup 发表于 2025-11-12 19:10 | 显示全部楼层
bool is_byte_odd_parity(uint8_t byte) {
    bool parity = false;
    while (byte) {
        parity = !parity;
        byte &= byte - 1; // 清除最低位的1
    }
    return parity;
}

uint32_t get_data_parity(uint8_t* src, uint32_t lenInBytes) {
    bool isDataOddParity = false;
    while (lenInBytes--) {
        isDataOddParity ^= is_byte_odd_parity(*src++);
    }
    return !isDataOddParity; // 返回奇校验位
}
vivilyly 发表于 2025-11-13 10:31 | 显示全部楼层
奇偶校验的优势是实现简单、开销小,适合对实时性要求高但错误率低的场景
hearstnorman323 发表于 2025-11-13 12:36 | 显示全部楼层
算法本身很简单,但理解其局限性和正确使用场景才是关键。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 在线客服 返回列表 返回顶部
0