[elektro] STM32f4 interrupt : volatile tombok
Móczik Gábor
pm_levlista at progzmaster.hu
Sat Dec 7 18:29:53 CET 2013
2013.12.07. 13:26 keltezéssel, Pal Lukacs írta:
> Hello !
>
> Az IT igy is oda ir ahol nem jar a main, viszont meg kell szakitania a szurest, es ehhez a main-ben levo folyamatot le kell stackelje.
> Nem tudom hogy ez volatile tombok miatt tobb ido-e , vagy egyaltalan hogy oldja meg a stackelest,...
> Meg az egesz IT kodra nezve tobb ido ha volatile a tomb.
> Abban nem vagyok biztos hogy ha az IT fuggvenyt hiv, es a fuggvenyben toltodik a tomb, akkor kell-e volatile .
Röviden: tökmindegy
Hosszabban:
Olyan változót kell volatile-ként deklarálni, aminek az értéke az éppen
futó kódtól függetlenül is (a háttérben) megváltozhat. Tehát tökmindegy,
hogy az ISR függvény, egy abból hívott függvény, vagy épp egy másik task
változtatja meg, volatile-ként kell deklarálni.
Nincs köze a stack-hez.
Ennek hatására mindössze annyit tesz a compiler, hogy nem tartja
regiszterekben a tömbből kiolvasott értéket. Mindig a memóriát olvassa,
amikor kell az érték, akkor is, ha egy utasítással korábban olvasta ki
egy regiszterbe.
Ez bizonyos architektúrákon lassabb, azokon, ahol a CPU annyira gyors,
hogy a RAM-ra várni kell, vagy az utasításkészlet olyan, hogy
memóriacímzéses művelet OPCODE-ja hosszabb mint az ugyanilyen művelet
regiszter címzéses verziójának.
Ha jól tudom ARM kódban a regiszter és a memória címzéses olvasás is 1
ciklus alatt lezajlik, valamint az STM32-ben lévő RAM wait-state nélkül
olvasható, tehát elvben semmi overhead-et nem jelent ha volatile-ként
deklarálod.
Mitöbb, az STM32 flash is elvileg 0 WS reklámmal megy, bár a valóságban
ebben különféle cache technikák segítsége is benne van, maga a flash
lassabb mint a CPU.
More information about the Elektro
mailing list