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
"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.