Forum: Compiler & IDEs EEPROM array in ein SRAM array casten


von Jürgen (Gast)


Lesenswert?

Kann man ein EEPROM array in ein SRAM array casten?

Bsp.
ich habe eine Funktion:

unsigned char cp(unsigned char* array1,unsigned char* array1){}

nun möchte ich mit dieser Funktion Daten aus dem EEPROM vergleichen mit 
Daten aus dem SRAM.

also:
1
eeprom unsigned char eep_arr[10]={1,2,3,4,5,6,7,8,9,0};
2
unsigned char arr[10]={1,2,3,4,5,6,7,8,9,0};
3
4
cp(eep_arr,arr);                    // das gefällt dem Compiler nicht
5
cp((unsigned char)eep_arr,arr);     //das gefällt dem Compiler, aber ist dies auch das was ich beabsichtige?
6
cp((unsigned char*)eep_arr,arr);    //das gefällt dem Compiler auch, aber ist dies auch das was ich beabsichtige?

Leider kann ich dies nicht in der Hardware testen, deshalb meine Frage.

von Jürgen (Gast)


Lesenswert?

Natürlich ist das falsch:
unsigned char cp(unsigned char* array1,unsigned char* array1){}

und so ist es Richtig:
unsigned char cp(unsigned char* array1,unsigned char* array2){}

von Karl H. (kbuchegg)


Lesenswert?

Jürgen schrieb:
> Kann man ein EEPROM array in ein SRAM array casten?

Können tust du schon, der Compiler kann sich gegen einen Cast nicht 
wehren. Ein Cast ist schlieslich das ultimate Mittel eines 
C-Programmierers, wie er dem Compiler so ziemlich alles unterjubeln 
kann.
Aber richtig ist es nicht.
Und das liegt daran, dass man auf Daten im EEPROM anders zugreifen muss, 
als auf Daten im SRAM.

Du hast 2 Möglichkeiten:
* entweder du schreibst dir selbst eine spezielle cp-Funktion, die weiß,
  dass zb. der 2-te Parameter ein Pointer auf Daten im EEPROM ist, und
  das entsprechend berücksichtigt
* oder du zerteilst die Operation in 2 Schritte
  a) die Daten aus dem EEPROM in ein Hilfsarray im SRAM lasen
  b) damit hast du dann die zu vergleichenden Daten beide im SRAM
     vorliegen und kannst deine ursprüngliche cp-Funktion benutzen.

von Jürgen (Gast)


Lesenswert?

>Und das liegt daran, dass man auf Daten im EEPROM anders zugreifen muss,
als auf Daten im SRAM.
ok, hab ich mir fast gedacht, aber gewust hab ich es nicht.

Danke!

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.