Eftersom de ska kunna läsa och skriva vilka data som helst har jag gjort dem generella genom att man bara anger tre parametrar:
(a) adressen i SRAM
(b) adressen i EEPROM
(c) antal bytes.
Så här ser de ut:
Kod: Markera allt
void ee_save(uint8_t* SRAM_pekare,uint8_t* EEPROM_pekare, uint8_t antal_bytes);
void ee_read(uint8_t* SRAM_pekare,uint8_t* EEPROM_pekare, uint8_t antal_bytes);
Men jag stör mig lite på att jag måste omvandla pekarna till rätt sort vid varje anrop, dvs. skriva (uint8_t)* innan jag anropar. Så ett anrop kan se ut så här:
Kod: Markera allt
ee_save((uint8_t*)&loggdata, (uint8_t*)&ee_loggdata, sizeof(loggdata));
Nu vet jag att det finns något som heter "generell pekartyp" som jag tror jag kan använda mig av här, men jag är inte helt säker på hur jag gör rätt. Jag vill alltså kunna skriva så här:
Kod: Markera allt
// deklaration
void ee_save( void * SRAM_pekare, void * EEPROM_pekare, uint8_t antal_bytes);
// anrop
ee_save(&loggdata, &ee_loggdata, sizeof(loggdata));
Så nu funderar jag på hur jag ska kunna använda dessa "generella void-pekare internt i funktionen för att de ska bete sig som (uint8_t*)-pekare? Går pekarna att omvandla så att de blir uint8_t-pekare, eller måste jag skriva typomvandling på de ställen där de används?
Ett alternativ kan vara att jag skapar nya pekare inuti funktionen med rätt typ:
Kod: Markera allt
function ( void * argument_pekare ) {
uint8_t * typad_pekare;
typad_pekare = (uint8_t) argument_pekare;
uint8_t value = *typad_pekare;
}