控制台改单写者发送:defaultTask唯一发串口其余任务写环形缓冲,杜绝日志交错与脏指针入UART;溢出钩子加指针窗口校验、崩溃上报改显式长度

This commit is contained in:
2026-09-24 23:47:23 +08:00
parent c075cfa076
commit 3763e699dc
8 changed files with 346 additions and 34 deletions
+6
View File
@@ -77,6 +77,12 @@ HAL_StatusTypeDef rs485_transmit(rs485_handle_t *p_handle,
timeout = RS485_TIMEOUT_DEFAULT;
}
/* 防御性边界(2026-09-24,UART 缓冲遍历类 HardFault 加固):
* 长度必须非零且不超过收发缓冲上限——脏长度交给 HAL 会变成"按长度遍历整片内存" */
if ((p_data == NULL) || (len == 0U) || (len > RS485_TX_MAX_LEN)) {
return HAL_ERROR;
}
RS485_DIR_TX(p_handle);
/* DE 建立延时:HAL 时基为 1ms 粒度,1ms 已充分覆盖收发器驱动使能稳定时间 */
+1
View File
@@ -25,6 +25,7 @@ extern "C" {
*/
#define RS485_TIMEOUT_DEFAULT 1000U /* 默认发送超时(ms) */
#define RS485_RX_BUF_SIZE 256U /* 接收缓冲区大小 */
#define RS485_TX_MAX_LEN 256U /* 单帧发送长度上限(防御脏长度进 UART,2026-09-24 加固) */
/*
* RS-485 句柄结构体