So was?
func wird gecastet auf eine void func(uint8_t) und aufgerufen mit Argument
uint8_t arg:
func ist ein Funktionszeiger:Code:((void(*)(uint8_t)) func) (arg);
func ist ein Array von 4 Funktionszeigern:Code:void (*func)(uint8_t);
foo ruft func auf:Code:void (*func[4])(uint8_t); //oder typedef void (*func_t)(uint8_t); func_t func[4];
Code:void foo (void (*func)(uint8_t), uint8_t arg) { func (arg); }Code:typedef struct { // job-Funktion, Prototyp void foo(void) oder void foo (uint8_t) void* job; uint8_t arg; } job_t; #define NUM_JOBS 7 static const job_t jobs[NUM_JOBS] PROGMEM = { {job_foo, CONST_0}, ... }; // dispatcher uint8_t num; ... uint16_t job = pgm_read_word (& jobs[num].job); uint16_t arg = pgm_read_byte (& jobs[num].arg); ((void(*)(uint8_t)) job) (arg); ...





Zitieren

Lesezeichen