控制台改单写者发送:defaultTask唯一发串口其余任务写环形缓冲,杜绝日志交错与脏指针入UART;溢出钩子加指针窗口校验、崩溃上报改显式长度
This commit is contained in:
@@ -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 已充分覆盖收发器驱动使能稳定时间 */
|
||||
|
||||
@@ -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 句柄结构体
|
||||
|
||||
Reference in New Issue
Block a user