Hi all, I am using the microvision 2 and the controller is c8051f12x. I faced a strange problem with keil. Have a look at the following sample code.
void main() { f1(); f2(); f3(); } void f1() { // some code } void f2() { // some code } void f3() { // some code }
at high optimisation levels like this, the actual code execution path can bear very little resemblance to the path in the source code! I agree with this and I have also seen this. But Keil ensures that the optimisation of code never collapse the flow of control. When I started working with keil, first I was confused with the flow of control when using the high optimisation level. Then I worked with various optimisation level and understood the behaviour of keil. But it does not semms to be a prob with optimisation levels. But anyway thankyou and I'll test it with lower optimisation levels. Are you sure that the code is actually executing incorrectly? It could be just the debugger that's getting confused... yes I am sure. the code is running incorrectly. I verified this problem with debugging using EC2 and putting some test messages and viewing it thro hyper terminal.
"I'll test it with lower optimisation levels." If it works on lower optimisations, you have one of two problems: (1). Your code relies upon something that it shouldn't, but that happens not to matter at low optimisation (ie, your code works by luck); (2). You have found a situation that confuses the optimiser. If you suspect (2), you should start by examining the compiler's generated assembler and the disassembly generated by the Linker in its .COD file.