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