C Control PRO Unit Mega 128 198219 ユーザーズマニュアル
製品コード
198219
218
Compiler
© 2013 Conrad Electronic
4.4.1
Ein Beispiel
enthalten) wird die Struktur von Assemb-
lerroutinen erklärt. Dabei muss in dem Projekt der CompactC Source Code die Endung ".cc" die As-
sembler Sourcen die Endung ".asm".
sembler Sourcen die Endung ".asm".
// CompactC Source
void
proc1
$asm("tag1")(void);
int
proc2
$asm("tag2")(int
a,
float
b,
byte
c);
int
glob1;
void
main(void)
{
int
a;
proc1();
a=
proc2(
11
,
2.71
,
33
);
}
Vor Aufruf der Assembler Prozeduren proc1 und proc2 müssen die beiden Prozeduren erstmal de-
klariert werden. Dies geschieht mit dem Befehlswort $asm. Die Deklaration sieht in Basic ähnlich
aus:
klariert werden. Dies geschieht mit dem Befehlswort $asm. Die Deklaration sieht in Basic ähnlich
aus:
' Basic Deklaration der Assembler Routinen
$Asm("tag1") proc1()
$Asm("tag2") proc2(a As Integer, b As Single, c As Byte) As Integer
Man sieht in der Deklaration die Strings "tag1" und "tag2". Diese Strings werden in einer ".def" Da-
tei definiert, wenn tatsächlich ein Aufruf der deklarierten Funktionen stattfand. In diesem Fall sieht
dann die ".def" Datei folgendermaßen aus:
tei definiert, wenn tatsächlich ein Aufruf der deklarierten Funktionen stattfand. In diesem Fall sieht
dann die ".def" Datei folgendermaßen aus:
; .def file
.equ glob1 =
2
.define tag1
1
.define tag2
1
Setzt man nun im Assembler Source die einzelnen Routinen in ".ifdef ..." Anweisungen, so werden
die Routinen nur assembliert, wenn ein Funktionsaufruf wirklich stattfand. Dies spart Platz bei der
Codegenerierung. Auch werden in der ".def" Datei die Positionen der globalen Variablen definiert. Die
".def" Datei wird automatisch zusammen mit den Assemblerdateien gemeinsam übersetzt, sie
braucht nicht extra inkludiert zu werden.
die Routinen nur assembliert, wenn ein Funktionsaufruf wirklich stattfand. Dies spart Platz bei der
Codegenerierung. Auch werden in der ".def" Datei die Positionen der globalen Variablen definiert. Die
".def" Datei wird automatisch zusammen mit den Assemblerdateien gemeinsam übersetzt, sie
braucht nicht extra inkludiert zu werden.
Hier folgt nun der Assembler Source der Prozedur proc1. In diesem Source wird die globale Variable
glob1 auf den Wert 42 gesetzt.
glob1 auf den Wert 42 gesetzt.
; Assembler Source
.ifdef tag1
proc1:
; global variable access example
; write 42 to global variable glob1