C Control PRO Unit Mega 128 198219 ユーザーズマニュアル

製品コード
198219
ページ / 429
218
Compiler
© 2013 Conrad Electronic
4.4.1
Ein Beispiel
Am folgenden Beispiel (ist auch in den 
 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".
// 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:
' Basic Deklaration der Assembler Routinen
$Asm("tag1") proc1()
$Asm("tag2") proc2(a As Integer, b As Single, c As ByteAs 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:
; .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.
Hier folgt nun der Assembler Source der Prozedur proc1. In diesem Source wird die globale Variable
glob1 auf den Wert 42 gesetzt.
; Assembler Source
.ifdef tag1
proc1:
    
; global variable access example
    
; write 42 to global variable glob1