Franz Pucher / HIM0Board

You are viewing an older revision! See the latest version

Erzeugen einer Bibliothek

Siehe auch Writing your own mbed library

Was ist eine Bibliothek (Library)

Eine Bibliothek (Library) hier ist eine Ansammlung von Funktionen (Methoden), die in der Regel darauf ausgerichtet ist, eine bestimmte Komponente, Peripherie oder Funktionalität zu aktivieren. Typischerweise liegen Bibliothek bereits in kompilierter Form vor. Sie besteht aus zwei Teilen: dem Archiv und dem Interface in Form von Headern. Ohne Header ist eine Bibliothek nicht verwendbar, da die Deklarationen (und damit das Interface) fehlen. Der Hauptpunkt einer Bibliothek besteht darin, etwas Nützliches zu verpacken, damit sie und andere nicht ständig "das Rad" neu erfinden müssen, wenn Sie ein Gerät oder eine Funktionalität verwenden möchten. Sie können es sich als einen Baustein für ein Programm vorstellen. Wichtig ist, dass es kein Programm an sich ist, z.B. es hat keine main () -Funktion, ist aber eine nützliche und wiederverwendbare Komponente in einem Programm.

Als Referenz hier einige Beispiel-Bibliotheken:

Wie erzeugt man eine Bibliothek

Eine gute Bibliothek hat einen klaren Zweck, eine saubere Schnittstelle und enthält nicht den Code, der andere Dinge tut - dafür ist das Programm des Benutzers bestimmt.

Die meisten Bibliotheken starten tatsächlich als Code, der sich als nützlich erweist, werden dann in eine nützliche Klasse oder einen Satz von Funktionen umgeformt (Methoden), die an mehreren Stellen in einem Programm wiederverwendet werden können. Schließlich werden sie vom ursprünglichen Programm getrennt, so dass jedes weitere Programm diese einschließen (include, import) und benutzen kann, ohne den Code neu eingeben zu müsse.

Schauen wir uns die wesentlichen Schritte an:

Schritt 1: Verwenden von Funktionen

Codeteile, die öfter in einem Programm verwendet werden sollen, werden in Funktionen mit oder ohne Parameter bzw. Rückgabe-Werte codiert:

#include "mbed.h"

DigitalOut led(LED1);

// Funktionsdefinition
void ledOn(void) {
    led = 1;
}

void ledOff(void) {
    led = 0;
}

void printStatus(void) {
    printf("LED is now: %d\n", led.read());
}

int main() {
    while (1) {
        ledOn();   // Funktionsaufruf
        printStatus();
        wait_ms(500);
        ledOff();
        printStatus();
        wait_ms(500);
    }
}

Funktionsprototyping von der Codierung der Funktionen (Funktionsdefinition) trennen:

#include "mbed.h"

// Funktionsprototyping 
void ledOn(void);
void ledOff(void);
void printStatus(void);

DigitalOut led(LED1);

int main() {
    while (1) {
        ledOn();     // Funktionsaufruf
        printStatus();
        wait_ms(500);
        ledOff();
        printStatus();
        wait_ms(500);
    }
}

//Funktionsdefinition
void ledOn(void) {
    led = 1;
}

void ledOff(void) {
    led = 0;
}

void printStatus(void) {
    printf("LED is now: %d\n", led.read());
}

Schritt 2: Erzeugen einer Klasse

siehe auch Methoden in C++ und ihre Implementierung.

#include "mbed.h"

class MyLed {
public:
// Konstruktor
    MyLed(PinName led) : _led(led) {    // Initalisierungsliste
        _led = 0;                       // Initialisierung mit 0
    }
// Methodenprototyledg
    void ledOn(void);
    void ledOff(void);
    void printStatus(void);

private:
    DigitalOut _led;
};

// Methodendefinition
void MyLed::ledOn(void) {
    _led = 1;
}
 
void MyLed::ledOff(void) {
    _led = 0;
}
 
void MyLed::printStatus(void) {
    printf("LED is now: %d\n", _led.read());
}

MyLed myled2(LED2);         // Instanziierung des Objekts

int main() {
    while (1) {
        myled2.ledOn();     // Zugriff auf die Methode über "."-Operator
        myled2.printStatus();
        wait_ms(500);
        myled2.ledOff();
        myled2.printStatus();
        wait_ms(500);
    }
}

All wikipages