Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
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);
}
}
Schritt 3: Aufteilen in zwei Dateien¶
MyLed.h
#include "mbed.h"
#ifndef MYLED_H
#define MYLED_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;
};
#endif
Implementierung der Methoden
MyLed.cpp
#include "mbed.h"
#include "MyLed.h"
void MyLed::ledOn(void) {
_led = 1;
}
void MyLed::ledOff(void) {
_led = 0;
}
void MyLed::printStatus(void) {
printf("LED is now: %d\n", _led.read());
}
Datei mit der Funktion "main()"
main.cpp
#include "mbed.h"
#include "MyLed.h"
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);
}
}