宏定义:
RX_BUFFER_SIZE 128
#ifdef USE_LINE_NUMBERS
#define TX_BUFFER_SIZE 112
#else
#define TX_BUFFER_SIZE 104
SERIAL_NO_DATA 0xff
#define RX_RING_BUFFER (RX_BUFFER_SIZE+1)
#define TX_RING_BUFFER (TX_BUFFER_SIZE+1)
使用的变量:
uint8_t serial_rx_buffer[RX_RING_BUFFER]; //读取buf
uint8_t serial_rx_buffer_head = 0; //读取buf的头
volatile uint8_t serial_rx_buffer_tail = 0; //读取buf的尾 使用volatile关键字让编译器将该变量放到cpu的cache里面方便快速读取
uint8_t serial_tx_buffer[TX_RING_BUFFER]; //发送buf
uint8_t serial_tx_buffer_head = 0; //发送buf的头
volatile uint8_t serial_tx_buffer_tail = 0; //发送buf的尾
实际上是两个环形数组,一个为发送的缓冲区、另一个为接受缓冲区
函数说明:
void serial_init(); //主要设置串口的波特率、停止位、校验位、流控制
// 获取串口接收缓冲区中可用的字节数
uint8_t serial_get_rx_buffer_available();
// // 获取读取缓冲区中已使用的字节数
// NOTE: Deprecated. Not used unless classic status reports are enabled in config.h.
uint8_t serial_get_rx_buffer_count();
// 获取发送缓冲区中已使用的字节数
// NOTE: Not used except for debugging and ensuring no TX bottlenecks.
uint8_t serial_get_tx_buffer_count();
// 写入一个字节到发送缓冲区中
void serial_write(uint8_t data) {
// Calculate next head
uint8_t next_head = serial_tx_buffer_head + 1;
if (
串口通信缓冲区管理

本文详细介绍了串口通信中的缓冲区管理策略,包括宏定义配置、环形数组的使用,以及发送和接收缓冲区的读写操作。特别强调了中断处理在实时指令响应中的作用,展示了如何通过中断直接处理实时指令,避免数据存储,从而提高系统响应速度。
最低0.47元/天 解锁文章
1406

被折叠的 条评论
为什么被折叠?



