Grbl源码解析与移植-串口

串口通过UART接口通过USB与上位机通信,配置成中断接收和中断发送模式,并创建了串口接收环形队列和串口发送环形队列,中断接收的数据存放在串口接收环形队列里,串口需要发送的数据放到串口发送环形队列里。

为什么要使用环形队列呢,它有什么优点?

环形队列是在实际编程极为有用的数据结构,它是一个首尾相连的FIFO的数据结构,采用数组的线性空间,数据组织简单。能很快知道队列是否满为空。能以很快速度的来存取数据。

1.缓冲:使用队列可以缓冲数据,提升收发数据的性能。

2.高效:相比直线队列,空间利用率高。

2.多任务:配合中断,串口和主循环可以在互不干扰的情况下独立工作。

读取串口数据流程:

串口有数据时,触发中断,读取串口缓冲区到读循环队列rx_buffer,主循环中解析和执行rx_buffer中的指令;

写入串口数据流程:

把指令执行的结果消息放入写循环队列tx_buffer,串口写缓冲区为空时触发中断,从写循环队列读取数据到串口写缓冲区。

具体实现:

与串口收发相关的源代码有以下文件:

serial.c:低阶串口通信封装。

report.c:通知状态映射和消息组装

print.c:不同数据结构的格式化

protocol.c:主循环,消费读缓冲区的数据

我们重点分析serial.c,在该文件中定义了串口的初始化,重置,读取,写入和计数等功能,并设置了串口收发中断处理。


serial.c

你可能感兴趣的:(Grbl源码解析与移植-串口)