Philipp Wagner schrieb:
> Im eigentlichen Programm was ich aufflashe
....
> #define CAN_CONTROLLER_MASK_ID 0x00000100
das ist aber etwas vollkommen anderes!
Du solltest mal ein C-Buch lesen. ernsthaft!
Das hier legt keine Variable an bzw. definiert oder deklariert auch
keine, sondern sorgt einfach nur dafür, dass der Präprozessor im Code
den Text CAN_CONTROLLER_MASK_ID duirch den Text 0x00000100 ersetzt.
Nach dem Präprozessor lauf, steht also in deinem Programm
1 | ... eeprom_read_byte((unsigned int*)&(0x00000100));
|
2 |
|
3 | ...
|
4 | 0x00000100 = CAN_CONTROLLER_MASK_ID_FW;
|
5 | ...
|
und das das QUatsch ist, brauch ich wohl nicht extra zu betonen.
Genau das meint 'l-value'. Das 'l' steht für 'left' und gemeint ist
damit der linke Teil in einer Zuweisung
a muss logischerweise etwas sein, was etwas speichern kann. Eine
Variable zum Beispiel. 0x00000100 ist aber ganz sicher keine Variable.
0x00000100 ist einfach nur eine Zahlenkonstante. Und der kann man
nichts neues zuweisen. Genausowenig wie eine Zahlenkonstante keine
Adresse im Speicher hat, die man mit & feststellen könnte. Eine
Zahlenkonstante ist daher kein l-Value.
PS: Ich denke auch, dass du hier
1 | unsigned int CAN_CONTROLLER_MASK_ID EEPROM_SECTION = 0x00000100;
|
etwas machst, was du gar nicht beabsichtigt hast. Die Angabe 0x00000100
ist der Initialiwert, den diese EEPROM Zelle haben soll. Sie ist NICHT
die Adresse im EEPROM, an der diese Variable lokalisiert sein soll.
D.h. selbst wenn du deine syntaktischen Probleme ausräumst, wird nicht
das passieren, was du dir vorstellst.