J'essaie de lire un pointeur de fonction à partir d'une structure stockée dans PROGMEM, puis de passer une valeur (entrée) à la fonction correspondante et d'enregistrer la valeur renvoyée, mais je ne peux pas trouver la syntaxe correcte.Utilisation de Function Pointer de struct dans PROGMEM in C sur Arduino
uint8_t (*pStateFunc) (uint8_t);
uint8_t input;
uint8_t nextstate;
enum MENUSTATES {STATE1, STATE2};
typedef struct PROGMEM {
unsigned char state;
uint16_t someNumber; // Just arbitrary information
uint8_t (*pFunc) (uint8_t input);
} MENU_STATE;
const MENU_STATE menu_state[] PROGMEM = {
// state someNumber pFunc
{STATE1, 2, NULL},
{STATE2, 4, doSomething},
{0, 0, NULL}
};
// Get the Function
pStateFunc = (PGM_VOID_P) pgm_read_byte(&menu_state[1].pFunc);
// Execute the Function and save the returned state
nextstate = pStateFunc(input);
// Function Definition
uint8_t doSomething(u8int_t input){
return STATE1;
}
Tout ce que je reçois est l'erreur suivante de l'Arduino IDE 1.6.5:
invalid conversion from 'const void*' to 'uint8_t (*)(uint8_t) {aka unsigned char (*)(unsigned char)}' [-fpermissive]
Comment puis-je lire la fonction de PROGMEM et l'exécuter correctement?
Quel est ce 'pStateFunc = (PGM_VOID_P) pgm_read_byte (& menu_state [1] .pFunc)' censé faire? – alk
L'initialiseur de 'menu_state []' semble manquer une accolade fermante ('}'). – alk
Il doit lire le pointeur 'doSomething' dans le progmem' menu_state'struct. J'ai ajouté l'accolade manquante ... désolé j'ai oublié ça avant. –