OT: c: mismatched comparison
Jan Waclawek
konfera na efton.sk
Pondělí Červenec 29 14:45:43 CEST 2024
[preposielam]
Dobry den,
XC8 v2.46 je C99 standard, takze vsetky operacie sa vykonavaju nad
int, ktory je defaultna premenna. Staci tam niekde doplnit & 0xFF
alebo & 0x00ff. Warning kupodivu zmizne a kod sa prelozi na 8-bitove
operacie nativne pre PIC18.
Potom by som vyskusal predpocitat do premennej Tmp = CisloSekce - 1u a
tuto premennu pouzit namiesto tej zatvorky v podmienke. Vedlajsi efekt
je, ze vidite spotrebu RAM, ktora je skryta v tej podmienke.
Myslim si, ze tieto dve veci by to mali poriesit.
A.
>>>
Dobrý den ve spolek.
Už delší dobu si lámu hlavu nad tím, co se nelíbí překladači. Je to tedy
vyseparované z daleko složitější podmínky, ale tohle ten problém způsobuje.
Microchip
XC8 ver.2.46
uint8_t RucneCisloSekce;
uint8_t CisloSekce;
if (RucneCisloSekce == (CisloSekce - 1u)) {
NOP();
}
Hlásí warning: (764) mismatched comparison
Což je
(764) mismatched comparison (Code Generator)
A comparison is being made between a variable or expression and a constant
value which is not in
the range of possible values for that expression, for example:
unsigned char c;
if(c > 300) /* oops -- how can this be true? */
close();
pokud odstraním -1, potom OK.
Ano, může to přetéct z 0x00 do 0xff, ale to není "mismatched comparison"
???
Díky za vysvětlení, Míra
Další informace o konferenci Hw-list