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