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?