Habs mal so probiert, aber gleiche Warnung (Warning [2054] suspicious pointer conversion):
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 !!!
}
Ne halt, hab vergessen unsigned vor die char's zu schreiben:
So geht's dann, keine Warnung mehr:
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 !!!
}
Aber warum geht das aus den oberen Postings nicht? Pointer sind wohl mehr für Strings gedacht.
Lesezeichen