From 03f1193d2e65a25a4eb79e4de49b259346ef3d14 Mon Sep 17 00:00:00 2001 From: yhf Date: Sun, 19 Jul 2026 17:13:50 +0800 Subject: [PATCH] =?UTF-8?q?fix(chrg=5Froll=5Fsou):=20=E4=BC=98=E5=8C=96?= =?UTF-8?q?=E7=94=B5=E6=B5=81=E5=91=BD=E4=BB=A4=E5=A4=84=E7=90=86=E4=B8=8E?= =?UTF-8?q?=E7=BA=BF=E7=A8=8B=E8=B6=85=E6=97=B6=E8=AE=BE=E7=BD=AE=200.=20?= =?UTF-8?q?=E5=8A=A0=E5=BF=AB=E6=8C=87=E4=BB=A4=E4=B8=8B=E5=8F=91=E5=92=8C?= =?UTF-8?q?=E8=BF=94=E5=9B=9E=E6=97=B6=E9=97=B4=EF=BC=8C=E7=94=B5=E5=8E=8B?= =?UTF-8?q?=E7=94=B5=E6=B5=81=E6=9C=80=E6=96=B0=E5=80=BC=E8=A6=86=E7=9B=96?= =?UTF-8?q?=E6=97=A7=E5=80=BC=201.=20=E6=96=B0=E5=A2=9ESOU=5FRESPONSE=5FTI?= =?UTF-8?q?MEOUT=5FMS=E5=AE=8F=E5=AE=9A=E4=B9=89=EF=BC=8C=E7=BB=9F?= =?UTF-8?q?=E4=B8=80=E8=B6=85=E6=97=B6=E6=97=B6=E9=97=B4=E9=85=8D=E7=BD=AE?= =?UTF-8?q?=202.=20=E6=B7=BB=E5=8A=A0=E7=94=B5=E6=B5=81=E5=91=BD=E4=BB=A4?= =?UTF-8?q?=E6=9C=80=E6=96=B0=E5=80=BC=E6=9C=89=E6=95=88=E7=AD=96=E7=95=A5?= =?UTF-8?q?=EF=BC=8C=E9=81=BF=E5=85=8D=E9=98=9F=E5=88=97=E5=A0=86=E7=A7=AF?= =?UTF-8?q?=E8=BF=87=E6=97=B6=E6=8C=87=E4=BB=A4=203.=20=E5=B0=86=E7=BA=BF?= =?UTF-8?q?=E7=A8=8B=E6=8E=A5=E6=94=B6=E6=B6=88=E6=81=AF=E8=B6=85=E6=97=B6?= =?UTF-8?q?=E6=94=B9=E4=B8=BA=E6=AF=AB=E7=A7=92=E8=BD=AC=E7=B3=BB=E7=BB=9F?= =?UTF-8?q?=E8=8A=82=E6=8B=8D=E7=9A=84=E6=A0=87=E5=87=86=E5=86=99=E6=B3=95?= =?UTF-8?q?=204.=20=E7=A7=BB=E9=99=A4=E5=86=97=E4=BD=99=E7=9A=84=E7=BA=BF?= =?UTF-8?q?=E7=A8=8B=E5=BB=B6=E8=BF=9F=E7=AD=89=E5=BE=85=E9=80=BB=E8=BE=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- apps/chrg/applications/thread/chrg_roll_sou.c | 22 +++++++++++++++++-- 1 file changed, 20 insertions(+), 2 deletions(-) diff --git a/apps/chrg/applications/thread/chrg_roll_sou.c b/apps/chrg/applications/thread/chrg_roll_sou.c index a141d7a..34e6542 100644 --- a/apps/chrg/applications/thread/chrg_roll_sou.c +++ b/apps/chrg/applications/thread/chrg_roll_sou.c @@ -22,6 +22,7 @@ #include #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) {