Avr studio, atmega32 - neodhalitelný problém ?
Jan Waclawek
konfera@efton.sk
Úterý Duben 14 15:15:58 CEST 2009
AVR je pomerne kanonicky RISC s load-store architekturou, t.j. na operaciu s pamatou (do coho sa rata aj IO) je potrebne premennu natiahnut do registrov, vykonat aritmeticko-logicku operaciu na registri, a potom ulozit spat. Toto je pochopitelne samo osebe neatomicke z principu, kompilator s tym nema nic spolocne.
Pre cast IO priestoru existuje vynimka v tvare nastavenia/nulovania jednotlivych bitov, ako to bolo aj uvedene.
wek
----- Original Message ---------------
>> 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.
Další informace o konferenci Hw-list