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