轻量级通讯协议源码(适用于单片机之间通讯)
/*应用场景之一:串口通讯
*/
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;
}
/*
打包,解包、测试都在上面了,拿去用吧,不用感谢。
*/ 相关用了挺多,因为PC和STC15W通讯,就几个指令,所以电脑端发送单字节 A,B,C。。。。,然后单片机端接收到用switch判断做相应干活. 学习一下看看 int pack_decode(char *src, int src_len, char *dst, int *dst_len)
这句那位大佬解释下,这个函数开头的int和括号里面的int分别是,返回值类型,和变量类型吗 这个不好用
页:
[1]