void sys_startup_init(BOOL8 shutdown) { // // Check for operating mode // if (!shutdown) { // setup MMU shutdown = (*isys_startup_mmu_init)(shutdown); .... } // Shutdown if mode is not normal .... } The sys_startup_init function is entered from assembly code. The code shutdown = (*isys_startup_mmu_init)(shutdown); function pointer is where the code execution is incorrect. Changing the function to : void sys_startup_mmu_init(void) results in the correct code being executed. However is not possible to change all the indirect function calls in this manner, so this is not a feasible solution. C compiler version: 7.07h
I did not say it would not work, it does. by 2 floats and an int requires reentrant (far as I know). The origional programmer did not ask do I need to do this. You can not write for the 51' like "memory is cheap". reentrant do not get overlaid. In my case I have several things done it the program that make it bigger and slower. And none where required. It was done like it was a PC. I just wanted to point out the poster that he may want be sure he needs to use function pointers
"2 floats and an int requires reentrant" No, it doesn't. The following (admittedly trivial) function compiles OK without any need for reentrant:
void func( float f1, float f2, float f3, float f4, int i) { volatile int local_int; volatile int local_float; local_float = f1; local_float = f2; local_float = f3; local_float = f4; local_int = i; }
Thanks I will keep it in mind. But, in my case 8 of 10 the function calls were set at the begining and do not change. I assume they were for future flexibility that was never needed.