So was?

func wird gecastet auf eine void func(uint8_t) und aufgerufen mit Argument
uint8_t arg:

Code:
((void(*)(uint8_t)) func) (arg);
func ist ein Funktionszeiger:
Code:
void (*func)(uint8_t);
func ist ein Array von 4 Funktionszeigern:
Code:
void (*func[4])(uint8_t);
//oder
typedef void (*func_t)(uint8_t);
func_t func[4];
foo ruft func auf:
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);
	...