From e8a01a345b5d06e78b7b9426cc065c02d963bc82 Mon Sep 17 00:00:00 2001 From: TheSlowGrowth <9356320+TheSlowGrowth@users.noreply.github.com> Date: Thu, 9 Oct 2025 01:49:38 +0200 Subject: [PATCH] Add missing volatile to status flags in sd_diskio.c To prevent the while loops from being optimized into very long loops that always wait for the timeout. --- CHANGELOG.md | 4 ++++ src/util/sd_diskio.c | 4 ++-- 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 3db11ee84..4511c597e 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,6 +2,10 @@ ## Unreleased +### Bug Fixes + +- SDMMC: fix an issue where status flags were optimized out, resulting in very long while loops + ## v8.0.0 ### Features diff --git a/src/util/sd_diskio.c b/src/util/sd_diskio.c index e8310bd20..ff62b2bb6 100644 --- a/src/util/sd_diskio.c +++ b/src/util/sd_diskio.c @@ -57,8 +57,8 @@ /* Disk status */ static volatile DSTATUS Stat = STA_NOINIT; //static volatile UINT WriteStatus = 0, ReadStatus = 0; -static uint32_t WriteStatus = 0; -static uint32_t ReadStatus = 0; +static volatile uint32_t WriteStatus = 0; +static volatile uint32_t ReadStatus = 0; /* Private function prototypes -----------------------------------------------*/ static DSTATUS SD_CheckStatus(BYTE lun); DSTATUS SD_initialize(BYTE);