From 485105221e8177d90b641f9a3304ad415791fb9e Mon Sep 17 00:00:00 2001 From: Uwe Bonnes Date: Fri, 8 Oct 2021 12:50:31 +0200 Subject: [PATCH] dap: Always work on a copy of the buffer when calling dbg_dap_cmd() in a loop A better solution would use seperate buffers for dbg_dap_cmd. But as WAIT is already handled in DAP, cahnces are low that loop re-entry is needed. --- src/platforms/hosted/dap.c | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/src/platforms/hosted/dap.c b/src/platforms/hosted/dap.c index 35bce96b..b2827bf0 100644 --- a/src/platforms/hosted/dap.c +++ b/src/platforms/hosted/dap.c @@ -326,11 +326,10 @@ static uint32_t wait_word(uint8_t *buf, int size, int len, uint8_t *dp_fault) uint8_t cmd_copy[len]; memcpy(cmd_copy, buf, len); do { + memcpy(buf, cmd_copy, len); dbg_dap_cmd(buf, size, len); if (buf[1] < DAP_TRANSFER_WAIT) break; - if (buf[1] == DAP_TRANSFER_WAIT) - memcpy(buf, cmd_copy, len); } while (buf[1] == DAP_TRANSFER_WAIT); if (buf[1] > DAP_TRANSFER_WAIT) { @@ -378,7 +377,10 @@ void dap_write_reg(ADIv5_DP_t *dp, uint8_t reg, uint32_t data) buf[5] = (data >> 8) & 0xff; buf[6] = (data >> 16) & 0xff; buf[7] = (data >> 24) & 0xff; + uint8_t cmd_copy[8]; + memcpy(cmd_copy, buf, 8); do { + memcpy(buf, cmd_copy, 8); dbg_dap_cmd(buf, sizeof(buf), 8); if (buf[1] < DAP_TRANSFER_WAIT) break;