mal ein kleines beispiel:
Du willst einen IO-Pin des uC setzen / rücksetzen.
In Assembler musst Du dafür die Adresse des Ports mit irgendwas verodern z.B. Du willst das 4te Bit eines Ports setzen, das wäre dann ungefähr
|
Quellcode
|
1
|
OR #3c3, 0x4
|
die genaue asm-syntax kenn ich jetzt nicht, aber das soll heißen, "Verodere Adresse 3c3 mit hex 4", also setze das vierte bit.
So, in C kann man sich dafür nun schöne defines schreiben:
|
Quellcode
|
1
2
3
4
5
|
#define PORT1 0x3c3
#define BIT4 (0x1 << 4)
#define SET_BIT(port, bit) port |= bit
SET_BIT(PORT1, BIT4)
|
ZUM BEISPIEL!
Also das kann man sicher auch anders machen, aber du kannst halt dein gesamtes C-Arsenal drauf loslassen. Für so triviale Sachen wie Bit-Setzen wird das jetzt wahrsch. nicht so deutlich, aber wenns komplizierter wird sind dann halt schnell ne ganze handvoll asm-codes in einer einfachen c-anweisung untergebracht. der c-code ist auf jeden fall auch ohne kommentar in jeder zeile gut lesbar, udn vor allem wartungsfreundlich.
Und ich kann dir mi 99%iger Sicherheit sagen, dass der Code SET_BIT... usw in genau den obigen Assembler-Befehl vom Compiler übersetzt wird.
Das aber nur zur Info, als für kleine Sachen ist asm sicher ne gute Wahl... aber zumindest mir gehts halt so:
Jetzt hab ich das implementiert, jetzt kann man noch das unterstützen, und hier erweitern... und da auch noch... und dann wird der kleine Controller schnell ZU klein, und der asm-Code unwartbar.
Also schreib ich lieber gleich C