(c) queue implementation testing

This commit is contained in:
scbj
2026-08-07 14:38:38 +02:00
parent 71e9ae509c
commit 0bafc5efd1
2 changed files with 63 additions and 11 deletions
+1
View File
@@ -37,6 +37,7 @@ C_FLAGS := $(C_DEF) \
-Wfloat-equal \
-Wlogical-op \
-Wno-maybe-uninitialized \
-Wno-unused \
-Werror
BINARY := $(BIN_DIR)/$(NAME)
+62 -11
View File
@@ -3,22 +3,73 @@
#include <stdio.h>
#include <string.h>
#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;
}