QUEUE_LIB Embedded C library v1.0.0
Modules | Files | Data Structures | Enumerations | Functions
Queue Module

Deterministic FIFO queue for safety-critical embedded systems. More...

Collaboration diagram for Queue Module:

Modules

 Queue Internal Functions
 Internal helper functions for the queue module (not part of public API).
 

Files

file  queue.c
 Generic FIFO queue implementation for embedded safety-critical use.
 

Data Structures

struct  queue_t
 FIFO queue control structure. More...
 

Enumerations

enum  queue_status_t { QUEUE_OK = 0U , QUEUE_FULL = 1U , QUEUE_EMPTY = 2U , QUEUE_ERROR = 3U }
 Queue operation status codes. More...
 

Functions

queue_status_t queue_init (queue_t *q, void *buffer, uint16_t buffer_element_size, uint16_t queue_capacity)
 Initialize a queue instance. More...
 
queue_status_t queue_push (queue_t *q, const void *item)
 Push (enqueue) one element into the queue. More...
 
queue_status_t queue_pop (queue_t *q, void *item)
 Pop (dequeue) one element from the queue. More...
 
bool queue_is_empty (const queue_t *q)
 Check if queue is empty. More...
 
bool queue_is_full (const queue_t *q)
 Check if queue is full. More...
 

Detailed Description

Deterministic FIFO queue for safety-critical embedded systems.

This module provides a generic, deterministic, and type-agnostic FIFO queue implementation suitable for use in MISRA-C and ISO 26262 compliant projects.

See also
MISRA Compliance

MISRA Compliance

Overview

This module is developed with awareness of MISRA-C:2012 guidelines and is suitable for use in ISO 26262 safety-related applications.

The implementation avoids dynamic memory allocation, recursion, and non-deterministic library calls. All memory accesses are bounded and validated before use.

Controlled Deviations

ID Rule Description Justification
DV-QUEUE-001 MISRA-C:2012 Rule 11.4 Cast between void* and uint8_t* for raw byte copying. Controlled and justified cast, no aliasing or type reinterpretation. Enables a generic queue implementation. Tested indirectly via DV_QUEUE_001 unit tests, including NULL and edge cases.
See also
docs/compliance/MISRA_Deviations.md

Verification

Enumeration Type Documentation

◆ queue_status_t

Queue operation status codes.

Enumerator
QUEUE_OK 

Operation completed successfully.

QUEUE_FULL 

Queue full — push failed.

QUEUE_EMPTY 

Queue empty — pop failed.

QUEUE_ERROR 

General error — invalid parameters.

Function Documentation

◆ queue_init()

queue_status_t queue_init ( queue_t q,
void *  buffer,
uint16_t  buffer_element_size,
uint16_t  queue_capacity 
)

Initialize a queue instance.

Parameters
[in,out]qPointer to queue control structure.
[in]bufferPointer to caller-supplied storage buffer.
[in]buffer_element_sizeElement size in bytes (must > 0).
[in]queue_capacityNumber of elements in queue (must > 0).
Return values
QUEUE_OKInitialization succeeded.
QUEUE_ERRORInvalid arguments (NULL or 0).
Note
Deterministic and reentrant.

◆ queue_is_empty()

bool queue_is_empty ( const queue_t q)

Check if queue is empty.

Parameters
[in]qPointer to queue instance.
Returns
true — queue empty or q is NULL.
false — otherwise.

◆ queue_is_full()

bool queue_is_full ( const queue_t q)

Check if queue is full.

Parameters
[in]qPointer to queue instance.
Returns
true — queue full.
false — otherwise (including q is NULL).

◆ queue_pop()

queue_status_t queue_pop ( queue_t q,
void *  item 
)

Pop (dequeue) one element from the queue.

Parameters
[in,out]qPointer to queue instance.
[out]itemPointer to destination buffer to store element.
Return values
QUEUE_OKSuccess.
QUEUE_EMPTYQueue empty — no element available (item unchanged).
QUEUE_ERRORInvalid parameters.
Note
Deterministic; no blocking.
Here is the call graph for this function:

◆ queue_push()

queue_status_t queue_push ( queue_t q,
const void *  item 
)

Push (enqueue) one element into the queue.

Parameters
[in,out]qPointer to queue instance.
[in]itemPointer to element data to add.
Return values
QUEUE_OKSuccess.
QUEUE_FULLQueue already full.
QUEUE_ERRORInvalid parameters.
Note
Deterministic; no blocking.
Here is the call graph for this function: