[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