Re: Zase Arduino - jak dostat data do přerušení

Miroslav Mraz mrazik na volny.cz
Neděle Leden 28 20:05:17 CET 2024


Obecně - volatile moc nepomůže. V C++ by mohlo jít použít std::atomic, 
ale netuším, zda to má Arduino implementováno. V podstatě to funguje 
tak, že se zakáže přerušení, proměnná se nějak naplní a nakonec se 
přerušení zase povolí. U vícebytových proměnných je to v podstatě nutnost.
Lepší možnost je, vytvořit si frontu. Pokud na jedné straně (main) pouze 
zapisujete a na druhé (přerušení) pouze čtete, pak si s volatile (pro 
jednobytové indexy hlavy a ocasu) celkem vystačíte.

Mrazík

On 28. 01. 24 19:00, Jirka Mww wrote:
> Dobrý večer,
> 
> zase se tady trápím s Arduinem.  Potřebuji v přerušení od pinu 2 u 
> Arduino Nano poslat ven dvanáct bitů.  Přerušení vyvolá vstup CS od 
> nadřízeného stroje, pak jdou hodiny asi po 200  uS a na jejich sestupnou 
> hranu potřebuji posílat ven data.  V podstatě mi to funguje, pokud ta 
> data, co potřebuji poslat, vytvořím až v té přerušovací proceduře.  
> Nevím ale, jak tam dostat data, která vyrobím v hlavní smyčce. Deklaraci 
> té proměnné , co chci poslat, mám jako volatile unsigned integer , 
> zkoušel jsem i volatile byte, deklaraci  mám v hlavním programu ,zkoušel 
> jsem to deklarovat i v té přerušovací proceduře, ale nejsem úspěšný.  Ta 
> data se pošlou jen jednou, a ještě ne celá. Pak to vypadá, že se ta data 
> nějak smažou, nebo co. Posílá to už jen nuly.  Bohužel, ladící výpis tam 
> nejde udělat.  Můžete mne prosím zase nějak nakopnout ?
> 
> Zdravi
> Jirka Sloupenský  OK1MWW
> 


Další informace o konferenci Hw-list