čtení z kláves + vykonávání další operace bez přerušení

Zdravím, potřeboval bych vytvořit jeden program, ale zatím nějak furt nevím jak na to. Sice nějaké navrhy bych měl, ale nezdají se mi příliš efektivní. No jde mi o to vytvořit program v C, který bude neustále sledovat stav vstupních pinů ( sledovat stiknuté klávesy ) + periodicky ( s periodou asi 200ms) vykonávat další operaci, která bude trvat řekněme 1 ms. Šlo by toto realizovat i bez přerušení?
A ještě jsem se chtěl zeptat. Někde četl nebo slyšel, že nelze použít přerušení při použití funkce delay. Jak tedy realizovat zpozdění, když používám přerušení?

:arrow_right: administrator: přejmenováno z "čtení z kláves + vykonávání další operace"

O žádném omezení při využití delay zároveň s přerušením nevím. Jediná věc je to, že pokud se vyskytne přerušení během delay, tak bude to zpoždění navíc zpožděno o délku přerušení.

Přerušení na tvůj program nepotřebuješ. Je třeba si jen správně nastavit timer aby přetekl každých 200ms. V hlavní smyčce, kdy dokola testuješ tlačítka, se pak jen koukáš, jesli už přetekl. Pokud ano, vynuluješ příznak a vykonáš požadovanou operaci.
Je pouze otázka, jakou má mít ona operace prioritu. Jesli nevadí její zpoždění o obsluhu tlačítek, tak to je bez problému.
Během té 1ms operace bude pozastaveno skenování tlačítek, ale to by bylo i s použitím přerušení.

jj díky. Tohle bych už zvládnul. Teď ale řeším ještě jeden menší problém. Jak vlastně správně definovat v Céčku pole, které bude jako své prvky řetězcové konstanty?

Doufám, že máš rád pointery :smiley:
Pole řetězců je pole pointerů na pointer na char nebo pole pointerů na pole char. Je to to samé. Další možnos je dvourozměrné pole, ale pokud je každý řetězec jinak dlouhý, zbytečně to zabírá paměť.
Ovšem předpokládám, že je budeš chtít mít ve flash (pouze pro čtení) aby sis nezazdil ram. Pak tě musím odkázat stejně jako kolegu ve vedlejším vlákně na “avr-libc-user-manual.pdf”, kapitola 5 Data in Program Space. Makro PROGMEM.