Forum: Mikrocontroller und Digitale Elektronik ISR overhead bei Rücksprung


von aubacke (Gast)


Lesenswert?

Ich programmiere gerade an einem PIC18F4580 in C. Folgendes Szenario:
In der ISR zur SPI gibt es 2 Befehle (IFlag zurücksetzen und Register 
beschreiben). Das erzeugte Disassembly zeigt mir, dass nach Abarbeitung 
dieser ISR 4 Befehle benötigt werden um zurückzuspringen (2x MOV, NOP, 
RETFIE).

Packe ich diese zwei Befehle in eine Funktion vom Typ void SPI_ISR(void) 
und rufe diese Funktion in der ISR auf, braucht es für den Rücksprung 
nach Abarbeitung über 20 Befehle.

Warum ist dies so ?

Grüße

von Dieter Werner (Gast)


Lesenswert?

Schau Dir mal den vom Compiler erzeugten Assemblercode an.

Wenn in der ISR ein Funktionsaufruf erfolgt, wird ein Stack für lokale 
Variablen angelegt und einige Register gesichert - unabhängig davon ob 
das überhaupt benötigt wird.

Aber der Compiler (C18, gekauft) ist auch für andere Schandtaten gut:
ich habe in einem Projekt eine short long int (24 Bit) a definiert.
Wenn ich jetzt die Anweisung a = -a ins Programm schreibe, macht der 
Compiler eine 24 x 24 Bit signed Multiplikation mit dem Wert -1 daraus 
!!

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.