We are running a survey to help us improve the experience for all of our members. If you see the survey appear, please take the time to tell us about your experience if you can.
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); }
If I change func_caller:... Even if it works, you are still manually changing something -- the code. If you manually change the linker directives, what is the difference, really? Are you thinking that changes in the linker directives disappear and that you have to manually edit them for each build? They don't.
"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