Entscheiden Sie sich für welchen Compiler für PIC18F26K22 in MPLAB X, C18 oder XC8?

Ich versuche zum ersten Mal, einen Mikroprozessor zu programmieren, und habe viele, viele Zweifel.

Ich habe sowohl den C18- als auch den XC8-Compiler und einige andere installiert. Wenn ich ein neues Projekt erstelle und meinen Mikroprozessor PIC18F26K22 auswähle, kann ich zusätzlich zu den beiden mpasm-Assemblern zwischen diesen beiden Compilern wählen. Wenn sie beide zur Auswahl stehen, bedeutet das, dass sie beide funktionieren?

Wie entscheide ich, welches ich verwenden soll? Ich habe versucht zu googeln, aber ich kann die Antwort nicht finden; vielleicht, weil ich nicht weiß, wonach ich googeln soll und nicht weiß, wie ich die Ergebnisse lesen soll. Oder macht es vielleicht keinen wirklichen Unterschied, welchen ich auswähle?

Verwenden Sie XC8, der C18-Compiler wurde vor einiger Zeit als veraltet markiert.

Antworten (2)

Wie Roger sagt, verwenden Sie XC8. Es ist der neuere Compiler.

Der C18-Compiler ist veraltet und unterstützt keine neueren Geräte.

Ein weiterer Nachteil von C18 ist, dass es nur die PIC18-Familie von Mikrocontrollern unterstützt, im Gegensatz zu XC8, das alle 8-Bit-PIC-Mikrocontroller unterstützt: PIC10, PIC12, PIC16, PIC18.


Ich würde auch argumentieren, dass XC8 (das auf dem HI-TECH C Compiler basiert) etwas einfacher zu verwenden ist als C18. Schauen Sie sich einfach an, wie Sie eine ISR in beiden Compilern deklarieren würden:

C18 :

void isr(void)
{
   /* ... */
}

#pragma code high_vector=0x08

void interrupt_at_high_vector(void)
{
    _asm GOTO isr _endasm
}

#pragma code

#pragma interrupt isr

gegen XC8 :

void interrupt isr(void)
{
   /* ... */
}

C18 ist der alte Microchip-Compiler, und XC8 ist der neue Microchip-Compiler, den sie von HiTech gekauft haben (oder zumindest einen ähnlichen Namen, den Aussie-Compiler).

XC8 hat die aktuelle Unterstützung und ist das, was Microchip vorantreibt. Wenn Sie mit PICs bei Null anfangen, dann ist dies wahrscheinlich das, was Sie wollen.

Es gibt jedoch in beiden Fällen einige Probleme, die Sie beachten sollten. XC8 implementiert keinen Software-Stack. Es führt auch seine eigene Verknüpfung durch, indem es ein inkompatibles Binärformat zu dem von C18 und MPASM verwendet. Wenn Sie vorhaben, C und Assembler zu mischen, und insbesondere wenn Sie vorhandene MPASM-Module haben oder erwarten, welche von anderen zu bekommen, dann halten Sie sich von XC8 fern.

Auf der anderen Seite hat C18 auch seine Probleme. Während der Codegenerator robust zu sein scheint, sind einige seiner Strategien zur Verwendung der PIC 18-Hardware "weniger als brillant". Es implementiert einen Softwarestapel, wählte jedoch ein Layout, das den einen Pre/Post-Inc/Dec-Adressierungsmodus erfordert, den der PIC 18 nicht hat. Duh! Es reserviert auch zwei der drei FSR-Register für seine eigene Verwendung. Es verwendet auch ein Caller-Clean-Stack-Modell für Subroutinenaufrufe. Das bedeutet, dass Subroutinen keine Daten aus dem Stack entfernen können, mit dem sie fertig sind, bevor sie andere Subroutinen aufrufen. Das Ergebnis ist, dass der Stapel erheblich mehr Platz benötigt, als er sollte.

Persönlich bleibe ich bei MPASM bei den 8-Bit-PICs. Ich habe C18 in der Vergangenheit für einige gemischte C/ASM-Projekte verwendet, aber das lag nur daran, dass ich Code auf diese Weise erhalten habe. Es war immer schwieriger, wenn der Compiler beteiligt war, im Vergleich zu einem reinen MPASM-Projekt. Ich habe auch viele in MPASM geschriebene Subsysteme bereits auf der Festplatte, also muss ich meistens nur die für das Projekt spezifische Logik hinzufügen. Dinge wie UART-Handler, USB-Geräte, TCP/IP-Stack und viele andere Einrichtungen sind bereits vorhanden.