55 lines
1.6 KiB
C
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
|