www.mikrocontroller.net

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


Autor: pacer (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: g457 (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Uhu Uhuhu (uhu)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Peter R. (pnu)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Vlad Tepesch (vlad_tepesch)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: pacer (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
vielen Dank, ich denke ich habe es verstanden.

Gruß, pacer

Autor: Uhu Uhuhu (uhu)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Vlad Tepesch (vlad_tepesch)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Uhu Uhuhu (uhu)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Vlad Tepesch (vlad_tepesch)
Datum:

Bewertung
0 lesenswert
nicht 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

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.