From ffac5506016870175b00b0f1d40af3e25c36718c Mon Sep 17 00:00:00 2001 From: Alessio Morale Date: Sun, 7 Sep 2014 16:22:23 +0200 Subject: [PATCH] OP-1275 - Optimize fifo for single char operations --- flight/libraries/fifo_buffer.c | 54 +++++++++++++++++++++------------- 1 file changed, 33 insertions(+), 21 deletions(-) diff --git a/flight/libraries/fifo_buffer.c b/flight/libraries/fifo_buffer.c index 396ee6ec7..be04d927f 100644 --- a/flight/libraries/fifo_buffer.c +++ b/flight/libraries/fifo_buffer.c @@ -148,14 +148,18 @@ uint16_t fifoBuf_getDataPeek(t_fifo_buffer *buf, void *data, uint16_t len) uint16_t i = 0; while (num_bytes > 0) { - uint16_t j = buf_size - rd; - if (j > num_bytes) { - j = num_bytes; + uint16_t block_len = buf_size - rd; + if (block_len > num_bytes) { + block_len = num_bytes; } - memcpy(p + i, buff + rd, j); - i += j; - num_bytes -= j; - rd += j; + if (block_len == 1) { + *((uint8_t *)(p + i)) = *((uint8_t *)(buff + rd)); + } else { + memcpy(p + i, buff + rd, block_len); + } + i += block_len; + num_bytes -= block_len; + rd += block_len; if (rd >= buf_size) { rd = 0; } @@ -184,14 +188,18 @@ uint16_t fifoBuf_getData(t_fifo_buffer *buf, void *data, uint16_t len) uint16_t i = 0; while (num_bytes > 0) { - uint16_t j = buf_size - rd; - if (j > num_bytes) { - j = num_bytes; + uint16_t block_len = buf_size - rd; + if (block_len > num_bytes) { + block_len = num_bytes; } - memcpy(p + i, buff + rd, j); - i += j; - num_bytes -= j; - rd += j; + if (block_len == 1) { + *((uint8_t *)(p + i)) = *((uint8_t *)(buff + rd)); + } else { + memcpy(p + i, buff + rd, block_len); + } + i += block_len; + num_bytes -= block_len; + rd += block_len; if (rd >= buf_size) { rd = 0; } @@ -243,14 +251,18 @@ uint16_t fifoBuf_putData(t_fifo_buffer *buf, const void *data, uint16_t len) uint16_t i = 0; while (num_bytes > 0) { - uint16_t j = buf_size - wr; - if (j > num_bytes) { - j = num_bytes; + uint16_t block_len = buf_size - wr; + if (block_len > num_bytes) { + block_len = num_bytes; } - memcpy(buff + wr, p + i, j); - i += j; - num_bytes -= j; - wr += j; + if (block_len == 1) { + *((uint8_t *)(buff + wr)) = *((uint8_t *)(p + i)); + } else { + memcpy(buff + wr, p + i, block_len); + } + i += block_len; + num_bytes -= block_len; + wr += block_len; if (wr >= buf_size) { wr = 0; }