im LCC

Nur zum Verständis alter C-Programme. Der LCC kann in neuen Programmen nicht mehr verwendet werden!

Inhaltsverzeichnis:

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



SpartanMC