ajtdnta 发表于 2020-8-14 17:01:05

轻量级通讯协议源码(适用于单片机之间通讯)

/*
应用场景之一:串口通讯
*/
int pack_encode(char *src, int src_len, char *dst, int *dst_len)
{
    int i = 0;
    int j = 0;

    if (!src || !dst || !dst_len)
      return -1;

    dst = 0x7E;
    for (i = 0; i < src_len; i++)
    {
      if (src == 0x7E)
      {
            dst = 0x7D;
            dst = 0x5E;
      }
      else if (src == 0x7D)
      {
            dst = 0x7D;
            dst = 0x5D;
      }
      else
      {
            dst = src;
      }
    }
    dst = 0x7E;
    *dst_len = j;
    return 0;
}

int pack_decode(char *src, int src_len, char *dst, int *dst_len)
{
    int i = 0;
    int j = 0;

    if (!src || !dst || !dst_len || src != 0x7E || src != 0x7E)
      return -1;

    src_len--;
    for (i = 1; i < src_len; i++)
    {
      if (src == 0x7D && (i + 1) < src_len)
      {
            i++;
            if (src == 0x5E)
            {
                dst = 0x7E;
            }
            else if (src == 0x5D)
            {
                dst = 0x7D;
            }
            else
            {
                return -1;
            }
      }
      else
      {
            dst = src;
      }
    }
    *dst_len = j;
    return 0;
}

int main(int argc, char *argv[])
{
    int i = 0;
    int len = 0;
    char buff = {0x7F};
    char temp = {0};
    char result = {0};

    pack_encode(buff, 1, temp, &len);
    printf("encode reault:len=%d,", len);
    for (i = 0; i < len; i++)
      printf("%02x ", temp);
    printf("\n");

    pack_decode(temp, len, result, &len);
    printf("decode reault:len=%d,", len);
    for (i = 0; i < len; i++)
      printf("%02x ", result);
    printf("\n");

    if (memcmp(result, buff, len) != 0)
    {
      printf("fuck!test failed\n");
    }
    else
    {
      printf("yes!, test ok\n");
    }

    return 0;
}

/*
打包,解包、测试都在上面了,拿去用吧,不用感谢。
*/

mj8abcd 发表于 2020-8-14 18:02:44

墙头草 发表于 2020-8-21 22:51:50

qq603599910 发表于 2020-9-18 18:34:10

相关用了挺多,因为PC和STC15W通讯,就几个指令,所以电脑端发送单字节 A,B,C。。。。,然后单片机端接收到用switch判断做相应干活.

sqyfzx 发表于 2022-9-7 08:04:12

学习一下看看

love_change 发表于 2022-9-8 08:58:12

int pack_decode(char *src, int src_len, char *dst, int *dst_len)
这句那位大佬解释下,这个函数开头的int和括号里面的int分别是,返回值类型,和变量类型吗

gyh02133 发表于 2022-9-8 16:46:00

这个不好用
页: [1]
查看完整版本: 轻量级通讯协议源码(适用于单片机之间通讯)