c: MISRA2012

Jan Waclawek konfera na efton.sk
Pátek Březen 26 15:57:46 CET 2021


>Ten volatile na to přeci nemá vliv. 

KTORY volatile?

Mate tam dva.

https://list.hw.cz/pipermail/hw-list/2021-March/536695.html

            volatile double tmp = 20.1 / 1.1; //alebo iny float typ pre
danu platformu

Tento volatile prekladacu hovori, ze tmp je ten "register v procesore",
nesmie vynechat ziadny zapis a citanie a nesmie predpokladat nic o jeho
obsahu. Teda ked pride na toto:

            volatile uint8_t x = (uint8_t) tmp;

tak prekladac musi precitat tmp, ktory je typu double, a kedze dopredu
nevie, co z neho precita (lebo ste oznacili tmp za volatile), tak musi
zavolat tu konverziu z double na int.

To druhe volatile si nechajte, tam vidite, ako ten vypocet dopadol.
t.j. vyskusajte

double tmp = 20.1 / 1.1; //alebo iny float typ pre danu platformu
volatile uint8_t x = (uint8_t) tmp;

Prekladac toto NEMUSI zoptimalizovat; ale to s tymi dvomi volatile NESMIE
zoptimalizovat.

wek



>-----Original Message-----

>Ten volatile na to přeci nemá vliv. 
Nebo ano? Možná jste to přehlédl či nečetl, tohle je výraz pro navození
aktuálního problému. Volatile tam mám kvůli tomu, aby mi kompilátor tu
proměnou přeložil, nevyloučil jí z překladu, protože nikde jinde není
použita. Mám do teď, že pokud použiji volatile, tak říkám kompilátoru,
tuhle proměnnou použij a nekoukej, jestli se někde používá nebo ne. Ale,
pokud jsou povoleny veškeré optimalizace, tak např. výpočty s touto
proměnnou optimalizuj. Tak nějak si volatile spojuji s registry procesoru,
do kterého se třeba jenom zapisuje. Kdyby tam nebylo to volatile, tak se
to zoptimalizuje a žádný zápis se do registru neprovede. Pokud se z
registru v programu nečte a není volatile, tak se optimalizací zápis do
něj nerealizuje. 
>V podstatě mohu použít. 
>TMR1H = (uint8_t) (20.1F / 1.1F); // Tady řve MISRA
>TMR1H = (uint8_t) (18,27272727272727F); // tady je pro změnu vše OK.
>
>Míra
>
>
>
>-----Original Message-----
>
>No tak nedajte volatile k tmp.
>
>wek
>
>----- Original Message ---------------
>
>>Jak píšete, " vypocet kompilator urobil compile time"
>>
>>
>>-----Original Message-----
>>
>>>> chci, aby to tu konstantu vypočítalo při překladu
>>> Aby mi to při přeložilo.
>>
>>Tak co vlastne chcete, aby Vam ten vypocet kompilator urobil compile time,
>>alebo aby to prelozil a tym padom sa vypocet vykonal runtime?
>>
>>Hovorim o volatile specificky pri premennej tmp.
>>
>>wek
>>
>>
>>----- Original Message ---------------
>>>To volatile je tam pouze ze studijních důvodů. Aby mi to při přeložilo.
>>>Míra
>>>
>>>-----Original Message-----
>>>
>>>> Asi jsem měl napsat, že chci, aby to tu konstantu vypočítalo při překladu. Tohle je očesané na kost, abych se nějak dopídil k rozuzlení.
>>>
>>>No tak potom tam nesmiete pchat to volatile k tomu tmp.
>>>
>>>wek
>>>




Další informace o konferenci Hw-list