gast schrieb:
> hallo,
> ich habe festgstellt, dass ich letze mal paar Fehler gemacht habe.Jetzt
> habe ich das kleine Programm aufgeräumt.
> Wie ich schon gesagt habe, versuche ich paar Werte in Adresse zu
> schreiben, leider klappt nicht.
Dann räum erst mal kräftig auf
Aber sehen wir uns doch mal die Funktion an
1 | void writeIORegister(struct InOut *ptr_InOut)
|
2 | {
|
3 | Adr_Reg = (uint8_t) (ptr_InOut->Adresse & 0xFF);
|
4 | Val_Reg = (uint8_t) (ptr_InOut->Value & 0xFF);
|
5 | //*Ptr_Reg = ((volatile uint8_t *) ((uint8_t) Val_Reg & 0xFF));
|
6 | *Ptr_Reg = Val_Reg;
|
7 | printf("the value %x will be written in adresse %p", Val_Reg,Adr_Reg);
|
8 |
|
9 | }
|
Hmm.
Da wird wie wild zugewiesen.
Aber letztendlich wird über *Ptr_Ref der neue Wert zugewiesen.
Nur: Wie kommt eigentlich Ptr_Reg zu seinem Wert?
Du trickst dich hier mit deinen ganzen Zwischenvariablen (die noch dazu
ohne Grund global sind) permanent selber aus indem du dir Information
konsequent vor dir selber versteckst.
1 | void writeIORegister(struct InOut *ptr_InOut)
|
2 | {
|
3 | uint8_t* Address = (uint8_t*)(ptr_InOut->Adresse & 0xFF);
|
4 | *Address = (uint8_t) (ptr_InOut->Value & 0xFF);
|
5 | }
|
Ob das allerdings das korrekte Gegenstück zur read Funktion ist, kann
ich nicht sagen, denn dort wird noch ein _MMIO_BYTE benutzt um an die
Werte zu kommen.