im GCC
Inhaltsverzeichnis:- Assemblerbefehle zur Interrupt Steuerung
- Nutzung der oberen 18 Bit des Ergebisses beim MUL Befehl im SFR_MUL Register beim GCC
- LCD Assemblerprogramme für 2*16 Zeichen Displays
- Assemblerproramme zur Nutzung der LEDs oder 7 segment Anzeige am SFR_LED Register
Header-Datei
Alle verfügbaren Funktionsaufrufe sollten in einer Header-Datei definiert werden.Die Header-Datei muss im Projektverzeichnis oder im SpartanMC-Verzeichnis liegen. Zum Beispiel könnte die Datei myfunc.h folgenden Aufbau haben:
void func1(void); int func2(int, int);
Aufruf in C
Im C-Quellcode können die Funktionen ganz normal verwendet werden:#include "myfunc.h" void main(void) { int result; func1(); result = func2(1, 2); }
Assembler-Routinen
Die Assembler-Funktionen werden in eine beliebige .s-Datei geschrieben.Vor dem ersten Assembler-Befehl steht ein Label mit dem Namen der Funktion der vorher noch global gültig gemacht wird. Dieses Label wird vom GCC mit dem Befehl JALS _func1 aufgerufen. Dementsprechend muss die Routine mit JRS R11 beendet werden. Eine Datei myfunc.s könnte folgenden Inhalt haben:
.global func1 func1: or r0, r0 ; NOP JRS R11 or r0, ro ; NOP wird im Delay Slot des JRS R11 ausgeführt. .global func2 func2: add r4, r5 JRS R11 or r0, ro ; NOP wird im Delay Slot des JRS R11 ausgeführt.
Der Befehl add r4, r5 könnte auch in den Delay Slot des JRS R11 verschoben werden. Die Funkion würde dann wie folgt aussehen:
.global func2 func2: JRS R11 add r4, r5
func1 übt sich der Einfachheit halber in Langeweile.
func2 addiert die beiden Aufrufparameter und gibt die Summe zurück.