Welche Chipnamen-Makros sind im HI-TECH C-Compiler verfügbar?

Ich verwende den HI-TECH C-Compiler für den PIC16-Mikrocontroller und möchte verschiedene Codeabschnitte bedingt kompilieren, je nachdem, welcher spezifische Mikrocontroller ausgewählt wurde.

Ich weiß, dass Sie Code bedingt kompilieren können mit etwas wie:

#if defined(MACRO1)  
    ... compile this code ... 
#elif defined(MACRO2) 
    ... compile this code ...
#endif

Was ich wissen muss, ist, welche vordefinierten Makros im HI-TECH C-Compiler verfügbar sind, mit denen ich den spezifischen Mikrocontroller auswählen kann?

Das hängt davon ab, welche Toolchain Sie verwenden.
Ich verwende den HI Tech C-Compiler.

Antworten (3)

Seite 98 des HITEC C Handbuchs listet alle vordefinierten Makros auf.

Einer der Einträge lautet:

_CHIPNAME Zur Angabe des spezifischen ausgewählten Chiptyps, z. B. _16F877

Sie haben also als andere Beispiele:

  • _16F88
  • _16F84A
  • _16F505
  • _16F777
  • _16F1823
  • ...

usw.

Wenn Sie nach bedingtem Kompilieren von Code für verschiedene PICs unter Verwendung des definierten Namens fragen, können Sie das vordefinierte _CHIPNAME-Makro verwenden, das auf Seite 106 des 9.81-Handbuchs erwähnt wird.
Oder Sie können die Familie verwenden (z. B. _PIC12, _PIC14, _PIC14E wie in derselben Tabelle erwähnt) oder einfach Ihre eigene definieren.

Es scheint, als ob Sie je nach Zielchip eine bedingte Assemblierung (oder Kompilierung) wünschen, obwohl Ihr Beispiel etwas unklar ist. Ich glaube nicht, dass Sie DEFINE wie in Ihrem ersten Fall in das Ziel eines #IF setzen können, und Sie scheinen in beiden Fällen auf dasselbe zu testen.

In jedem Fall ist ein Symbol für die spezifische PIC-Modellnummer definiert, wie in der MPASMWIN-Befehlszeile oder mit der LIST-Direktive angegeben. Die modellspezifischen Include-Dateien enthalten eine Überprüfung, um sicherzustellen, dass das richtige Modell ausgewählt wird, das der Include-Datei entspricht. Sie können also schreiben:

#ifdef __18f2520
     ; Der Code hier ist nur enthalten, wenn das Ziel PIC 18F2520 ist
  #endif
Ich denke, das ist ein Tippfehler. Wenn Sie das gesamte Code-Snippet lesen, sehen Sie, dass das zweite definiert ist (...) , was vollkommen gültig ist.
Und das "pic16macro" ist ein Platzhalter für das Ziel der Frage: "Was soll das OP dort einfügen?"
@Majenko: Die ursprüngliche Frage war sehr schlecht geschrieben, so dass sie etwas verwirrend war. Wie ich sehe, hat Kevin dies nun behoben und die sehr wichtigen Informationen hinzugefügt, nach denen HITECH C gefragt wird. Ich bin mit diesem Compiler nicht vertraut, also dachte ich, es könnte an einer Stelle für DEFINE und an einer anderen für DEFINED relevant gewesen sein. Sie erwarten wirklich nicht zwei Fehler in einem 4-zeiligen Beispiel, das speziell zur Veranschaulichung Ihrer Frage geschrieben wurde. Hätte sich das OP nicht die Mühe machen können, Korrektur zu lesen, was er geschrieben hat!?