Forum: Mikrocontroller und Digitale Elektronik Frage zu *(u8*)0x4807 |= (1<<3); Optionbytes STM8S


von C. L. (calle)


Lesenswert?

Moin!

In einem gegebenen Programm eines STM8SF103 ist die o.g. Zeile für mich 
ein wenig unverständlich.

Edit:
Hier nochmal die Zeile:
*(u8*)0x4807 |= (1<<3);

0x4807 ist ein Option Register und es wird das Bit 3 "reingeodert".
Aber was ist das 2te Sternchen?
Einmal ist es doch ein (U8*) Pointer auf die Adresse 0x4807 und davon 
dann der Inhalt? ..oder wie muss ich das lesen?
z.B.
Das Bit 3 des Inhalts, auf den der Pointer zeigt, wird gesetzt...

Und noch was:
Der STM8 war readout protected. Demnach sind die optionbytes aber jetzt 
weg, weil ich das wieder freigeschaltet habe. Das war auch erstmal so 
gewollt. Habe ich eine Chance, die original besetzten Option Werte 
wieder zu bekommen?
Der C Quellcode liegt mir vor aber darin sind m.M.n. keine Option Bits 
drin, weil die beim flashen vergeben wurden mit read out protect.
Hat jemand da Ideen?

VG

Carsten

: Bearbeitet durch User
von Rolf M. (rmagnus)


Lesenswert?

C. L. schrieb:
> In einem gegebenen Programm eines STM8SF103 ist die o.g. Zeile für mich
> ein wenig unverständlich.

Es wäre geschickt gewesen, diese Zeile in den Inhalt deines Postings zu 
kopieren statt nur in den Betreff zu schreiben.
Hier mal zur Erleichterung:
1
*(u8*)0x4807 |= (1<<3);
> 0x4807 ist ein Option Register und es wird das Bit 3 "reingeodert".

0x4807 ist die Adresse des Registers.

> Aber was ist das 2te Sternchen?

"Zeiger". u8 wird vermutlich ein vorzeichenloser 8-Bit-Typ sein, u8* ist 
ein Zeiger darauf.

> Einmal ist es doch ein (U8*) Pointer auf die Adresse 0x4807 und davon
> dann der Inhalt? ..oder wie muss ich das lesen?

Ja, genau.

von Olaf (Gast)


Lesenswert?

> Aber was ist das 2te Sternchen?

Das erste Sternchen ist "Inhalt von Adresse" das zwei in der Klammer ist 
ein casting auf einen 8bit grossen Zeiger.

Olaf

von STK500-Besitzer (Gast)


Lesenswert?

C. L. schrieb:
> Einmal ist es doch ein (U8*) Pointer auf die Adresse 0x4807 und davon
> dann der Inhalt? ..oder wie muss ich das lesen?

ja.
(U8*) ist ein Cast, der dem Compiler mitteilt, dass der Pointer als 
Pointer auf ein Byte zu verstehen ist (könnte ja auch als eine andere 
Datenstruktur interpretiert werden).
Und um den Wert des Registers zu setzen, braucht man noch ein Sternchen 
davor.

von Rolf M. (rmagnus)


Lesenswert?

Olaf schrieb:
> das zwei in der Klammer ist ein casting auf einen 8bit grossen Zeiger

… einen Zeiger auf einen 8 Bit großen Wert. Auf die Größe des Zeigers 
selbst hat das keinen Einfluss.

von C. L. (calle)


Lesenswert?

ok,

danke, hat mir sehr geholfen!!
Weiß auch noch jemand, wie ich die "Fuse bits" sinnvoll wiederherstellen 
kann?
Hier noch mal die Frage:

> Und noch was:
> Der STM8 war readout protected. Demnach sind die optionbytes aber jetzt
> weg, weil ich das wieder freigeschaltet habe. Das war auch erstmal so
> gewollt. Habe ich eine Chance, die original besetzten Option Werte
> wieder zu bekommen?
> Der C Quellcode liegt mir vor aber darin sind m.M.n. keine Option Bits
> drin, weil die beim flashen vergeben wurden mit read out protect.
> Hat jemand da Ideen?

Ein STM8S mit der originalen Software hätte ich noch hier aber leider 
read out protected.

??

CL

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.