arm cm3 dsb instrukce

Miroslav Mraz mrazik na volny.cz
Pátek Červen 5 10:39:20 CEST 2020


Možné to je, ale když provádím read-modify-write v hlavní smyčce a 
podobně i v přerušení (nad stejnou globální proměnnou), atomic důsledně 
používá ldrex/strex i s tím dsb. Asi to nějaký význam mít bude. Nebo 
hovoříme každý o něčem jiném. Já do takových detailů chování procesoru 
jít neumím ale snažím se být opatrný.

Mrazík

Dne 05. 06. 20 v 10:20 Jan Waclawek napsal(a):
>> Jinak øeèeno - pokud máte napøíklad globální
>> promìnnou, kterou sdílíte mezi smyèkou hlavního programu a pøerušením,
>> nestaèí jí deklarovat jako volatile, musíte použít nìco jako
>> std::atomic<type>.
> 
> U Cortex-M3/M4 toto nie je potrebne riesit (s vynimkou LDM/STM, ktore su z
> principu problematicke operacie, hojne sa vyskytujuce aj v ARM erratach, a
> pochybujem, ze by ich nejaky prekladac generoval pre volatile premenne),
> vid napr. Cortex-M4 TRM, 3.5 Write buffer:
> 
> If an interrupt
> comes in while  DMB or  DSB is waiting for the write buffer to drain, the
> processor returns to the
> instruction following the  DMB or  DSB after the interrupt completes. This
> is because interrupt
> processing acts as a memory barrier operation.
> 
> wek


Další informace o konferenci Hw-list