Кто-нибудь может объяснить феномен. -Os
CODE
#include <avr/io.h>
int main(void);
volatile uint32_t interf;
int main(void)
{
while(PINB & 4)
{
uint32_t data=0;
for(uint8_t msk=0;msk < 24; msk++)
{
PORTB |= 0x80;
if(PINB & 0x40) data |= 1;
data <<= 1;
PORTB &= 0x7F;
}
interf = data;
}
return 0;
}
Листинг правильный - его не привожу, т.к. все тривиально
Дальше, если это сделать в таком виде
CODE
#include <avr/io.h>
int main(void);
volatile uint32_t interf;
int main(void)
{
while(PINB & 4)
{
uint32_t data;
for(uint8_t msk=0,data=0;msk < 24; msk++)
{
PORTB |= 0x80;
if(PINB & 0x40) data |= 1;
data <<= 1;
PORTB &= 0x7F;
}
interf = data;
}
return 0;
}
Листинг - конец света. Выкинул, родимый, все на корню.
CODE
int main(void)
{
44: 0f c0 rjmp .+30 ; 0x64 <main+0x20>
while(PINB & 4)
46: 80 e0 ldi r24, 0x00 ; 0
{
uint32_t data;
for(uint8_t msk=0,data=0;msk < 24; msk++)
{
PORTB |= 0x80;
48: c7 9a sbi 0x18, 7 ; 24
if(PINB & 0x40) data |= 1;
4a: 96 b3 in r25, 0x16 ; 22
data <<= 1;
PORTB &= 0x7F;
4c: c7 98 cbi 0x18, 7 ; 24
int main(void)
{
while(PINB & 4)
{
uint32_t data;
for(uint8_t msk=0,data=0;msk < 24; msk++)
4e: 8f 5f subi r24, 0xFF ; 255
50: 88 31 cpi r24, 0x18 ; 24
52: d1 f7 brne .-12 ; 0x48 <main+0x4>
PORTB |= 0x80;
if(PINB & 0x40) data |= 1;
data <<= 1;
PORTB &= 0x7F;
}
interf = data;
54: 10 92 60 00 sts 0x0060, r1
58: 10 92 61 00 sts 0x0061, r1
5c: 10 92 62 00 sts 0x0062, r1
60: 10 92 63 00 sts 0x0063, r1
#include <avr/io.h>
int main(void);
volatile uint32_t interf;
int main(void)
{
while(PINB & 4)
64: b2 99 sbic 0x16, 2 ; 22
66: ef cf rjmp .-34 ; 0x46 <main+0x2>
PORTB &= 0x7F;
}
interf = data;
}
return 0;
}
68: 80 e0 ldi r24, 0x00 ; 0
6a: 90 e0 ldi r25, 0x00 ; 0
6c: 08 95 ret
Что же такого крамольного в for(uint8_t msk=0,data=0;msk < 24; msk++) ?