|
Nexus Embedded Platform 1.0.0
Statically assembled reusable embedded mechanisms
|
Per-object static FreeRTOS storage and optional thin services. More...
#include "FreeRTOS.h"#include "nexus/core/time.h"#include "nexus/os/wait.h"#include "queue.h"#include "semphr.h"#include "task.h"Go to the source code of this file.
Data Structures | |
| struct | nx_freertos_notify_t |
| Static binary latch; one waiter, independently quiesced publishers. More... | |
| struct | nx_freertos_task_t |
| Task has its own TCB; stack is supplied with its actual word count. More... | |
| struct | nx_freertos_queue_t |
| Queue control only; actual depth/item byte storage is external. More... | |
| struct | nx_freertos_direct_notify_t |
| Fixed receiver and exclusive kernel notification slot; no latch. More... | |
| struct | nx_freertos_permanent_task_t |
| Permanent task control without a join completion semaphore. More... | |
| struct | nx_freertos_queue_waiter |
| Caller-owned single-operation latch for a closable queue. More... | |
| struct | nx_freertos_closable_queue_t |
| Opt-in close broadcasts; raw queue storage remains unchanged. More... | |
Typedefs | |
| typedef struct nx_freertos_queue_waiter | nx_freertos_queue_waiter_t |
| Caller-owned single-operation latch for a closable queue. | |
Functions | |
| bool | nx_freertos_isr_allowed (void) |
| Test whether the current context may call kernel ISR APIs. | |
| nx_result_t | nx_freertos_notify_init (nx_freertos_notify_t *notification) |
| Initialize unused notification storage. | |
| nx_wait_port_t | nx_freertos_notify_port (nx_freertos_notify_t *notification) |
| Bind a latched single-waiter notification. | |
| nx_result_t | nx_freertos_notify_destroy (nx_freertos_notify_t *notification) |
| Destroy after publishers and waiter have stopped and joined. | |
| nx_result_t | nx_freertos_task_start (nx_freertos_task_t *task, const char *name, StackType_t *stack, size_t stack_words, UBaseType_t priority, void(*entry)(void *), void *context) |
| Create one task from its exact caller-owned stack and TCB. | |
| nx_result_t | nx_freertos_task_discard_before_scheduler (nx_freertos_task_t *task) |
| Discard one created task before its wrapper has executed. | |
| nx_result_t | nx_freertos_task_join (nx_freertos_task_t *task, nx_time_us_t deadline) |
| Join a cooperatively returned task and reclaim kernel state. | |
| nx_result_t | nx_freertos_queue_init (nx_freertos_queue_t *queue, uint8_t *storage, size_t storage_bytes, size_t depth, size_t item_size) |
| Create an exact-sized static byte-copy queue. | |
| nx_result_t | nx_freertos_queue_send (nx_freertos_queue_t *queue, const void *item, TickType_t wait_ticks) |
| Copy an item with a bounded relative kernel wait. | |
| nx_result_t | nx_freertos_queue_receive (nx_freertos_queue_t *queue, void *item, TickType_t wait_ticks) |
| Receive one byte-copy item. | |
| nx_result_t | nx_freertos_queue_destroy (nx_freertos_queue_t *queue) |
| Destroy after admission is stopped and all users joined. | |
| nx_result_t | nx_freertos_queue_send_until (nx_freertos_queue_t *queue, const void *item, nx_time_us_t deadline) |
| Send using one absolute monotonic deadline. | |
| nx_result_t | nx_freertos_queue_receive_until (nx_freertos_queue_t *queue, void *item, nx_time_us_t deadline) |
| Receive using one absolute monotonic deadline. | |
| nx_result_t | nx_freertos_direct_notify_init (nx_freertos_direct_notify_t *notification, TaskHandle_t receiver, UBaseType_t index) |
| Bind an exclusive slot of one live receiver task. | |
| nx_wait_port_t | nx_freertos_direct_notify_port (nx_freertos_direct_notify_t *notification) |
| Get a direct notification wait port. | |
| nx_result_t | nx_freertos_direct_notify_destroy (nx_freertos_direct_notify_t *notification) |
| Unbind after all publishers stop and join. | |
| nx_result_t | nx_freertos_permanent_task_start (nx_freertos_permanent_task_t *task, const char *name, StackType_t *stack, size_t stack_words, UBaseType_t priority, void(*entry)(void *), void *context) |
| Start a task whose entry must never return. | |
| nx_result_t | nx_freertos_queue_waiter_init (nx_freertos_queue_waiter_t *waiter) |
| Initialize one exact caller-owned queue waiter. | |
| nx_result_t | nx_freertos_queue_waiter_destroy (nx_freertos_queue_waiter_t *waiter) |
| Destroy only after all operations stop and join. | |
| nx_result_t | nx_freertos_closable_queue_init (nx_freertos_closable_queue_t *queue, uint8_t *storage, size_t storage_bytes, size_t depth, size_t item_size, size_t maximum_waiters) |
| Initialize an optional reliably closable byte-copy queue. | |
| nx_result_t | nx_freertos_closable_queue_send_until (nx_freertos_closable_queue_t *queue, const void *item, nx_time_us_t deadline, nx_freertos_queue_waiter_t *waiter) |
| Send with close-aware admission and absolute deadline. | |
| nx_result_t | nx_freertos_closable_queue_receive_until (nx_freertos_closable_queue_t *queue, void *item, nx_time_us_t deadline, nx_freertos_queue_waiter_t *waiter) |
| Receive existing items after close, then CANCELLED. | |
| nx_result_t | nx_freertos_closable_queue_close (nx_freertos_closable_queue_t *queue) |
| Stop sends and wake every currently registered waiter. | |
| nx_result_t | nx_freertos_closable_queue_destroy (nx_freertos_closable_queue_t *queue) |
| Destroy a closed, drained and quiesced queue. | |
Per-object static FreeRTOS storage and optional thin services.
Definition in file freertos.h.
| typedef struct nx_freertos_queue_waiter nx_freertos_queue_waiter_t |
Caller-owned single-operation latch for a closable queue.
| nx_result_t nx_freertos_closable_queue_close | ( | nx_freertos_closable_queue_t * | queue | ) |
Stop sends and wake every currently registered waiter.
| [in,out] | queue | Live queue |
| nx_result_t nx_freertos_closable_queue_destroy | ( | nx_freertos_closable_queue_t * | queue | ) |
Destroy a closed, drained and quiesced queue.
| [in,out] | queue | Live queue without future entrants |
| nx_result_t nx_freertos_closable_queue_init | ( | nx_freertos_closable_queue_t * | queue, |
| uint8_t * | storage, | ||
| size_t | storage_bytes, | ||
| size_t | depth, | ||
| size_t | item_size, | ||
| size_t | maximum_waiters ) |
Initialize an optional reliably closable byte-copy queue.
| [out] | queue | Zeroed control kept until destroy |
| [in] | storage | Payload buffer kept until destroy |
| [in] | storage_bytes | Actual payload capacity |
| [in] | depth | Positive item count |
| [in] | item_size | Positive byte-copy size |
| [in] | maximum_waiters | Explicit positive simultaneous-call budget |
| nx_result_t nx_freertos_closable_queue_receive_until | ( | nx_freertos_closable_queue_t * | queue, |
| void * | item, | ||
| nx_time_us_t | deadline, | ||
| nx_freertos_queue_waiter_t * | waiter ) |
Receive existing items after close, then CANCELLED.
| [in,out] | queue | Live closable queue |
| [out] | item | Configured bytes valid only on SUCCESS |
| [in] | deadline | nx_time_now_us domain |
| [in,out] | waiter | Exclusive initialized caller waiter |
| nx_result_t nx_freertos_closable_queue_send_until | ( | nx_freertos_closable_queue_t * | queue, |
| const void * | item, | ||
| nx_time_us_t | deadline, | ||
| nx_freertos_queue_waiter_t * | waiter ) |
Send with close-aware admission and absolute deadline.
| [in,out] | queue | Live closable queue |
| [in] | item | Bytes borrowed until return, never after timeout |
| [in] | deadline | nx_time_now_us domain, NEVER supported |
| [in,out] | waiter | Exclusive initialized caller waiter |
| nx_result_t nx_freertos_direct_notify_destroy | ( | nx_freertos_direct_notify_t * | notification | ) |
Unbind after all publishers stop and join.
| [in,out] | notification | Live storage with no future users |
| nx_result_t nx_freertos_direct_notify_init | ( | nx_freertos_direct_notify_t * | notification, |
| TaskHandle_t | receiver, | ||
| UBaseType_t | index ) |
Bind an exclusive slot of one live receiver task.
| [out] | notification | Zeroed caller storage |
| [in] | receiver | Task retained until all publishers quiesce |
| [in] | index | Exclusively owned kernel notification slot |
| nx_wait_port_t nx_freertos_direct_notify_port | ( | nx_freertos_direct_notify_t * | notification | ) |
Get a direct notification wait port.
| [in] | notification | Live explicitly bound storage |
| bool nx_freertos_isr_allowed | ( | void | ) |
Test whether the current context may call kernel ISR APIs.
| nx_result_t nx_freertos_notify_destroy | ( | nx_freertos_notify_t * | notification | ) |
Destroy after publishers and waiter have stopped and joined.
| [in,out] | notification | Live storage with no future users |
| nx_result_t nx_freertos_notify_init | ( | nx_freertos_notify_t * | notification | ) |
Initialize unused notification storage.
| [out] | notification | Caller storage, zeroed before first use |
| nx_wait_port_t nx_freertos_notify_port | ( | nx_freertos_notify_t * | notification | ) |
Bind a latched single-waiter notification.
| [in] | notification | Initialized live storage |
| nx_result_t nx_freertos_permanent_task_start | ( | nx_freertos_permanent_task_t * | task, |
| const char * | name, | ||
| StackType_t * | stack, | ||
| size_t | stack_words, | ||
| UBaseType_t | priority, | ||
| void(* | entry )(void *), | ||
| void * | context ) |
Start a task whose entry must never return.
| [out] | task | Zeroed permanent control, retained until reset |
| [in] | name | Copied kernel diagnostic name |
| [in] | stack | Aligned actual stack retained until reset |
| [in] | stack_words | Capacity includes reviewed startup minimum |
| [in] | priority | Below configMAX_PRIORITIES |
| [in] | entry | Permanent entry; return violates kernel contract |
| [in] | context | Retained until reset |
| nx_result_t nx_freertos_queue_destroy | ( | nx_freertos_queue_t * | queue | ) |
Destroy after admission is stopped and all users joined.
| [in,out] | queue | Live drained queue, no future operations |
| nx_result_t nx_freertos_queue_init | ( | nx_freertos_queue_t * | queue, |
| uint8_t * | storage, | ||
| size_t | storage_bytes, | ||
| size_t | depth, | ||
| size_t | item_size ) |
Create an exact-sized static byte-copy queue.
| [out] | queue | Zero-initialized caller queue control |
| [in] | storage | Byte buffer kept until destroy |
| [in] | storage_bytes | Actual byte capacity |
| [in] | depth | Number of items |
| [in] | item_size | Bytes copied per item |
| nx_result_t nx_freertos_queue_receive | ( | nx_freertos_queue_t * | queue, |
| void * | item, | ||
| TickType_t | wait_ticks ) |
Receive one byte-copy item.
| [in,out] | queue | Live queue |
| [out] | item | Configured item byte capacity, valid only on success |
| [in] | wait_ticks | Explicit relative wait; portMAX_DELAY prohibited |
| nx_result_t nx_freertos_queue_receive_until | ( | nx_freertos_queue_t * | queue, |
| void * | item, | ||
| nx_time_us_t | deadline ) |
Receive using one absolute monotonic deadline.
| [in,out] | queue | Live raw queue |
| [out] | item | Configured bytes valid only on SUCCESS |
| [in] | deadline | nx_time_now_us domain |
| nx_result_t nx_freertos_queue_send | ( | nx_freertos_queue_t * | queue, |
| const void * | item, | ||
| TickType_t | wait_ticks ) |
Copy an item with a bounded relative kernel wait.
| [in,out] | queue | Live queue |
| [in] | item | At least configured item bytes; not retained afterward |
| [in] | wait_ticks | Explicit relative wait; portMAX_DELAY prohibited |
| nx_result_t nx_freertos_queue_send_until | ( | nx_freertos_queue_t * | queue, |
| const void * | item, | ||
| nx_time_us_t | deadline ) |
Send using one absolute monotonic deadline.
| [in,out] | queue | Live raw queue |
| [in] | item | Configured bytes borrowed until return |
| [in] | deadline | nx_time_now_us domain, NEVER permits long waits |
| nx_result_t nx_freertos_queue_waiter_destroy | ( | nx_freertos_queue_waiter_t * | waiter | ) |
Destroy only after all operations stop and join.
| [in,out] | waiter | Live storage without future callers |
| nx_result_t nx_freertos_queue_waiter_init | ( | nx_freertos_queue_waiter_t * | waiter | ) |
Initialize one exact caller-owned queue waiter.
| [out] | waiter | Zeroed storage, one simultaneous operation maximum |
| nx_result_t nx_freertos_task_discard_before_scheduler | ( | nx_freertos_task_t * | task | ) |
Discard one created task before its wrapper has executed.
| [in,out] | task | Live caller-owned static task, unused by other callers |
| nx_result_t nx_freertos_task_join | ( | nx_freertos_task_t * | task, |
| nx_time_us_t | deadline ) |
Join a cooperatively returned task and reclaim kernel state.
| [in,out] | task | Started task, distinct from current task |
| [in] | deadline | Absolute wait deadline in nx_time_now_us domain |
| nx_result_t nx_freertos_task_start | ( | nx_freertos_task_t * | task, |
| const char * | name, | ||
| StackType_t * | stack, | ||
| size_t | stack_words, | ||
| UBaseType_t | priority, | ||
| void(* | entry )(void *), | ||
| void * | context ) |
Create one task from its exact caller-owned stack and TCB.
| [out] | task | Zero-initialized unused control storage |
| [in] | name | Kernel diagnostic name, copied by the kernel |
| [in] | stack | StackType_t array kept until successful join |
| [in] | stack_words | Actual capacity, at least the selected port startup minimum; runtime stack budget remains caller-owned |
| [in] | priority | Priority below configMAX_PRIORITIES |
| [in] | entry | Application entry, may return after cooperative stop |
| [in] | context | Entry context kept until join |