Проблема с Си кодом.
До этого писал все программы на Асемблере. Решил написать программу на Си. Написал - не работает. Начал разбираться и понял, что компилириет не правильно, неу или не так как мне надо (как я думал). Помогите разобраться, что я делаю не так.
В низу приведен код который компилируется не так (пример).
/////////////////////////////////////////////////////////////////////////////
Текст программы (С-код):
#include <avr/io.h>
int main(void)
{
int q, w, e;
while(1)
{
e=1;
do
{
q=q+1;
w=q+1;
e=w-e;
} while (q<50);
e=2;
do
{
q=q+1;
w=q+1;
e=w-e;
} while (w<150);
//TODO:: Please write your application code
}
}
//////////////////////////////////////////////////////////////
Lss файл:
000001f4 <__ctors_end>:
1f4: 11 24 eor r1, r1
1f6: 1f be out 0x3f, r1 ; 63
1f8: cf ef ldi r28, 0xFF ; 255
1fa: df e3 ldi r29, 0x3F ; 63
1fc: de bf out 0x3e, r29 ; 62
1fe: cd bf out 0x3d, r28 ; 61
200: 00 e0 ldi r16, 0x00 ; 0
202: 0c bf out 0x3c, r16 ; 60
204: 18 be out 0x38, r1 ; 56
206: 19 be out 0x39, r1 ; 57
208: 1a be out 0x3a, r1 ; 58
20a: 1b be out 0x3b, r1 ; 59
20c: 02 d0 rcall .+4 ; 0x212 <main>
20e: 0f c0 rjmp .+30 ; 0x22e <_exit>
00000210 <__bad_interrupt>:
210: f7 ce rjmp .-530 ; 0x0 <__vectors>
00000212 <main>:
e=1;
do
{
q=q+1;
212: 01 96 adiw r24, 0x01 ; 1
w=q+1;
e=w-e;
} while (q<50);
214: 82 33 cpi r24, 0x32 ; 50
216: 91 05 cpc r25, r1
218: e4 f3 brlt .-8 ; 0x212 <main>
*/
#include <avr/io.h>
int main(void)
21a: 9c 01 movw r18, r24
21c: 2f 5f subi r18, 0xFF ; 255
21e: 3f 4f sbci r19, 0xFF ; 255
e=2;
do
{
q=q+1;
220: c9 01 movw r24, r18
222: 2f 5f subi r18, 0xFF ; 255
224: 3f 4f sbci r19, 0xFF ; 255
w=q+1;
e=w-e;
} while (w<150);
226: 26 39 cpi r18, 0x96 ; 150
228: 31 05 cpc r19, r1
22a: d4 f3 brlt .-12 ; 0x220 <main+0xe>
22c: f2 cf rjmp .-28 ; 0x212 <main>
0000022e <_exit>:
22e: f8 94 cli
00000230 <__stop_program>:
230: ff cf rjmp .-2 ; 0x230 <__stop_program>
////////////////////////////////////////////////////////////////////////////////////////////
Вообще если вставить в программу цикл while, то начинает компилировать не правильно.
В чем проблема.