串口数据包

一数据包的定义  

        ·串口数据包:通常使用的是额外添加包头包尾的这种方式

        ·在HEX数据包里面,数据都是以原始的字节数据本身呈现的,而在文本数据包里面,每个字节就经过了一层编码和译码,最终表现出来的就是文本格式,但是实际上每个文本字节的背后都还是一个HEX数据。

        ·优缺点:

        HEX数据包优点:传输最直接,解析数据非常简单,比较适合一些模块发送原始的数据

                          缺点:灵活性不足,容易和包头包尾重复,

        文本数据包优点:数据直观易理解,非常灵活,比较适合一些输入指令进行人机交互的场合,比如蓝牙模块常用的AT指令,CNC和3D打印机常用的G代码,都是文本数据包的格式。

                          缺点:解析效率低,比如发送一个100,HEX数据包就是一个字节100,但是文本数据包就得是三个字节的字符‘1’‘0’‘0’,收到之后还要把字符转化成数据,才能得到100,

串口收发hex数据包

        ·固定包长:含包头包尾,每个数据包的长度都固定不变,数据包前面是包头,后面是包尾
        ·可变包长:含包头包尾,每一个数据包的长度可以是不一样的,前面是包头,后面是包尾。他的数据包格式可以根据用户需求自己规定。

        ·包头包尾和载荷重复解决办法:

        ·如果数据含有FF和FE,和包头包尾重复了怎么办?会引起误判,对于这个问题也有相应的几种解决方法:

        1.限制在和数据的范围,如果可以的话,可以在发送的时候对数据进行限幅。比如X、Y、Z三个数据的范围是0-100,那么可以在载荷中只发送0-100的数据,以此防止和包头包尾重复。

        2.如果无法避免载荷数据和包头包尾重复,则尽量使用固定长度的数据包,由于载荷数据是固定的,只要通过包头包尾对齐了数据,我们就可以严格知道,那个数据是包头包尾,哪个数据是载荷数据。

        在接收载荷数据的时候,我们并不会判断他是不是包头包尾,但是在判断包头包尾的时候会判断他是不是确实是包头包尾,用于数据对齐,在经过几个数据包对齐之后,剩下的数据包就不会出现问题了。

        3.增加包头包尾的数量,并且尽量让他呈现载荷数据出现不了的状态。比如我们使用FF、FE作为包头,FD、FC作为包尾,这样也可以避免包头包尾和载荷数据重复的情况发生。

        ·并不是所有的包头包尾都需要,可以只要一个包头,把包尾删掉,这样数据包的格式就是一个包头FF加四个数据。当监测到FF开始接收,当收够四个字节后置一个标志位,一个数据包接收完成。不过这样会加重载荷和包头重复的问题。最坏的情况下载荷全是FF,包头也是FF。如果加上了包尾FE,无论数据怎么变化都是可以分辨出包头包尾的。

        ·固定包长和可变包长的选择:

        对于HEX来说,如果载荷会出现包头和包尾重复的情况,最好是选择固定包长,以避免接收错误。如果重复还选择可变包长,数据容易乱套。如果包头包尾不会和载荷重复,可以选择可变包长

        ·关于各种数据转换为字节流的问题。

        数据包都一个字节一个字节组成的,如果想发送16、32位的整型数据,float、double甚至是结构体都没问题,因为内部是由一个字节一个字节组成的,仅需要用一个uint8_t的指针指向他,并把他们当做一个字节数组发送即可。

串口收发文本数据包

        ·由于数据译码成了字符形式,这样就会存在大量的字符可作为包头包尾,可以有效的避免载荷和包头包尾重复的问题。比如以@ 作为包头,以\r\n这两个换行字符作为包尾,在载荷数据中间可以出现除了包头包尾的任意字符。文本数据包基本不用担心包头包尾和载荷重复的问题,可变包长、各种符号、字母、数据都可以随意使用

        ·当接收到载荷数据之后,得到的就是一个字符串,在软件中对字符串进行操作和判断,就可以实现各种指令控制的功能,而且字符串数据包表达的意义很明显,可以把字符串数据包直接打印到串口助手上,各种指令和数据都可以一眼看清。

        ·文本数据包通常会以换行作为包尾,在打印的时候就可以一行一行显示,比较方便。

二、数据包的收发流程

HEX数据包接收(固定包长)

        在接收的时候,每收到一个字节,程序都会进一遍中断,在中断函数里面可以拿到这一个字节,在拿到数据之后就得退出中断了,每拿到一个数据都是一个独立的过程。对于数据包来说很明显有一个前后关联性,包头之后是数据,数据之后是包尾。对于包头数据包尾这三种不同的状态,我们需要有不同的处理逻辑,在程序中需设计一个记住不同状态的机制,在不同状态执行不同操作,同时还要进行状态的合理转移

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://xiahunao.cn/news/2868925.html

如若内容造成侵权/违法违规/事实不符,请联系瞎胡闹网进行投诉反馈,一经查实,立即删除!

相关文章

电脑自带dll修复在哪里打开呢?马上教会你

由于各种原因,电脑可能会出现一些问题,其中之一就是dll文件丢失。Dll文件是动态链接库文件,它们包含了许多程序运行所需的函数和资源。当这些文件丢失或损坏时,可能会导致程序无法正常运行或出现错误提示。本文将介绍电脑dll文件丢…

计算机网络实训-2 网络设备配置基础

文章目录 一、交换机/路由器的内部组成二、接口类型及接口标识观察:交换机、路由器的外观交换机的接口标识交换机的接口标识举例 路由器的接口标识路由器的接口标识举例 三、配置交换机/路由器的方法通过Console口来配置(带外管理)通过telnet…

L1-072 刮刮彩票 分数 20 (巧用一维数组,数组加和)

啊啊啊啊啊啊啊啊明明就想出来了,明明就,就差这2分为什么为什么啊!!!忘记当 tt 大于3小于6时应该 - 3 了,哎呦喂,三位的数组哪有4,5,6啊啊啊啊啊忘记减了,忘了…

【智能算法】CEC2005测试集

目录 1.背景2.CEC2005测试集3.代码实现4.参考文献 1.背景 IEEE 国际进化计算大会(IEEE Congress on Evolutionary Computation,IEEE CEC)是进化计算领域中规模最大、影响最重要的会议之一。为了公平评估算法的优化性能,该会议在优…

UCORE 清华大学os实验 lab0 环境配置

打卡 lab 0 : 环境配置 : 首先在ubt 上的环境,可以用虚拟机或者直接在windows 上面配置 然后需要很多工具 如 qemu gdb cmake git 就是中间犯了错误,误以为下载的安装包,一直解压不掉,结果用gpt 检查 结…

【Poi-tl Documentation】自定义行删除标签

前置说明&#xff1a; <dependency><groupId>com.deepoove</groupId><artifactId>poi-tl</artifactId><version>1.12.1</version> </dependency>模板样式&#xff1a; 删除行表格测试.docx 实现思路&#xff1a;通过定制占位…

基于springboot+vue实现疫情防控物资调配系统项目【项目源码】计算机毕业设计

基于springbootvue实现疫情防控物资调配系统演示 B/S结构的介绍 在确定了项目的主题和研究背景之后&#xff0c;就要确定本系统的架构了。主流的架构有两种&#xff0c;一种是B/S架构&#xff0c;一种是C/S架构。C/S的全称是Client/Server&#xff0c;Client是客户端的意思&am…

19-分支和循环语句_if语句switch语句(初阶)

19-1 概览 分支语句&#xff1a;if、switch 循环语句&#xff1a;while、for、do while goto语句 以上都属于控制语句 19-2 语句的分类 C语句可分为以下五类: 表达式语句、函数调用语句、控制语句、复合语句、空语句 19-3 结构 C语言是结构化的程序设计语言 顺序结构…

【ollama】(5):在本地使用docker-compose启动ollama镜像,修改模型存储位置,并下载qwen-0.5b模型,速度飞快

1&#xff0c;ollama项目 Ollama 是一个强大的框架&#xff0c;设计用于在 Docker 容器中部署 LLM。Ollama 的主要功能是在 Docker 容器内部署和管理 LLM 的促进者&#xff0c;它使该过程变得非常简单。它帮助用户快速在本地运行大模型&#xff0c;通过简单的安装指令&#xf…

最迟但到的 Star History 2023 年度开源精选!

千呼万唤始出来&#xff0c;Star History 2023 年终开源精选来啦&#xff01;&#x1f389; AI 是 2023 开源领域里最主要的关键词&#xff0c;但其实过去一年还是有很多其他值得关注的项目和发展趋势的&#xff01;Star History 小编总结了几个类别并精选了类别中最亮眼的项目…

2024年【危险化学品经营单位主要负责人】找解析及危险化学品经营单位主要负责人模拟考试

题库来源&#xff1a;安全生产模拟考试一点通公众号小程序 危险化学品经营单位主要负责人找解析考前必练&#xff01;安全生产模拟考试一点通每个月更新危险化学品经营单位主要负责人模拟考试题目及答案&#xff01;多做几遍&#xff0c;其实通过危险化学品经营单位主要负责人…

lua脚本的基础内容

官方地址&#xff1a;http://luajit.org/ 官方wiki地址&#xff1a;http://wiki.luajit.org/Home 推荐书籍&#xff1a; OpenResty 最佳实践&#xff1a;https://moonbingbing.gitbooks.io/openresty-best-practices/content/ lua基础文档&#xff1a;https://www.runoob.com/l…

【Machine Learning】Suitable Learning Rate in Machine Learning

一、The cases of different learning rates: In the gradient descent algorithm model: is the learning rate of the demand, how to determine the learning rate, and what impact does it have if it is too large or too small? We will analyze it through the follow…

vmware workstation虚拟机报错”该虚拟机似乎正在使用中“

虚拟机报错&#xff1a; 解决方法&#xff1a; 进入到虚拟机的安装目录里&#xff0c;将lck结尾的文件删掉即可 重新点击虚拟机恢复正常

MIT线性代数-方程组的几何解释

文章目录 1. 二维空间1.1 行方向1.2 列方向 2. 三维空间2.1 行方向2.2 列方向 假设有一个方程组 A X B AXB AXB表示如下 2 x − y 0 (1) 2x-y0\tag{1} 2x−y0(1) − x 2 y 3 (2) -x2y3\tag{2} −x2y3(2) 矩阵表示如下&#xff1a; [ 2 − 1 − 1 2 ] [ x y ] [ 0 3 ] (3)…

DataGrip 面试题及答案整理,最新面试题

DataGrip的数据库兼容性和多数据库支持如何实现&#xff1f; DataGrip实现数据库兼容性和多数据库支持的方式包括&#xff1a; 1、广泛的数据库支持&#xff1a; DataGrip支持多种数据库&#xff0c;包括但不限于MySQL, PostgreSQL, SQL Server, Oracle, SQLite, 和MongoDB&a…

Leet code 179 最大数

解题思路 贪心算法 贪心算法就是走一步看一步 每一步都取当前位置的最优解 这题我们该如何贪呢&#xff1f; 我们先把int数组转换为string数组 以示例2为例 3 30 34 5 9 排序哪个在前哪个在后&#xff1f; 3 30 &#xff08;330&#xff09;> 30 3 &#xff08;30…

进程学习--02

在C语言中&#xff0c;一般使用fork函数开辟进程&#xff0c;这个函数开辟进程后会返回一个进程号&#xff0c;在子进程中会返回0&#xff0c;在父进程中会返回子进程的进程号。 int main(){int ret fork();if(ret<0){fprintf(stderr, "pid error");exit(-1);}e…

进入jupyter notebook发现没有虚拟环境,最简单实用的解决办法!

jupyter notebook 1. 进入jupyter notebook发现没有虚拟环境2.解决办法2.1 检查是否有库ipykernel&#xff0c;我发现我没有2.2 开始安装ipykernel2.3 将虚拟环境写入 总结 1. 进入jupyter notebook发现没有虚拟环境 2.解决办法 2.1 检查是否有库ipykernel&#xff0c;我发现我…

提升口才表达能力的重要性与途径

提升口才表达能力的重要性与途径 口才表达能力&#xff0c;即一个人通过口头语言准确、流畅、生动地传达思想、情感和观点的能力&#xff0c;是现代社会中不可或缺的一项基本技能。无论是在职场沟通、人际交往还是公共场合发言&#xff0c;优秀的口才表达能力都能为我们带来诸…