c: MISRA2012

Ondrej ondrej-hwl na hawsys.cz
Pátek Březen 26 08:41:20 CET 2021


Pak by mohlo pomoci const

const float tmp = 20.1F / 1.1F;

x = (uint8_t)tmp;


nebo

const uint8_t tmpA = 20.1F * 10.0F;

const uint8_t tmpB = 1.1F * 10.0F;

x = tmpA / tmpB;


Minimálně ten float místo double stojí za úvahu, pokud jde o optimalizaci.


Ondrej



Dne 25.3.2021 v 19:04 Miroslav Draxal napsal(a):
> 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í.
> Překladač to samozřejmě správně vypočte na 18.
>
> !            volatile uint8_t x = (uint8_t) (20.1 / 1.1);
> 0x1412: MOVLW 0x12
> 0x1414: MOVWF obj_size_RAM, ACCESS
>
>
>
> !            volatile double tmp = 20.1 / 1.1; //alebo iny float typ pre danu platformu
> 0x1416: MOVLW 0x8C
> 0x1418: MOVWF dividend, ACCESS
> 0x141A: MOVLW 0x2E
> 0x141C: MOVWF number, ACCESS
> 0x141E: MOVLW 0x92
> 0x1420: MOVWF divisor, ACCESS
> 0x1422: MOVLW 0x41
> 0x1424: MOVWF denom, ACCESS
> !            volatile uint8_t x = (uint8_t) tmp;
> 0x1426: MOVFF dividend, 0x1
> 0x1428: NOP
> 0x142A: MOVFF number, 0x2
> 0x142C: NOP
> 0x142E: MOVFF divisor, 0x3
> 0x1430: NOP
> 0x1432: MOVFF denom, 0x4
> 0x1434: NOP
> 0x1436: CALL 0x300E, 0
> 0x1438: NOP
> 0x143A: MOVF 0x1, W, ACCESS
> 0x143C: MOVWF obj_size_RAM, ACCESS
>
> Takhle ne.
> Míra
>
>
> -----Original Message-----
> From: Hw-list [mailto:hw-list-bounces na list.hw.cz] On Behalf Of Miroslav Šinko
> Sent: Thursday, March 25, 2021 6:28 PM
> To: HW-news
> Subject: Re: c: MISRA2012
>
> Skuste
>
> double tmp = 20.1 / 1.1;  //alebo iny float typ pre danu platformu
> uint8_t x = (uint8_t) tmp;
>
> miro
>
> št 25. 3. 2021 o 18:02 Miroslav Draxal <evik na volny.cz> napísal(a):
>> Dobrý den,
>>
>> Pokud
>>
>> uint8_t x = (uint8_t) (20.1 / 1.1);
>>
>>
>>
>> [misra-c2012-10.8] The value of a composite expression shall not be cast to a different essential type category or a wider essential type
>>
>> uint8_t x = (uint8_t) (20.1 / 1.1);
>>
>>                     ^
>>
>> Jak to správně přetypovat, aby to bylo košér. Čtu kde co, ale nějak mě nenapadá řešení. Pomůžete?
>>
>> Míra
>>
>> _______________________________________________
>> HW-list mailing list  -  sponsored by www.HW.cz
>> Hw-list na list.hw.cz
>> http://list.hw.cz/mailman/listinfo/hw-list
> _______________________________________________
> HW-list mailing list  -  sponsored by www.HW.cz
> Hw-list na list.hw.cz
> http://list.hw.cz/mailman/listinfo/hw-list
>
> _______________________________________________
> HW-list mailing list  -  sponsored by www.HW.cz
> Hw-list na list.hw.cz
> http://list.hw.cz/mailman/listinfo/hw-list


Další informace o konferenci Hw-list