Files

55 lines
1.6 KiB
C

#ifndef TASK01_NOTIFICATIONS_H
#define TASK01_NOTIFICATIONS_H
#include <stdint.h>
#include "FreeRTOS.h"
#include "task.h"
#include "task01_notifications_model.h"
#define FC10_BITS_A 0x04U
#define FC10_BITS_B 0x20U
#define FC10_BITS_ALL ( FC10_BITS_A | FC10_BITS_B )
#define FC10_TASK_STACK_WORDS 256U
#define FC10_SENDER_PRIORITY 3U
#define FC10_RECEIVER_PRIORITY 2U
#define FC10_VERIFIER_PRIORITY 0U
#define FC10_TIMEOUT_TICKS 20U
#define FC10_EVENT_CAPACITY 14U
typedef struct NotificationExperiment
{
TaskHandle_t sender_handle;
TaskHandle_t receiver_handle;
TaskHandle_t verifier_handle;
eTaskState receiver_state_before_count;
eTaskState receiver_state_before_overwrite;
eTaskState receiver_state_before_bits;
uint32_t count_result;
uint32_t overwrite_result;
uint32_t bits_result;
uint32_t clear_after_count;
uint32_t clear_after_overwrite;
uint32_t clear_after_bits;
volatile uint32_t receiver_phase;
uintptr_t sender_sp;
uintptr_t receiver_sp;
uint32_t sender_done;
uint32_t receiver_done;
uint32_t pass;
uint32_t evidence_digest;
} NotificationExperiment;
extern NotificationExperiment g_fc10;
extern NotificationEvidence g_fc10_events[ FC10_EVENT_CAPACITY ];
extern volatile uint32_t g_fc10_event_count;
extern volatile uint32_t g_fc10_last_checkpoint;
extern volatile uint32_t g_fc10_pass;
void fc10_checkpoint_committed( uint32_t point, const void * subject );
void fc10_sender_entry( void * context );
void fc10_receiver_entry( void * context );
void fc10_verifier_entry( void * context );
#endif