error 403 网站拒绝显示,学校网站建设软件推荐,网站建设安全技术,网站开发 教程上次分享的《分享一个很酷的上位机软件》中#xff0c;有如下协议#xff1a;有位读者朋友问数据为什么要按这样的格式来发。其实这是个自定义协议#xff0c;这是上位机开发者定义的一个数据交互协议。我们下位机往伏特加上位机发送数据需要遵循这样的协议数据#xff0c;… 上次分享的《分享一个很酷的上位机软件》中有如下协议有位读者朋友问数据为什么要按这样的格式来发。其实这是个自定义协议这是上位机开发者定义的一个数据交互协议。我们下位机往伏特加上位机发送数据需要遵循这样的协议数据才能保证上位机能正确识别这些数据。关于自定义协议对于会的人很简单对于不会的人就摸不着头脑。下面分享一些关于自定义协议的笔记希望能对初学者有帮助也希望大神们能多多指出不足。什么是协议 协议这个概念我觉得挺杂的。就像嵌入式的概念一样说法不一比如大家常常争论FPGA是不是嵌入式、单片机是不是属于嵌入式等等。下面简单看一下嵌入式中协议这个概念。在互联网领域协议常常指的是网络协议。在嵌入式中协议按大类分主要可分为底层协议硬件层协议/物理层协议与上层协议用户层协议/应用层协议根据实际还可细分成很多层。底层协议如串口、SPI、I2C等底层协议决定着数据传输的方式传输数据需要多少条信号线传输数据的时序是怎样的。上层协议决定着这些数据是拿来干什么用的。太难解释了。。看实例吧这是多功能电能表的协议通讯协议其中底层协议是485通讯上层协议有很多条但格式基本都统一每一帧包数据的格式都类似是这样子的格式例如读数据协议主站往从站发送数据控制器-智能电表从站往主站发送数据智能电表-控制器明确了协议之后该发什么数据、收到的数据是怎么样我们都心里有数那么这个通信的过程就很明朗了。一般控制器往外发送协议数据都比较简单重点是返回数据的处理解析解析方式根据协议的不同而有不同的方法。协议上层协议按照通用性来分可以分为专有协议与自定义协议例如上面电表的协议其实是专有协议具有一些标准的协议自定义协议就是我们开发者可以针对一些应用、一些需求自己制定的一些协议。下面来分享一些常见的自定义协议常见的自定义协议 在我们嵌入式开发中自定义协议的应用很多。例如上下位机之间的通讯、控制器与控制器之间的通讯、服务器与设备终端之间的通讯等。自定义协议也没有什么特定的规范、标准可以很灵活地制定只要能满足开发需要即可。下面依旧以实例来做分享例子一典型之前有个物联网项目服务器往我们终端设备发送的协议数据类似于我们设备终端需要用到协议数据中字段的实际数据整个数据包是字符串的形式这时候可以用sscanf函数来做解析char tmpBuf[TMP_BUF_LEN];
char *cmd_str tmpBuf;
uint16_t num 0;
uint16_t devid 0;if (sscanf(buf, Data%s,%d,%d, cmd_str, num, devid)!3 )
{return -1;
}
关于sscanf函数就不做解释了不会的朋友自行百度。sscanf函数在做类似的解析非常好用很多时候都可以使用。如因为是两端通讯当然要确保通讯的正确性。比如服务器往设备发送数据怎么知道有没有发送这就得设备端在收到数据的同时回应相应的数据包。可以使用与sscanf函数相对应的sprintf函数做组包操作。比如这个sprintf例子与上例无关只是为了说明一下sprintf的用法一端给另一端发送数据一般有两种以设备端在往服务端发送数据为例1当设备收到服务端的数据时会回应与之对应的数据这称为被动应答。2设备主动给服务端发送数据例如设备常常定时、主动地给服务端发送一些时间戳信息等俗称心跳包这样服务端就知道设备是在正常工作的活着的状态。这称为主动发送或主动申请。在处理这些字符串形式的协议数据的时候用sscanf、sprintf、strcmp、strstr、strcat等函数非常方便有时候可以搭配正则表达式来做匹配。例子二典型之前有个项目需要从控制板显示主控制板的运行状态两控制板之间使用的底层协议为485协议。上层协议从控板接收数据协议如这里省略的部分为其他信息比如整个数据包的长度等。解析函数如这里的应用比较简单只是解析一个报警信息来显示。有时候需要用到整个数据包里的数据这时候我们可以建立一个结构体来保存所有我们需要的数据这样方便我们清晰、有条理地对数据进行处理。例如例子三其它上面的两个例子中的自定义协议是比较典型的、用得比较多的。下面也分享其它我自己的一些例子很多时候为了满足我们自己通讯应用的需要我们也会自己建立一些自己的小协议来满足我们的需求。1例子一之前使用串口屏与STM32通讯的时候我有制定一些的协议。为了让STM32能识别我串口屏不同页面发送的数据必须要制定一条协议来识别页面这样每切换至不同的页面时就会往STM32发送关于页面的协议数据这样我们就可以知道当前处于哪个界面。为了让STM32能接收到正确的WiFi设置信息如何区分WiFi名与密码必须要给WiFi信息添加一些辅助协议数据如相应的解析处理函数2例子二之前在一个单相用电器监测的应用中有用到zigbee无线通讯即其中一块控制板做采集板另一块控制板做显示板。有些朋友可能会有疑问为什么不做在同一块板上其实这是一道全国大学生电赛题《省电赛一等奖作品单相用电器分析监测装置》我们只是根据题目要求来做的我们当时在做这个通讯时也是有制定一个简单的协议在数据前面加个标识就像JSON格式数据的键值对。关于JSON数据可阅读《基于Linux、C、JOSN、Socket的编程实例附代码》《一个超轻量级的JSON解析器》《JSON的简单认识》我们制定的协议如相应的解析及结果类似这样子的协议解析实际上是有套路的摸清楚这些套路之后以后在做类似应用的时候其实就很简单了。重点掌握sscanf、sprintf、strcmp、strstr、strcat等函数以及上面的两种典型例子。小编在三个地方搬过砖每个地方都有用到类似的自定义协议而且都形成专门的协议文档每次做类似通讯类的应用的时候都会按照这样已份协议文档来修改以适应不同的项目。以上就是本次分享的关于嵌入式中自定义协议的一些笔记希望各位看官喜欢。如有错误欢迎指出谢谢原创不易期待您的收藏、转发、在看~小编微信li1459193463欢迎添加。扫码或长按关注回复「 篮球的大肚子」进入技术群聊