arm cm3 dsb instrukce

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


Já jsem jen chtěl říct, že i když píšu bare-metal kód, nemusím se celkem 
starat o to jak a kdy zavolám ISB, DBS, jestli se globálně zakáže 
přerušení nebo se použije LDREX/STREX. C,C++ na to má svá synchronizační 
primitiva a je lépe použít je, než to vymýšlet celé znova sám. 
Předpoklad je, že autoři překladače znají danou architekturu lépe a mají 
daleko silnější zpětnou vazbu, pokud udělají chybu.
Prostě jen upozorňuji na to, že tato synchronizační primitiva existují, 
protože když tak zkoumám různé projekty na webu, není moc vidět, že by 
to používalo moc lidí. Buď se to složitě obchází nebo a to je horší, se 
na to kašle.
Já se musím přiznat, že jsem to také začal používat teprve nedávno, s 
přechodem na C++, kde je použití std::atomic daleko snazší. Na druhou 
stranu dnes se na složitější věci používá spíš nějaký RTOS, a ten tohle 
mívá vyřešen obvykle korektně.

Mrazík

Dne 05. 06. 20 v 9:38 Jaroslav Buchta napsal(a):
> Asi mate obecne pravdu ale u CM3 mi to moc smysl nedava. Volatile snad 
> zajistuje pristup pouze z hlediska prekladace, aby si nemyslel, ze se 
> promenna nemuze zmenit pokud ji vlastni kod v dane funkci nezmeni. Pokud 
> se pouzivaji zarovnane pristupy do 32b, tak se to predpokladam nemusi 
> resit vubec a 32b je bud zapsano komplet nebo vubec v okamziku 
> preruseni? Vsak je to provedeno jednou instrukci. A v opacnem pripade se 
> zakazuje preruseni komplet nebo castecne atp., v multitaskingu pouzivaji 
> sync objekty atd.
> Funkce DSB je mi taky trosku zahadou, chapu to tak, ze to vysype ruzne 
> cache do fyzicke pameti a driv program nepokracuje, smysl to dava asi 
> hlavne u registru, kdy treba pri zmene 0-1-0 na nejakem GPIO by ke zmene 
> vubec nemuselo dojit? Pri cteni dat to mozna ma taky nejaky efekt i kdyz 
> tam spis vidim smysl ISB pokud se treba modifikuje kod.
> U toho RESET to asi zajisti, ze v pameti budou ulozeny posledni zmeny co 
> program udelal.
> 


Další informace o konferenci Hw-list