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
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.
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.
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.
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.
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.
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.
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.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.