Morgen!
Sorry, dass ich solange nicht gepostet habe.
Deinen Tipp mit dem Cast zum void-pointer habe ich ausprobiert, allerdings kommt dann die folgende Compiler-Warnung:
../testc.c:169: warning: cast to pointer from integer of different size
Am Prototyp sollte es nicht liegen, da die Funktion nicht von mir kommt, sondern in der eeprom.h enthalten ist:
Code:
static inline void __attribute__ ((always_inline)) eeprom_write_byte (uint8_t *addr,uint8_t value);
void eeprom_write_byte (uint8_t *addr,uint8_t value)
{
__asm__ __volatile__ (
"mov __tmp_reg__,%1" CR_TAB
XCALL " __eeprom_write_byte_" _REG_LOCATION_SUFFIX
: "+x" (addr)
: "r" (value)
: "memory"
);
}
Wie gesagt, wenn iEEPROM_lastByte eine uint8_t ist, geht der Cast zu uint8_t* nicht bzw. produziert eine Warnung. Bei einer uint16_t geht's, ebenso funktioniert natürlich der Umweg über den zweifachen Cast.
Dass in der Funktion Assembler-Anweisungen verarbeitet werden, kann doch auch nicht der Grund sein, oder? Schließlich meckert der Compiler nur aufgrund des Argumenten-Typs, unabhängig vom Inhalt der Funktion. Richtig?
Lesezeichen