#ifndef TASK01_QUEUE_H #define TASK01_QUEUE_H #include #include "FreeRTOS.h" #include "queue.h" #include "task.h" #include "task01_queue_model.h" #define FC05_QUEUE_LENGTH 1U #define FC05_TASK_STACK_WORDS 256U #define FC05_RECEIVER_PRIORITY 3U #define FC05_SENDER_PRIORITY 2U #define FC05_VERIFIER_PRIORITY 1U #define FC05_EVENT_CAPACITY 12U #define FC05_TIMEOUT_TICKS 20U typedef struct QueueExperiment { QueueHandle_t queue; TaskHandle_t receiver_handle; TaskHandle_t sender_handle; TaskHandle_t verifier_handle; QueueMessage received[ 3 ]; QueueMessage mutated_source; eTaskState sender_state_when_full; UBaseType_t waiting_when_full; uintptr_t receiver_sp; uintptr_t sender_sp; uint32_t receiver_done; uint32_t sender_done; uint32_t pass; uint32_t evidence_digest; } QueueExperiment; extern QueueExperiment g_fc05; extern QueueEvidence g_fc05_events[ FC05_EVENT_CAPACITY ]; extern volatile uint32_t g_fc05_event_count; extern volatile uint32_t g_fc05_last_checkpoint; extern volatile uint32_t g_fc05_pass; void fc05_checkpoint_committed( uint32_t point, const void * subject ); void fc05_receiver_entry( void * context ); void fc05_sender_entry( void * context ); void fc05_verifier_entry( void * context ); #endif