Forum: Mikrocontroller und Digitale Elektronik Register und RAM


von René (Gast)


Lesenswert?

Hallo,

wie am besten vorgehen bei der asm Programmierung. Bei der Aufteilung
der Register und Benutzung des RAM Speichers.

Komme jetzt doch bei der etwas unbedarften Programmierung an meine 
Grenzen
da die Register teilweise doppelt belegt sind und ich kaum den RAM zur 
Speicherung benutzt habe. Jetzt wirds eng.
Habe auch noch Interrups die zwischendurch zu laufen.
Wie bringe ich Ordnung in mein "Caos"?

vorschläge meinerseits sind die:

Register die in den Interrups benutzt werden vor der Ausführung 
zwischenzuspeichern mit Push und am ende per Pop.

oder das Grundsätzlich im gesamten Programm zu machen.

Wie geht Ihr vor?
Gibt es sozusagen die Goldene Regel?

und
Frohes neues noch.

Gruß René

von Knut B. (Firma: TravelRec.) (travelrec) Benutzerseite


Lesenswert?

Sag doch erst mal: welcher Controller? Dann poste Dein Programm und 
dann sehen wir weiter.

von René (Gast)


Lesenswert?

@Travel Rec.

Controller Atmel mega 8515

Programm ist uninteressant hier geht es um die grundsätzliche 
Vorgehensweise beim Programmieren.
Sozusagen um das Grundrezept bei der Verwendung des Ram.

von Knut B. (Firma: TravelRec.) (travelrec) Benutzerseite


Lesenswert?

>Programm ist uninteressant hier geht es um die grundsätzliche
>Vorgehensweise beim Programmieren.

Genau deswegen wäre es interessant, einen Blick in Dein Programm zu 
werfen und Dir die Grundsätze anhand praktischer (von Dir verzapfter) 
Beispiele zu erläutern.

von 1234 (Gast)


Lesenswert?

Wich in diesem Zusammenhang ist auch die Haeufigkeit der Interrupts. 
Wenn man alle 20us einen Timer hat, so sollte man nur noch wenige 
register umladen muessen. Generell ist Daten in Registern zu halten 
erstrebenswert, macht das Programm aber schwerer wartbar.

von Μαtthias W. (matthias) Benutzerseite


Lesenswert?

Hi

du kannst dich ja daran orientieren wie es ein C-Compiler macht. Die 
Entwickler von so einem Ding haben das gleiche Problem nur eine Stufe 
extremer weil sie bei der Generierung des ASM/OBJ-Codes garnichts über 
andere Module wissen. Das lößt erst der Linker auf. Es werden also feste 
Register definiert die eine bestimmte Aufgabe übernehmen.

http://www.nongnu.org/avr-libc/user-manual/FAQ.html#faq_reg_usage

Sowas ähnliches solltest du auch basteln. Also ein paar Register 
übernehmen immer die Paramterübergabe an Funktionen, einige kann man 
immer frei benutzen usw. Mußt die halt eine Art "Regelbuch" aufstellen 
und dich immer daran halten. Register die in einem Unterprogramm 
überschrieben werden mußt du vorher eben mit push sichern.

Da du ja ASM machst kannst du dann noch solche Spielchen treiben wie 
einige Register fest einer ISR zuzuteilen um maximale Geschwindigkeit 
herauszuholen wenns nötig ist.

Matthias

von Michael U. (amiga)


Lesenswert?

Hallo,

mein persöhnlicher "Geschmack", wenn ich "planlos" was teste:

r16-r19 sind immer temporäre Register, deren Inhalt ist also für keinen 
anderen Programmteil garantiert und jede Subroutine darf die ändern.

Wenn sie in einer IRQ genutzt werden müssen, dort natürlich PUSH/POP,
wenn eine aufrufende Routine den Inhalt eines Temp-Registern noch 
braucht und eine Subroutine aufruft, muß sich die aufrufende Routine um 
PUSH/POP kümmern.
Meist genutzt: r0/r1 als Ergebnisregister von MUL, r2 als schneller 
Zwischenspeicher für SREG in IRQ, r3 mit 0 initialisiert für 
Rechenroutinen.

X/Y/Z für Zeiger/16Bit-Sachen.

Der Rest erstmal, wie es sich ergibt. Alles, was selten gebraucht wird 
oder mehrere Register benötigen würde kommt erstnal ins Ram.
Display-Buffer, ADC-Werte als Beispiel.
Das Zählregister für einen IRQ, der alle 100ms einen Wert erhöht, kann 
ruhig im Ram liegen, bei 100µs dagegen eher nicht.

Möglichst zum Rechnen die unteren Register nehmen, nur wenn wirklich LDI 
usw. nötig sind und nicht sinnvoll umgangen werden können, entweder auf 
obere ausweichen oder den Kram von unten in die Temp-Register kopieren 
und danach zurück.

Das ist jetzt so "aus dem Hut" aufgeschrieben, ansonsten dem Vorschlag 
von Travel Rec. folgen und mal ein Programm posten.

Gruß aus Berlin
Michael

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.