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