精通嵌入式C程序

举报
yd_210205184 发表于 2026/11/05 08:55:04 2026/11/05
【摘要】 1.高效CRC-CCITT算法,占用FLASH少,效率高uint16_t cal_crc(uint16_t crc, uint8_t *buf, uint16_t n){    const uint8_t *p = buf;    while (n--)        {        uint16_t t = (crc ^ *p++) & 0xFF;        t ^= ((t & 0...
1.高效CRC-CCITT算法,占用FLASH少,效率高
uint16_t cal_crc(uint16_t crc, uint8_t *buf, uint16_t n)
{
    const uint8_t *p = buf;
    while (n--)
        {
        uint16_t t = (crc ^ *p++) & 0xFF;
        t ^= ((t & 0x0F) << 4);
        crc = (crc >> 8) ^ (t << 8) ^ (t << 3) ^ (t >> 4);
    }
    return crc;
}

2.复活节算法
void vEasterCalculate(uint8_t ubScrYy,uint8_t *ubDstDay,uint8_t *ubDstMth)
{
    uint16_t N,A,B,Q,M,W;
    N = ubScrYy + 100;
    A = N % 19;
    Q = N / 4;
    B = (7 * A + 1) / 19;
    M = (11 * A + 4 - B) % 29;
    W = (N + Q + 31 - M) % 7;
    if(M + W > 25) {
        *ubDstDay = 56 - M - W;
        *ubDstMth = 3;
    }
    else if(25 == (M + W)) {
        *ubDstDay = 31;
        *ubDstMth = 3;
    }
    else {
        *ubDstDay = 25 - M - W;
        *ubDstMth = 4;
    }
}

3.通用二分查找算法
void *search_pre(const void *key, const void *base, uint16_t n, uint8_t size,
                 int8_t (*cmp)(const void *, const void *), const void **pre)
{
    uint16_t sml, big, mid;
    const void *p;
    int8_t cmp_result;

    sml = 0;
    big = n - 1;

    while (sml < big) {
        mid = (sml + big) >> 1;
        p = (const uint8_t *)base + (mid * size);
        cmp_result = cmp(key, p);

        if (cmp_result < 0) {
            big = mid;
        }
        else if (cmp_result > 0) {
            sml = mid + 1;
        }
        else {
            if (pre != NULL) {
                if (mid == 0) {
                    *pre = NULL;
                }
                else {
                    *pre = (const uint8_t *)p - size;
                }
            }
            return ((void *)p);
        }
    }
    if (pre != NULL) {
        if (sml <= 0) {
            *pre = NULL;
        }
        else {
            *pre = (uint8_t *)base + (sml-1) * size;
        }
    }
    return NULL;
}


【版权声明】本文为华为云社区用户原创内容,未经允许不得转载,如需转载请自行联系原作者进行授权。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0)

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。