fix(chrg_roll_sou): 优化电流命令处理与线程超时设置

0. 加快指令下发和返回时间,电压电流最新值覆盖旧值
1. 新增SOU_RESPONSE_TIMEOUT_MS宏定义,统一超时时间配置
2. 添加电流命令最新值有效策略,避免队列堆积过时指令
3. 将线程接收消息超时改为毫秒转系统节拍的标准写法
4. 移除冗余的线程延迟等待逻辑
This commit is contained in:
yhf
2026-07-19 17:13:50 +08:00
parent 2ba4fc16b7
commit 03f1193d2e
+20 -2
View File
@@ -22,6 +22,7 @@
#include <rtdbg.h>
#define SOU_MUTEX_TIMEOUT_MS 100
#define SOU_RESPONSE_TIMEOUT_MS 20
#define SOU_COM_MAX_ATTEMPTS 3
chrg_rollsou_com_t g_sou_com_batch = {0};
@@ -77,6 +78,23 @@ int chrg_sou_com_batch_submit(eIDX_SOU_CH ch, const rt_uint16_t *regs,
pBatch->cur_idx = 0;
}
/*
* 电流调节采用最新值有效策略。若同一通道仍有尚未发送的电流命令,
* 直接覆盖旧值,避免四通道快速测试时队列积累过时的电流设置。
* 当前命令已经发送时不覆盖,保证响应仍与原命令匹配。
*/
if ((count == 1) && (regs[0] == (REG_CURRENT_OUT + 1))) {
for (i = pBatch->cur_idx; i < pBatch->reg_cnt; i++) {
if (pBatch->reg_list[i] == regs[0]) {
pBatch->val_list[i] = vals[0];
pBatch->pending = RT_TRUE;
pROLL->run = RUN_COM;
rt_mutex_release(pTHR->mutex);
return 0;
}
}
}
if ((pBatch->reg_cnt > SOU_COM_BATCH_REG_MAX) ||
(count > (SOU_COM_BATCH_REG_MAX - pBatch->reg_cnt))) {
LOG_E("sou com batch reg full: ch=%d queued=%d append=%d max=%d",
@@ -391,7 +409,8 @@ void chrg_roll_sou_thread_entry (void *data)
}
pMB_R = RT_NULL;
ret = rt_mb_recv(pTS->mb, (rt_uint32_t *)&pMB_R, 50);
ret = rt_mb_recv(pTS->mb, (rt_uint32_t *)&pMB_R,
rt_tick_from_millisecond(SOU_RESPONSE_TIMEOUT_MS));
if ((RT_EOK == ret) && (RT_NULL != pMB_R)) {
rt_bool_t response_valid;
@@ -424,7 +443,6 @@ void chrg_roll_sou_thread_entry (void *data)
}
sou_msg_free(&pMB_R);
rt_thread_mdelay(20);
} else {
sou_msg_free(&pMB_R);
if ((run == RUN_COM) && command_valid) {