Re: Záhada v C -Vyřešeno a otázky

Miroslav Mraz mrazik na volny.cz
Neděle Leden 24 15:10:49 CET 2021


Jo, v C++ napíšete prostě
std::atomic uint8_t x;
a přistupujete k tomu jako k prostému uint8_t. Jenže pro AVR (pokud vím) 
zatím nikdo ten obal std::atomic z nějakého důvodu neudělal. Na ARM je 
to lepší, jádra Cortex-M3,4 mají pro atomicitu speciální instrukce LDREX 
STREX, takže tam je to uděláno a funguje to.
S tím C++ se vůbec líp pracuje (nakonec Arduino je na tom postaveno). 
Například pro zpracování dat, vzniklých v přerušení bych použil frontu - 
jde udělat jednoduchá šablona (příloha) a tu pak libovolně instancujeme. 
V Arduinu je to řešeno spíš klasicky C-čkově (USART), protože je to pro 
většinu lidí čitelnější.

Mrazík

Dne 24. 01. 21 v 14:05 Pavel Hudecek napsal(a):
> Díky.
> 
> Přesně takhle řeším atomicitu u čekání v tý funkci cekej() ze které byl 
> ten kus co používá adSync. Tam se pracuje s proměnnou, kterou každou ms 
> přičítá přerušení a čekací funkce podle toho čeká. Okolo jejího nulování 
> a  testu se musí dát zákaz přerušení, jinak čekání občas čeká jinak 
> dlouho. Což je celkem opruz, protože místo přímočarého
> 
> while(ms<n) cekani();
> 
> musí bejt while(1) { a uvnitř asm … if … break … asm…, takže se z 1 
> řádku stane 6.
> 
> Tak jsem si při zmínce o atomic napřed myslel, že tý ms můžu dát nějakej 
> atribut atomic a bude po starostech, škoda.
> 
> U toho volatile pole byl záměr dotazu jednodušší, šlo jen o to, zda jsou 
> jeho prvky volatile.
> 
>>  Všechny ukazatele ukazují na volatilní proměnnou typu uint8_t
> 
> Z toho usuzuji, že odpověď je ano. Občas někde právě píšou, že volatile 
> je pak vlastně jenom pole, ale ne pole[n], což by bylo dost na ...
> 
> PH
> 
------------- další část ---------------
A non-text attachment was scrubbed...
Name: fifo.h
Type: text/x-chdr
Size: 3752 bytes
Desc: [žádný popis není k dispozici]
URL: <http://list.hw.cz/pipermail/hw-list/attachments/20210124/645e5d5d/attachment.h>


Další informace o konferenci Hw-list