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:
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.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" ); }
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?







Zitieren

Lesezeichen