From cc54ca7ca89c08e064d87656d4fdb1083140e645 Mon Sep 17 00:00:00 2001 From: Steins7 Date: Sun, 24 Sep 2023 21:59:29 +0200 Subject: [PATCH] Improve mbuf fix Byte index is now stored on 2 bytes. Macros have been made cleaner --- drv/dma_mbuf.c | 7 +++++-- drv/dma_mbuf.h | 3 ++- 2 files changed, 7 insertions(+), 3 deletions(-) diff --git a/drv/dma_mbuf.c b/drv/dma_mbuf.c index dd7a3cc..8d10b27 100644 --- a/drv/dma_mbuf.c +++ b/drv/dma_mbuf.c @@ -18,8 +18,11 @@ static void mbuf_callback(enum DmaIRQSource src, volatile void* param); -#define byte_index (((uint8_t**)buffer->buffers)[buffer->buffer_index][buffer->buffer_size + 1]) -#define dma_byte_index (((uint8_t**)buffer->buffers)[buffer->dma_buffer_index][buffer->buffer_size + 1]) +//take last 2 bytes of a buffer and assemble them store the current byte index +#define byte_index (((uint16_t**)buffer->buffers) \ + [buffer->buffer_index][buffer->buffer_size/2]) +#define dma_byte_index (((uint16_t**)buffer->buffers) \ + [buffer->dma_buffer_index][buffer->buffer_size/2]) //--local variables------------------------------------------------------------- diff --git a/drv/dma_mbuf.h b/drv/dma_mbuf.h index f26a6d4..4ab6952 100644 --- a/drv/dma_mbuf.h +++ b/drv/dma_mbuf.h @@ -43,7 +43,8 @@ struct DmaMultiBuffer { * Configure a DMA multibuffer for a single DMA channel. A list of buffers is * used to allow concurent write and DMA tranfers to the specified destination * wich must be a peripheral. The DMA's priority is also given as parameters. - * The peripheral's specific configuration must be handled separately. + * The peripheral's specific configuration must be handled separately. 2 bytes + * are reserved in each buffer for index storage. * * This system needs to be started manually: dma_mbuf_refresh() should be called * whenever a DMA transfer can be started. This can be done manually after