串口环形缓冲区强化:单独单写及最小临界区修改
This commit is contained in:
@@ -11,6 +11,7 @@
|
||||
|
||||
#include "command.h"
|
||||
#include "uart_ring_buffer.h"
|
||||
#include "uart.h"
|
||||
#include "led.h"
|
||||
#include <stdint.h>
|
||||
#include <stdbool.h>
|
||||
@@ -588,7 +589,9 @@ void command_process(void) {
|
||||
handle_command(cmd_buf, expected_cmd_len);
|
||||
} else {
|
||||
// 验证失败时清空缓冲区,避免后续帧受影响
|
||||
uart_rx_irq_pause();
|
||||
uart_ring_buffer_clear();
|
||||
uart_rx_irq_resume();
|
||||
}
|
||||
|
||||
// 复位,等待下一帧
|
||||
@@ -633,7 +636,9 @@ void command_execute(const char *cmd_str)
|
||||
frame_buf[frame_len - 1] = (uint8_t)(crc & 0xFF);
|
||||
|
||||
// 清空缓冲区并执行命令
|
||||
uart_rx_irq_pause();
|
||||
uart_ring_buffer_clear();
|
||||
uart_rx_irq_resume();
|
||||
for (uint8_t i = 0; i < frame_len; i++) {
|
||||
uart_ring_buffer_put(frame_buf[i]);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user