串口环形缓冲区强化:单独单写及最小临界区修改

This commit is contained in:
2026-02-24 14:22:01 +08:00
parent 7419dec1b5
commit 1e50a94427
5 changed files with 52 additions and 0 deletions

View File

@@ -12,4 +12,20 @@
void uart_init(void);
void debug_usart_init(void);
/*!
\brief pause UART RX interrupt (RBNE)
\param[in] none
\param[out] none
\retval none
*/
void uart_rx_irq_pause(void);
/*!
\brief resume UART RX interrupt (RBNE)
\param[in] none
\param[out] none
\retval none
*/
void uart_rx_irq_resume(void);
#endif // UART_H

View File

@@ -27,6 +27,12 @@
* @section RingBuffer_Usage 使用说明
* 典型用法:中断接收(写入环形缓冲)、主循环解析(读取环形缓冲)。
*
* 并发访问约束SPSC无锁单写单读
* - ISR 生产者:仅调用 uart_ring_buffer_put() 写入数据。
* - 主循环消费者:仅调用 uart_ring_buffer_get()/uart_ring_buffer_available() 读取数据。
* - uart_ring_buffer_init()/uart_ring_buffer_clear() 会同时修改读写索引,内部使用最小临界区保护。
* - 建议在主循环调用 clear/init 前先暂停 UART RX 中断,完成后再恢复,避免与 ISR 竞争。
*
* 1) 初始化
* @code{.c}
* uart_ring_buffer_init();