У вас есть несколько проблем с вашим кодом.
Во-первых: функция типа уже является указателем на функцию, нет необходимости снова объявлять ее указателем. Это заканчивается указателем на указатель функции.
typedef struct _Task
{
uint8_t priority;
Function func; // Leave out the *
uint8_t exec_state;
}Task;
Второй Правильный способ инициализации массива будет таким.
Task task_array_test[] = {
{HIGH , &Switch_LED_RED , IDLE},
{MED , &Switch_LED_RED , IDLE},
{LOW , &Reset_LED , IDLE},
};
Нет задачи *, только задача. Пустой [] уже указывает его как массив.
Вот небольшая тестовая программа, которую я написал, чтобы доказать, что она работает.
#include <stdint.h>
#include <string.h>
#include <iostream>
#include <stdio.h>
typedef void (*Function)(void);
static int i;
#define HIGH 10
#define MED 5
#define LOW 1
#define IDLE 1
void Switch_LED_RED(void){
i++;
}
void Reset_LED(void){
i++;
}
typedef struct _Task
{
uint8_t priority;
Function func;
uint8_t exec_state;
}Task;
Task task_array_test[] = {
{HIGH , &Switch_LED_RED , IDLE},
{MED , &Switch_LED_RED , IDLE},
{LOW , &Reset_LED , IDLE},
};
int main(){
std::cout << "I starts with the value: " << i << std::endl;
while (i < 3){
task_array_test[i].func();
}
std::cout << "I has now the value: " << i << std::endl;
return 0;
}