Forum: Mikrocontroller und Digitale Elektronik Was ist ein Scratch Register?


von pacer (Gast)


Lesenswert?

Hallo Leute,

mir ist jetzt schon ein paar mal der Begriff Scratch Register 
untergekommen.
Kann mir das mal jemand kurz erklären was das ist?

Gruß,
pacer

von g457 (Gast)


Lesenswert?

Ich kenne das nur als 'scratchpad', dürfte aber wohl auf das selbe 
hinauslaufen - 'Schmierblock' respektive '"Schmierblockregister"' dürfte 
hinkommen. Also ein Speicherbereich, in den man 'nur' was 
'hinkritzelt'.. Manche Sensoren z.B. messen in das Scratchpad hinein, 
und selbiges kann man dann (später, nach Abschluss der Messung) 
auslesen.

von Uhu U. (uhu)


Lesenswert?

Als Scratchregister werden Register bezeichnet, in denen für kurze Zeit 
Zwischenergebnisse gespeichert werden, auf die im weiteren Verlauf einer 
Berechnung zurückgegriffen werden muß.

Die Bezeichnung steht weniger für das physikalische Register, daß als 
Scratchregister benutzt wird, als vielmehr für den momentanen 
Verwendungszweck.

Wenn man einen Ausdruck, wie z.B.

   (a + b) * (c + d)

auf einer Registermaschine berechnen will, dann werden zunächst die 
Klammerausdrücke berechnet und in Scratchregistern gespeichert. 
Anschließend werden die Scratchregister multipliziert.

von Peter R. (pnu)


Lesenswert?

Beim DS18B20 (Temperatur-Mess-IC) werden Messwerte, Einstellungen usw. 
zunächst in ein temporäres Register (RAM) geschrieben, das Scratchpad ( 
Kratztafel, Schiefertafel, Notizblock ).

Der Datenverkehr per onewire mit dem IC läuft ausschließlich über dieses 
Scratchpad.

Werte, die als neue Einstellung des IC bestimmt sind und in 
EEPROM-Zellen gehören, werden durch extra Befehle anschließend vom 
scratchpad in die betreffende EEPROM-Zellen übertragen.

Messergebisse landen ebenfalls zuerst im scratchpad und werden 
anschließend per onewire gelesen.

von Vlad T. (vlad_tepesch)


Lesenswert?

so werden register bezeichnet, die nicht gesichert und wiederhergestellt 
werden müssen, wenn man diese in seiner Funktion verwendet.
Das heißt der Aufrufende muss sich bewusst sein, dass die Darin 
enthaltenen Daten verloren gehen können, wenn er eine Funktion aufruft.
sprich er muss diese entweder selbst vorher sichern, oder alle 
Berechnungen abschließen, die diese Daten noch brauchen.

Analog dazu gibt es auch Scratch(pad)-Memorie.

von pacer (Gast)


Lesenswert?

vielen Dank, ich denke ich habe es verstanden.

Gruß, pacer

von Uhu U. (uhu)


Lesenswert?

Vlad Tepesch schrieb:
> so werden register bezeichnet, die nicht gesichert und wiederhergestellt
> werden müssen, wenn man diese in seiner Funktion verwendet.

Nein, das stimmt so nicht.

Z.B. wenn ein Interrupt kommt, während das Hauptprogramm gerade in einer 
Berechnung ist, dann müssen selbstverständlich auch Scratchregister 
erhalten werden.

Andererseits können solche Zwischenwerte natürlich auch von vorne herei 
im Speicher gehalten werden - darüber entscheidet der 
Register-Allokations-Algortihmus des Compilers.

Letzlich werden meist alle Register des Prozessors, außer dem 
Stackpointer, dem PC, dem Statusregister und dem Basepointer-Register, 
falls vorhanden, als Scratchregister verwendet.

von Vlad T. (vlad_tepesch)


Lesenswert?

Uhu Uhuhu schrieb:
> Z.B. wenn ein Interrupt kommt, während das Hauptprogramm gerade in einer
> Berechnung ist, dann müssen selbstverständlich auch Scratchregister
> erhalten werden.

Logisch, ISRs dürfen natürlich nicht einfach was verändern.

Uhu Uhuhu schrieb:
> Andererseits können solche Zwischenwerte natürlich auch von vorne herei
> im Speicher gehalten werden - darüber entscheidet der
> Register-Allokations- Algortihmus des Compilers.

Mit Scratchregistern beschäftigt man sich ja normalerweise nur, wenn man 
Asembler schreibt und Bibliotheksfunktionen benutzen will, dann muss man 
sowas wissen.

Uhu Uhuhu schrieb:
> Letzlich werden alle Register des Prozessors, außer dem Stackpointer,
> dem PC, dem Statusregister und dem Basepointer-Register, falls
> vorhanden, als Scratchregister verwendet

Stimmt natürlich auch nicht.
Je nach Zielsystem (oder Toolchain) gibt es unterschiedliche 
Vereinbarungen, welche Register in einer Funktion geclobbert werden 
dürfen und welche nicht.

von Uhu U. (uhu)


Lesenswert?

Vlad Tepesch schrieb:
> Mit Scratchregistern beschäftigt man sich ja normalerweise nur, wenn man
> Asembler schreibt und Bibliotheksfunktionen benutzen will, dann muss man
> sowas wissen.

Oder wenn man Code debugt, zu dem man keine Quellen hat.

> Stimmt natürlich auch nicht.

Warum natürlich?

> Je nach Zielsystem (oder Toolchain) gibt es unterschiedliche
> Vereinbarungen, welche Register in einer Funktion geclobbert werden
> dürfen und welche nicht.

Oh, oh, oh. Ein Interrupt darf garnichts "clobbern".

Für Funktionsaufrufe aus einer Funktion heraus gelten gelockerte Regeln, 
weil die ja synchron zum aufrufenden Code laufen - die laufen dan unter 
Call Convention.

von Vlad T. (vlad_tepesch)


Lesenswert?

Uhu Uhuhu schrieb:
> Oh, oh, oh. Ein Interrupt darf garnichts "clobbern".
hab ich ja geschrieben.

>
> Für Funktionsaufrufe aus einer Funktion heraus gelten gelockerte Regeln,
> weil die ja synchron zum aufrufenden Code laufen - die laufen dan unter
> Call Convention.

Und die legt fest, welches Scratchregister sind, also welche ohne 
Bedenken vollgekritzelt werden dürfen und welche saubergehalten (oder 
wider hergestellt) werden müssen

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.