From 6f0009cfbbc76fd7216570bbf6115e2700083aed Mon Sep 17 00:00:00 2001 From: Hector van der Aa Date: Wed, 3 Jun 2026 19:11:50 +0200 Subject: [PATCH] Fixed critical ring buffer underflow bug --- STM32/CM7/Core/Inc/global_state.h | 2 +- STM32/CM7/Core/Src/ring_buffer.c | 4 +++- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/STM32/CM7/Core/Inc/global_state.h b/STM32/CM7/Core/Inc/global_state.h index 0840d00..d7bd3d6 100644 --- a/STM32/CM7/Core/Inc/global_state.h +++ b/STM32/CM7/Core/Inc/global_state.h @@ -7,7 +7,7 @@ #include #define MAX_CAM_MISS 2 -#define SPARK_ADVANCE 20 +#define SPARK_ADVANCE 40 #define INJECTION_PHASE 0 typedef enum { SYNC_OK = 0, SYNC_PENDING = 1, SYNC_NOT_OK = 2 } sync_state_t; diff --git a/STM32/CM7/Core/Src/ring_buffer.c b/STM32/CM7/Core/Src/ring_buffer.c index f42d79a..e8e3127 100644 --- a/STM32/CM7/Core/Src/ring_buffer.c +++ b/STM32/CM7/Core/Src/ring_buffer.c @@ -5,6 +5,7 @@ #include #include #include +#include void ringBufferPush(volatile ring_buffer_t *rb, uint32_t value) { rb->buffer[rb->w_head] = value; @@ -13,7 +14,8 @@ void ringBufferPush(volatile ring_buffer_t *rb, uint32_t value) { } uint32_t ringBufferRead(volatile ring_buffer_t *rb, uint8_t neg_idx) { - return rb->buffer[rb->w_head - 1 - neg_idx]; + uint8_t idx = (uint8_t)(rb->w_head - 1u - neg_idx); + return rb->buffer[idx]; } void ringBufferRevert(volatile ring_buffer_t *rb, uint8_t val) {