Re: Arduino generování pulzů
Richard Kaličiak
hw.kaliciak na fn.de
Úterý Srpen 1 10:53:28 CEST 2023
Dobry den,
tu je priklad, ako sa to riesi v avr-gcc:
...
#include <util/atomic.h>
...
volatile uint16_t key_press; // key press detect
...
uint16_t get_key_press( uint16_t key_mask )
{
ATOMIC_BLOCK(ATOMIC_RESTORESTATE){ // read and clear
atomic !
key_mask &= key_press; // read key(s)
key_press ^= key_mask; // clear key(s)
}
return key_mask;
}
...
R.
Dňa 01.08.2023 o 06:28 Petr Zapadlo napísal(a):
> Zdravím,
>
> to jsem neznal díky. Jak se dívám, tak digitalWritefast() je pouze sada
> maker, která rozvine zápis na GPIO na zápis přes registry případě
> konstantního argumentu čísla pinu.
>
> Tenhle syntaktický cukr je už na můj vkus příliš sladký, asi zůstanu u
> klasického přístupu - pokud to bude nekritické, tak digitalWrite, pokud
> to bude časově kritické, tak přístup přes registry (a nemíchat v jednom
> kodu).
>
> Spíše mě zaujala ta poznámka o neatomicitě zápisu v přerušení.
>
> Chápu to správně, že když se mi přerušení, které manipuluje například s
> bity 4-7 portu D trefí přesně do okamžiku kdy jsem načetl stav portu D
> pro potřeby například OR (chci nahodit bit 0, portu D), tak vlastně po
> zápisu na port v hlavní smyčce "vymažu" změnu co proběhla v přerušení?
>
> Jak se to dá řešit? ( samozřejmě kromě zakázání přerušení)
>
> Díky
>
> Petr
>
Další informace o konferenci Hw-list