Hi there :-) Im building on a project with the STM32. So using the GCC V 4.3.0 (WinARM_20080331_testing) I got into the following problem: the usual while( a <50){ ++a; } works just fine! Then one time I used : { ++a; }while( a<50 ); of course with much more useful contend, than just incrementing a :-) The result was: it didn't work. But wait: I debugged it with Insight/OOCD and it went like this: # entered loop # executed statements (like ++a;) (checked with memory watch) # checked condition (which was true, thus not quitting loop) # DID NOT EXECUTE LOOP AGAIN ???? I did some research and found out, that the jump-mark, to which he should jump on re-doing the loop was not the beginning of the loop but the end, thus executing while for infinity (because the condition was always true). I thought "OK may be there was something wrong with my setup" so I tried this: made 'test.c' with the following contend (and really nothing else): ------------------------------------------------------------------- int main(){ int b=4; { ++b; }while( b<100); return b; } ------------------------------------------------------------------- below you will find the disambling done with insight. You can see that the jump-mark ('<main+20>')is pointing to the beginning of 'while' not the beginning of the loop. The cmd to compile was the following: 'arm-eabi-gcc-4.3.0 -mthumb -mcpu=cortex-m3 -g -c test.c -o test.o' ------------------------------------------------------------------- 4 int main(){ - 0x0 <main>: push {r7} - 0x2 <main+2>: sub sp, #12 - 0x4 <main+4>: add r7, sp, #0 5 int b=4; - 0x6 <main+6>: mov.w r3, #4 ; 0x4 - 0xa <main+10>: str r3, [r7, #4] 6 7 { 8 ++b; - 0xc <main+12>: ldr r3, [r7, #4] - 0xe <main+14>: add.w r3, r3, #1 ; 0x1 - 0x12 <main+18>: str r3, [r7, #4] 9 }while( b<100); - 0x14 <main+20>: ldr r3, [r7, #4] - 0x16 <main+22>: cmp r3, #99 - 0x18 <main+24>: ble.n 0x14 <main+20> 10 11 return b; - 0x1a <main+26>: ldr r3, [r7, #4] - 0x1c <main+28>: mov r0, r3 - 0x1e <main+30>: add.w r7, r7, #12 ; 0xc - 0x22 <main+34>: mov sp, r7 - 0x24 <main+36>: pop {r7} - 0x26 <main+38>: bx lr ------------------------------------------------------------------- Is this a bug in GCC (I searched the bug list but couldn't find anything). I cannot imagine that nobody found that before ??? Btw. the sourcery g++ version of GCC did exactly the same. HELP :-)
> made 'test.c' with the following contend (and really nothing else): > ------------------------------------------------------------------- > int main(){ > int b=4; > { > ++b; > }while( b<100); > return b; > } Hi, I'm no expert but I think the syntax for the loop is missing the 'do'. Maybe you could try a do/while instead. do{ ++b; }while( b<100);
Lain Iwakura wrote: > Is this a bug in GCC (I searched the bug list but couldn't find > anything). I cannot imagine that nobody found that before ??? > Btw. the sourcery g++ version of GCC did exactly the same. > > HELP :-) I think you are missing the "do" part of the while statement. It should be: int b=4; do { ++b; }while( b<100); regards, Giovanni --- ChibiOS/RT http://chibios.sourceforge.net/
Cool, yea right, (see that is what gets u 2 days of Stuck-In-The-Lab work) lol.... thaks you both
Please log in before posting. Registration is free and takes only a minute.
Existing account
Do you have a Google/GoogleMail account? No registration required!
Log in with Google account
Log in with Google account
No account? Register here.