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