From 701609ed51b8370038c8205b1e153d2cd0fa6966 Mon Sep 17 00:00:00 2001 From: BOND12 <56501627+BOND12@users.noreply.github.com> Date: Tue, 17 Jan 2023 21:56:16 +0300 Subject: [PATCH 1/2] Fixed an error where the address of the next read was not shifted when reading data from the buffer --- include/RingBuffer.h | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/include/RingBuffer.h b/include/RingBuffer.h index fa4d33c..d69b2d9 100644 --- a/include/RingBuffer.h +++ b/include/RingBuffer.h @@ -160,6 +160,8 @@ class RingBuffer block.SetLength(max_num_reads); } + read_position = (read_position + num_reads_requested) % LENGTH; + return block; } @@ -227,4 +229,4 @@ class RingBuffer bool overrun_flag; }; -#endif \ No newline at end of file +#endif From 8c4520a0b84a15867bebc0359e47485ad8d577aa Mon Sep 17 00:00:00 2001 From: BOND12 <56501627+BOND12@users.noreply.github.com> Date: Tue, 17 Jan 2023 22:08:19 +0300 Subject: [PATCH 2/2] Fixed a skip operation error If the skip method has to skip positions for reading more than written to the buffer, the buffer operation breaks, because read_position becomes larger than write_position. --- include/RingBuffer.h | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/include/RingBuffer.h b/include/RingBuffer.h index d69b2d9..9300aeb 100644 --- a/include/RingBuffer.h +++ b/include/RingBuffer.h @@ -171,7 +171,11 @@ class RingBuffer */ void Skip(unsigned int num_reads) { - read_position = (read_position + num_reads) % LENGTH; + if ((read_position + num_reads) % LENGTH <= write_position){ + read_position = (read_position + num_reads) % LENGTH; + }else{ + read_position = write_position; + } } bool Overrun()