Habs mal so probiert, aber gleiche Warnung (Warning [2054] suspicious pointer conversion):
Ne halt, hab vergessen unsigned vor die char's zu schreiben:Code:static volatile union _tmrGATEcounter { unsigned int LH; struct { char L; char H; }; } tmrGATEcounter; void ReadEEdata8(unsigned char *dest, unsigned char addr) { EECON1bits.CFGS = 0; //0: program memory / EEPROM memory EECON1bits.EEPGD = 0; //0: EEPROM memory EEADR = addr; //Adresse laden Low -Byte. EEADRH = 0; //Adresse laden High-Byte. EECON1bits.RD = 1; //Lesezyklus einleiten. *dest = EEDATA; //EEPROM-Daten => Ziel-Variable. } void ReadEEdata16(unsigned char *dest, unsigned char addr) { unsigned char *p = (unsigned char *)dest; ReadEEdata8(p++, addr++); ReadEEdata8(p, addr); } void InitVars (void) { ReadEEdata16 (&tmrGATEcounter.L, 2); //<- Warnung hier !!! }
So geht's dann, keine Warnung mehr:
Aber warum geht das aus den oberen Postings nicht? Pointer sind wohl mehr für Strings gedacht.Code:static volatile union _tmrGATEcounter { unsigned int LH; struct { unsigned char L; unsigned char H; }; } tmrGATEcounter; void ReadEEdata8(unsigned char *dest, unsigned char addr) { EECON1bits.CFGS = 0; //0: program memory / EEPROM memory EECON1bits.EEPGD = 0; //0: EEPROM memory EEADR = addr; //Adresse laden Low -Byte. EEADRH = 0; //Adresse laden High-Byte. EECON1bits.RD = 1; //Lesezyklus einleiten. *dest = EEDATA; //EEPROM-Daten => Ziel-Variable. } void ReadEEdata16(unsigned char *dest, unsigned char addr) { unsigned char *p = (unsigned char *)dest; ReadEEdata8(p++, addr++); ReadEEdata8(p, addr); } void InitVars (void) { ReadEEdata16 (&tmrGATEcounter.L, 2); //<- Warnung hier !!! }







Zitieren

Lesezeichen