Pins zur Verwendung durch eine Bibliothek definieren xc8

Ich habe einen Code, den ich in mehreren Projekten verwenden möchte, also möchte ich ihn in eine Bibliothek einfügen

Die Bibliothek verwendet keine speziellen Funktionen des Chips, und welche zwei Pins sie auch verwendet, um ihre Arbeit zu erledigen, müssen nur allgemeine E / A sein

Da ich beabsichtige, dies für mehrere Projekte zu verwenden, müssen diese Projekte angeben, welche Pins diese beiden Pins auf Projektbasis sind

Meine Frage ist, wie ich meine Bibliothek und meinen Code in jedem Projekt einrichten kann, damit ich definieren kann, welche Pins ich in jedem Projekt verwenden möchte - unabhängig von der Bibliothek.

Verwenden des XC8-Compilers für PIC10s und 16s

Jede Anleitung geschätzt

Antworten (2)

Ich weiß nicht, ob sich das in letzter Zeit geändert hat, aber vor ein oder zwei Jahren kontaktierte ich den technischen Support von Microchip, der bestätigte, dass XC8 Bibliotheken als solche nicht unterstützt.

Was Sie tun können, ist, die C-Datei in einem "freigegebenen" Ordner zu haben und sie in die verschiedenen Projekte aufzunehmen.

Die Stifte können sein:

  • definiert durch Makros (#define) entweder in Compiler-Optionen oder in einem Header mit einem vordefinierten Namen, zB "hardwareconfig.h", den Ihr Modul enthalten und die Projekte bereitstellen würden;
  • geliefert bei der Initialisierung durch Zeiger auf LAT/PORT-Register und Masken der Bits;
  • Ihr Modul könnte Funktionen für die Handhabung von Pins auf niedriger Ebene deklarieren, diese aufrufen, und die verschiedenen Projekte würden sie nach eigenem Ermessen implementieren.

Definieren Sie eine Strict-Klasse, die Bits unterstützt. Setzen Sie das strikt auf Ihre Variablen und Sie haben adressierbare Bits.

Oder verwenden Sie die in Ihrer Header-Datei definierten Erzen.

Bearbeiten: Um das, was ich zuvor gesagt habe, ein wenig zu erweitern, hier ist ein Beispiel dafür, wie dies an einem 8-poligen Anschluss erfolgen könnte.

//define a bit-addresable byte
typedef struct {
    uint8_t B0:1;                           //bit definitions
    uint8_t B1:1;                           //bit definitions
    uint8_t B2:1;                           //bit definitions
    uint8_t B3:1;                           //bit definitions
    uint8_t B4:1;                           //bit definitions
    uint8_t B5:1;                           //bit definitions
    uint8_t B6:1;                           //bit definitions
    uint8_t B7:1;                           //bit definitions
} B8_TypeDef;

//global variables
#define LED0            (((B8_TypeDef *)&PORTB)->B0)    //led0 on PORTB.0

//in your main loop
    while (1) {
        //flip LED0/PORTB.0
        LED0 = 1;                           //set LED0/PORTB.0
        LED0 = 0;                           //clear LED0 / PORTB.0

Wenn Sie die vorgefertigte Header-Datei durchgehen, werden Sie einen identischen Ansatz finden, außer dass jede Typedef einen anderen Namen hat.

So geht das in der Simulation:Geben Sie hier die Bildbeschreibung ein

Das gleiche Konzept kann auf Variablen oder 16/32-Bit-Typen angewendet werden, sofern der Compiler Bittypen unterstützt.