1 open project HELLO 2 insert int e,b,c; after main 3 in project devce select extended linker 4 translate 5 debug and see that variable e ????? what is it? is it new version?
If you assign a value to a variable and never use the variable anywhere else, what should the compiler do? Should it optimize this out or not? If you don't want the compiler to optimize out useless code, set the optimizer level to 0. Then, you will be happy. Of course, the code generated will be unoptimized. Jon
If you assign a value to a variable and never use the variable anywhere else, what should the compiler do? Should it optimize this out or not? To answer the rhetorical question: Depends on whether the variable is declared volatile or not. If it's volatile, then there are perhaps side effects from the write -- say if it's a hardware register -- and you need to keep the assignment. If not, optimize away. So, if you're bent on keeping the variable e in the program, make sure to do something with it. Printf() it. Use it as a loop counter. Something, just to give it a reason to exist. Or just declare it volatile.
special for you insert e=0; e=e=10; and write e you will have same effect æ-)))
sorry e=e+10;
special for you e=0; /*------------------------------------------------ Note that an embedded program never exits (because there is no operating system to return to). It must loop and execute forever. ------------------------------------------------*/ while (1) { P1 ^= 0x01; /* Toggle P1.0 each time we print */ printf ("Hello World %i \n",e); /* Print "Hello World" */ e=e+10; P0 =e; }
Yes! It's true. I just now repeat this experiment and see: if I select extended linker LX51 then I don't see value of variable 'e', ever I use this variable in my program. When I change C51 Optimizing Level to 7 (Extended Index Access Optimizing) - voila! I see variable in debugger! Great! But if optimizing level more than 7 or Emphasis no 'Favor Speed' or I check box 'Linker Code Packing' - this bug return. What is it?
"But if optimizing level more than 7 or Emphasis no 'Favor Speed' or I check box 'Linker Code Packing' - this bug return." Have you actually tried reading any of the answers to your original post? You have just demonstrated in agreement with those answers that you are NOT seeing a bug - you are seeing expected behaviour.
Stefan wrote:"Have you actually tried reading any of the answers to your original post?" Yes, I read carefully original post and ALL answers. Excuse me for my bad English. But you don't see what exactly happens. I have very little main function:
main() { int e; while(1) { e++; } }
Well I'm sorry, but I read "ever I use this variable in my program" as "never I use this variable in my program". It works fine on v7.01. Stefan
few words about magic select EXTENDED LINKER all began in 702 - if you have no this select the longest linear program didnt translate - in 704 ver is ok - but variable dont show- in 705 ok - and now 706 repeat all bugs - I think is programm eror which swimming in progam - and dificult for programmer which dont work whith IDE
I think is programm =I think It is ....
This problem has been corrected. Refer to the following knowledgebase for the fix: http://www.keil.com/support/docs/2592.htm Jon
3 days discussion - it isnot ;-) and fix bug ;-)
wow - remove one bug but add two soft bugs ;-( after patch I see FIRST When i switch number base from HEX to DECIMAL for variable e i see ok but if execute printf ("Hello World %i \n",e); after it number base switch again to HEX - it isnt good Second problem only soft problem when i translate program and switch to debug first time all ok after it switch to translate and switch to debug again i see what function debug not active but if i go to function(step and so on) debug mouse - function will be select and active and all work ok but again it isnt good