Hardwareprogrammierung auf RaspberryPI mit C++
-
Hallo und Guten Abend,
ich bin gerade dabei mich in die Programmierung unter Linux mit dem RaspberryPI einzuarbeiten. Als einfachen Einstieg möchte ich eine Leuchtdiode ein- und ausschalten.
Ich nutze dazu die Beispielprogramme der Seite http://www.open.com.au/mikem/bcm2835/. Das Beispiel blink.c, welches in der Konsole kompiliert und ausgeführt wird funktioniert ohne Probleme.
Nun möchte ich aber in Eclipse programmieren und habe dazu folgenden Quelltext geschrieben :
/* * main.cpp * * Created on: 6 Jan 2013 * Author: pi */ // Headerdateien einbinden #include </usr/include/bcm2835/bcm2835.h> // digitales Ausgabepin deklarieren #define GREENLED RPI_GPIO_P1_11 int main() { // Hardware initialsieren if (bcm2835_init()) { // Initialisierung erfolgreich, also PIN als Ausgang freigeben bcm2835_gpio_fsel(GREENLED, BCM2835_GPIO_FSEL_OUTP); // Leuchtdiode zehn Mal blinken lassen for (int index = 0; index < 10; index++) { // Leuchtdiode einschalten bcm2835_gpio_write(GREENLED, HIGH); // t = 500ms warten bcm2835_delay(500); // Leuchtdiode wieder ausschalten bcm2835_gpio_write(GREENLED, LOW); // erneut t = 500ms warten bcm2835_delay(500); } // Hardware deinitialisieren bcm2835_close(); // Rücksprung return 0; } else { // Fehler bei Initialisierung return 1; } }
Nun zu meinem Problem. Ich bekomme die Fehlermeldung "undefined refernce to 'bcm2835_init()'", etc. Also für alle Funktionsaufrufe, die diese Hardware betreffen. Nun stehe ich auf dem Schlauch, die notwendige Headerdatei habe ich eingebunden. In ihr sind die Funktionen über den Befehl "external" deklariert. Wieso funktioniert die C-Variante in der Konsole? Muss ich weitere Dateien einbinden?
Vielleicht kann mir jemand von euch einen Tipp geben, vielen Dank im voraus.
lg Torsten
-
Du hast scheinbar vergessen die Bibliothek, die diese Funktionen zur Verfügung stellt, zu linken. Wie sieht denn dein Konsolenbefehl für die Kompilierung aus? Wenn du nicht weisst nach welchen Libs du suchen musst, aber erfolgreich in der Konsole kompilieren konntest, dann kannst du dort die namen der Bibliotheken ablesen. Wie man unter Eclipse zusätzliche Abhängigkeiten einstellt weiss ich nicht, aber es gibt sicher eine Anleitung im I-net. (schließlich bist du ja nicht der einzige der CDT nutzt)
-
Die c-Datei wird wie folgt kompiliert und gestartet :
gcc -o blink -l rt blink.c -l bcm2835
sudo ./blinkEs wird wahrscheinlich etwas mit "bcm2835" zu tun haben, oder? Ich bin eben auch Linux Neueinsteiger und blicke mit der Konsole noch nicht so ganz durch.
lg Torsten
-
"undefined reference" ist eine Fehlermeldung des Linkers. Da kannst Du Header einbinden wie Du willst. Dem Linker wird es egal sein.
Eine extern-Deklaration sagt dem Compiler, dass es die Funktion gibt. Du musst eben mit dem Flag -l dem Linker sagen, dass er die entsprechende Bibliothek einbinden soll. -lrt und -lbcm2835 sind offensichtlich die Linker-Flags, die Du brauchst. Schau mal, wo Du das in Eclipse eintragen kannst.
-
Dieser Thread wurde von Moderator/in nman aus dem Forum Linux/Unix in das Forum Compiler- und IDE-Forum verschoben.
Im Zweifelsfall bitte auch folgende Hinweise beachten:
C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?Dieses Posting wurde automatisch erzeugt.
-
Vielen Dank für die Hilfe, nach ein bisschen experimentieren funktioniert es jetzt. Ich glaube ich muss mich langsam mal mit der Geschichte "kompilieren, linken, etc." beschäftigen
lg Torsten