im LCC
Nur zum Verständis alter C-Programme. Der LCC kann in neuen Programmen nicht mehr verwendet werden!Inhaltsverzeichnis:
- Nutzung einiger TRAP Aufrufe des Monitors in C.
- Dezimale Ein- und Ausgabe in C mit Nutzung von Monitor TRAP Aufrufen.
- Nutzung der oberen 18 Bit des Ergebisses beim MUL Befehl im SFR_MUL 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 .inc-Datei geschrieben.Vor dem ersten Assembler-Befehl steht ein Label mit dem Namen der Funktion und einem vorangestellten Underscore (_). Das Label wird mit JALS _func1 aufgerufen. Dementsprechend muss die Routine mit JRS R11 beendet werden. Eine Datei myfunc.inc könnte folgenden Inhalt haben:
_func1: NOP() JRS R11 _func2: add R4, R5 JRS R11
func1 übt sich der Einfachheit halber in Langeweile.
func2 addiert die beiden Aufrufparameter und gibt die Summe zurück.
Compiler-Option
Der Compiler muss die Assembler-Datei in den generierten Assembler-Code einbinden. Durch die Option -Wf-include-asm=myfunc.inc bzw. -Wf-include-stdasm=myfunc.inc (siehe Aufrufparameter) werden alle Funktionen dieser Datei im C-Quellcode verfügbar.Durch die mehrfache Angabe dieser Option können beliebig viele Assembler-Dateien eingebunden werden.
Beispiele
Einige Beispiel-Implementierung wurden bereits als Standard Includ im Verzeichnis lib im SpartanMC-Verzeichnis erstellt. Folgende Programme können dort geladen werden:Compileraufruf | C Einbindung | Funktionsaufrufe | Bemerkung |
-Wf-include-stdasm=monitor.inc | #include <monitor.h> | monitor_print, monitor_putchar, monitor_getchar ... | Nutzung einiger TRAP Aufrufe des Monitors in C. |
-Wf-include-stdasm=dez_io.inc | #include <dez_io.h> | monitor_putdez, monitor_getdez | Dezimale Ein- und Ausgabe in C mit Nutzung von Monitor TRAP Aufrufen. |
-Wf-include-stdasm=interrupt.inc | #include <interrupt.h> | interrupt_disable, interrupt_enable | Assemblerbefehle zur Interrupt Steuerung |
-Wf-include-stdasm=lcd.inc | #include <lcd.h> | lcd_print, lcd_putchar, lcd_init, ... | LCD Assemblerprogramme für 2*16 Zeichen Displays |
-Wf-include-stdasm=led7.inc | #include <led7.h> | led7_set, led7_get, led7_hex, ... | Assemblerproramme zur Nutzung der LEDs oder 7 segment Anzeige am SFR_LED Register |
-Wf-include-stdasm=mul_high.inc | #include <mul_high.h> | int mul_high(); | Nutzung der oberen 18 Bit des Ergebisses beim MUL Befehl im SFR_MUL Register |