From 0bafc5efd11df5456f1b19a6f44799d481bc0c17 Mon Sep 17 00:00:00 2001 From: scbj Date: Fri, 7 Aug 2026 14:37:23 +0200 Subject: [PATCH] (c) queue implementation testing --- clang/Makefile | 1 + clang/src/main.c | 73 ++++++++++++++++++++++++++++++++++++++++-------- 2 files changed, 63 insertions(+), 11 deletions(-) diff --git a/clang/Makefile b/clang/Makefile index a4c9e74..7b08dd2 100644 --- a/clang/Makefile +++ b/clang/Makefile @@ -37,6 +37,7 @@ C_FLAGS := $(C_DEF) \ -Wfloat-equal \ -Wlogical-op \ -Wno-maybe-uninitialized \ + -Wno-unused \ -Werror BINARY := $(BIN_DIR)/$(NAME) diff --git a/clang/src/main.c b/clang/src/main.c index 38ff00d..8a9213e 100644 --- a/clang/src/main.c +++ b/clang/src/main.c @@ -3,22 +3,73 @@ #include #include -#define ARRAY_SIZE ( ( int ) 16 ) +#define QUEUE_SIZE ( ( uint32_t ) 4u ) +#define QUEUE_EMPTY_VALUE ( ( uint32_t ) 0u ) + +typedef struct { + uint32_t head; + uint32_t tail; + uint32_t queue_data[ QUEUE_SIZE ]; +} queue_t; + +static void queue_initialise( queue_t *queue ); +static int queue_enqueue( queue_t *queue, uint32_t message ); +static int queue_dequeue( queue_t *queue, uint32_t* message ); int main(void) { - char string[256]; - char blargh[] = "hello.world"; - char* temp; - size_t len; + queue_t queue; + queue_initialise( &queue ); - temp = strrchr( blargh, '.' ); - len = strlen( temp ); + for ( int n = 0; n < ( int )QUEUE_SIZE + 1; n++ ) + { + if ( queue_enqueue( &queue, ( uint32_t )n ) ) + { + printf( "failed to queue message: 0x%4x\n", n ); + } + else + { + printf( "successfully queued message: 0x%4x\n", n ); + } + } + return 0; +} - printf( "temp[ %ld ] = %s\n", len, &temp[ 1 ] ); +void queue_initialise( queue_t *queue ) +{ + queue->head = 0; + queue->tail = 0; +} - strncpy( &string[ 0 ], &temp[ 1 ], len - 1 ); - strncpy( &string[ len - 1 ], blargh, ( size_t )( temp - blargh ) ); +int queue_enqueue( queue_t *queue, uint32_t message ) +{ + if ( !queue ) return -1; - printf( "string = %s\n", string ); + if ( ( queue->head + 1 ) % QUEUE_SIZE == queue->tail ) + { + // queue full + return -1; + } + + queue->queue_data[ queue->head ] = message; + queue->head = ( queue->head + 1 ) % QUEUE_SIZE; + + return 0; +} + +int queue_dequeue( queue_t *queue, uint32_t* message ) +{ + if ( !queue ) return -1; + if ( !message ) return -1; + + if ( queue->head == queue->tail ) + { + // queue empty + return -1; + } + + *message = queue->queue_data[ queue->tail ]; + queue->tail = ( queue->tail + 1 ) % QUEUE_SIZE; + + return 0; }