Vorher waren alle als uint8_t deklariert. Es funktioniert mit lsb als uint8_t, msb als uint8_t und returnvar als uint32_t. Jetzt ist es deklariert mit lsb als uint8_t, msb als uint16_t und returnvar als uint32_t, damit funktioniert auch alles problemlos.
Dieser Ausschnitt sieht so aus:

Code:
uint32_t getValue(uint8_t adr) 
{
	uint8_t lsb_srf = 0;
	uint16_t msb_srf = 0;

	uint32_t returnvar = 0;

	[herausfinden von msb/lsb (I²C) und returnvar]

	return ((returnvar << 16) | (lsb_srf << 8) | msb_srf);
}
und so wird es wieder ,,zerlegt":

Code:
gM_srf = getValue(ADDRESS);
								
gM_check = ((gM_srf & 0xff0000) >> 16);

if(gM_check == 0)
{
	srf10_l = (gM_srf & 0xffff);
        [...]
}