hi all, do you think i can work around function pointers as following: extern void a(void); extern void b(void); void fptr(void *fp) { if (fp == a) a(); if (fp == b) b(); } void main(void) { void *fp; fp = (void *)a; //or b fptr(fp); }
"Would this solve function pointer problem?" Possibly, but in a very wasteful way, and no more maintainable than using the Linker directives. You are effectively just using the function pointer as an index - so why not just use a plain byte index instead?
void func_caller ( unsigned char index ) { unsigned char i; for (i = 0; i < 10; i++) { switch( index ) { case 1: func1(i); break; case 2: func2(i); break; case 3: func3(i); break; // etc } } }
Function pointers is a wonderful means of achieveing certain things on processors with a suitable architecture. Here in the '51 community we often see someone trying to force the '51 to "behave". Darn it, the '51 is NOT a PC. Accept the challenges/limitations or stick with your PC. Function pointers is a nightmare in the '51 architecture, not in Keil C. Erik