Avr studio, atmega32 - neodhalitelný problém ?
Lukáš Grepl
L.Grepl@sh.cvut.cz
Úterý Duben 14 14:07:27 CEST 2009
> mel jsem jednou na ATMega162 podobny problem se ctenim z klavesnice.
> Nakonec jsem program upravil takto, misto PORTB|=0x70
>
> asm ("sbi 0x18,5\n"); // kdyz je tu misto toho PORTB|=0x70 tak to zlobi
> asm ("sbi 0x18,6\n"); // protoze sem muze tuknout preruseni a zmenit
> asm ("sbi 0x18,7\n"); // prectenou hodnotu, se zakazem preruseni je to
A to je vlastnost kompilátoru nebo platformy, že to PORTB |= 0x70
nepřeloží jako atomickou operaci?
Třeba na PICu s použitím kompilátoru PICC je dle mých zkušeností
výsledek přibližně takový:
movlw 0x70 ; nahrajeme konstantu
iorwf PORTB, f ; provedeme OR s konstantou přímo na registru
takže ke změně hodnoty portu v přerušení uprostřed toho OR dojít nemůže.
Lukáš Grepl
Další informace o konferenci Hw-list