Реализация конечного автомата для чтения-записи данных во флэш-памяти данных - PullRequest
0 голосов
/ 20 сентября 2019

Я пытаюсь реализовать конечный автомат для чтения и записи данных на флэш-память размером 128K x 8.Я планирую иметь следующие состояния в конечном автомате: -

typedef enum DATA_FLASH_TASK_LIST
{
IDLE = 0;
INIT,
READ,
WRITE,
VERIFY
}

Функция конечного автомата будет выглядеть следующим образом: -

// dataflash.c file

// Глобальная переменная для отслеживания задач флэш-данных

DATA_FLASH_TASK_LIST Current_DataFlash_Task = IDLE;

void DataFlashStateMachine()
{
switch(Current_DataFlash_Task)
{
case IDLE:
{
//Wait for other tasks
Current_DataFlash_Task = IDLE;
}
break;

case INIT:
{
//Erase and initialize the data flash
Current_DataFlash_Task = IDLE;
}
break;

case READ:
{
//Call a function to read contents of data flash
//Address and length of data will be updated in global variables
//Read_Data(data, address, length);
Current_DataFlash_Task = VERIFY;
}
break;

case WRITE:
{
//Call a function to write contents to data flash
//Write_Data(data, address, length);
Current_DataFlash_Task = VERIFY;
}
break;

case VERIFY:
{
//Call a function to compare and verify the read/write data
Current_DataFlash_Task = IDLE
}
break;
}


//Function to check current data flash task
DATA_FLASH_TASK_LIST GetCurrentTask()
{
return Current_DataFlash_Task;
}


//Function to set new data flash task
void SetCurrentTask(DATA_FLASH_TASK_LIST New_DataFlash_Task)
{
Current_DataFlash_Task = New_DataFlash_Task;
}

// файл main.c

int address;
int length;
unsigned char *data;
int main()
{
.
.
.
.
.
while(1)
{
//Continously poll the data flash state machine
DataFlashStateMachine();
}
}

// файл handle_events.c

void handle_events()
{
//Write data
ifGetCurrentTask() == IDLE)
address = 0x8000;
data_length = 500;
SetCurrentTask(WRITE);


//Read data
ifGetCurrentTask() == IDLE)
address = 0x8000;
data_length = 500;
SetCurrentTask(READ);
}

Мне нужна помощь по следующим вопросам:

  1. В hanlde_events (), как узнать, завершены ли операции чтения и записи?Должен ли я реализовать глобальные флаги, которые возвращают SUCCESS / FAILURE из функции DataFlashStateMachine ()?Если да, как мне обработать эти флаги?

  2. Есть ли лучший способ обработки этих операций?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...