
Zitat von
_matze
../testc.c:75: warning: passing argument 1 of 'eeprom_write_byte' from incompatible pointer type
Das diese Warnung beim Versuch, die Adresse von i zu übergeben, produziert wird, könnte doch daran liegen, dass i unsigned short ist (16 Bit), jedoch ein 8-Bit Pointer erwartet wird. Hatte ja nicht den ganzen Code gepostet, sonst hättet ihr das vielleicht gesehen. Liege ich da richtig?
Ich habe noch ein weiteres interessantes Phänomen:
Code:
eeprom_write_byte((uint8_t*)(unsigned int)eeprom_get_next_byte(iEEPROM_lastByte),cUSART_inp[i]);
/***************/
uint8_t eeprom_get_next_byte(uint8_t iLastByte) {
/***************/
uint8_t iNextByte = iLastByte + 1;
//
if(iNextByte > EEPROM_MAX_BYTE) {
iNextByte = 0;
}
//
iEEPROM_lastByte = iNextByte;
return(iNextByte);
}
Es ist der gleiche Ausdruck, nur das i durch die Funktion eeprom_get_next_byte() ersetzt wurde. Diese liefert uint8_t zurück. Ein Cast nach uint8_t* gibt aber ebenfalls eine Warnung. Es funktioniert nur der Doppel-Cast (uint8_t*)(unsigned int).
Warum muss der 8-Bit-Wert erst in einen 16-Bit-Wert umgewandelt werden, um dann einen Pointer auf einen 8-Bit-Wert zu bekommen?? Ist das nicht unlogisch? Muss ich beim Programm nun darauf achten, dass mindestens ein Byte des SRAM freibleibt, da es während dieser Zeile gebraucht wird? Oder geschieht diese Konvertierung nicht im SRAM?
Bin schon auf eure Antworten gespannt!
Gruß Matze
Lesezeichen