Hallo,
ich habe ein Problem. Und zwar möchte ich den Code dieser Seite nutzen:
http://www.daniel-papenfuss.de/2013/02/projektvorstellung-raspberry-pi-wecker-wip-schritt-1-2/
(Bau eines Weckers mit RaspberryPi). Ich habe den Aufbau 1:1 übernommen,
alles richtig Angeschlossen. Dann unter Raspbian mit "nano" auf dem
Desktop eine display.c-Datei erstellt, und den oben verlinkten Code
reinkopiert. Nun möchte ich diese Datei noch Kompilieren:
- gcc -v -o display display.c
aber hier kommen auch schon die ersten Fehler:
root@Dieter-RaspberryPi ~/Desktop $ gcc -o display display.c
display.c: In function âmainâ:
display.c:25:18: error: âampâ undeclared (first use in this function)
display.c:25:18: note: each undeclared identifier is reported only once
for each function it appears in
display.c:25:21: error: expected â)â before â;â token
Woran kann das liegen und was habe ich Falsch gemacht ? Ist eines meiner
ersten C-Projekte.
MFG
Chekker schrieb:> Woran kann das liegen und was habe ich Falsch gemacht ? Ist eines meiner> ersten C-Projekte.
du hast scheinbar UTF8 aus dem Netz kopiert. Das geht bei C aber nicht.
Kopiere den Inhalt vorher in einen einfache Textdatei (Notepad) und dann
erst zu dem Linux.
Abend,
auch das vorherige Kopieren in eine Textdatei hat leider nichts
gebracht. (Hätte ich mir auch denken können, da ich den Code per Hand
abgeschrieben hatte!) Es kommt immer noch die Selbe Fehlermeldung..
Entweder das was Peter gesagt hat, oder deine Fehlermeldung verwendet
anstatt von Hochkomma das Zeichen â.
Egal was es ist, vergiss diesen Code. Wenn du gerade C lernst, verwende
ihn nicht um davon irgendwas zu lernen.
Begründung:
- Der Code hat Strichpunkte hinter die #include Anweißung. Die gehören
da nicht hin.
- Die maximale Länge der 'Uhrzeit' und 'Datum' arrays wird der Funktion
strftime() mit 100 übergeben. In wirklichkeit sind beide arrays nur 80
byte groß. Buffer overflow gefahr(zumindest prinzipiell, in diesem fall
wird der String vermutlich nie länger als 80 Zeichen).
- sleep(0.25); sleep bekommt als parameter einen unsigned int, also eine
ganz Zahl. Hier würde also 0.25 zu der Ganzzahl 0 gekürzt werden.
- Das '&' über das der Compiler hier stolpert soll nur ein '&' sein.
Das fällt mir so beim schnellern drüberschaun auf, vermutlich hat der
Code noch mehr Probleme.
ein ";" zwischen Parametern im Funktionsaufruf ist ungewöhnlich. Ich
hätte dort ein "," erwartet. Und die Definition von "amp" sehe ich auch
nicht. Man könnte meinen, der Compiler hat recht mit seinen Meckereien.
Html und Text gemischt?
Und wie behebe ich die Fehler?
Die "Strichpunkte" habe ich schon von alleine Entfernt, denn wenn die
hinter der Include stehen, bekomme ich noch Fehler, die für jede
include-"zeile" zutreffen.
Die größe der Datei beträgt "880 Bytes".
Es geht in diesem Projekt nicht vorrangig darum C zu lernen (fänd ich
aber später ganz Interessant, vielleich im Winter ;-)) sonder meinem
RaspberryPi eine nützliche funktion zuzuweisen, indem er meinen Defekten
Wecker ablöst. Schade ist halt nur das das Programm nicht funktioniert,
da der Hardwareaufbau schon Fertig ist..
Nachdem ich das & (amp) entfernt habe, bekomme ich nur noch folgende
Fehler:
display.c: In function âmainâ:
display.c:26:18: error: expected expression before â;â token
Habe den Fehler gefunden,
es war ein überflüssiges "Semilikon" (";").
Nun kompiliert er ein paar Sekunden (Denke ich) und dann kommt folgende
Ausgabe:
pi@Dieter-RaspberryPi ~/Desktop $ gcc -o display display.c
/tmp/ccKjoV0x.o: In function `main':
display.c:(.text+0xc): undefined reference to `wiringPiSetup'
display.c:(.text+0x94): undefined reference to `lcdInit'
display.c:(.text+0xf8): undefined reference to `lcdPosition'
display.c:(.text+0x108): undefined reference to `lcdPuts'
display.c:(.text+0x118): undefined reference to `lcdPosition'
display.c:(.text+0x128): undefined reference to `lcdPuts'
display.c:(.text+0x134): undefined reference to `pinMode'
Was genau soll mir das denn jetzt Sagen?
MFG
Ich habe leider eine Zeile der Fehlermeldung übersehen:
collect2: ld returned 1 exit status
die hing noch ganz unten dran.
Leider komme ich ohne eure Hilfe absolut nicht mehr weiter..
Moin Marcel,
WiringPi ist installiert, damit steuerte ich immer die Ports. Wenn ich
die Lib mit übergebe, (-> gcc -o display display.c -lwiringPi) dann
entfallen wenigstens schoneinmal ein paar der Fehlermeldungen.
Nun kommen nur noch folgende:
pi@Dieter-RaspberryPi ~/Desktop $ gcc -o display display.c -lwiringPi
/tmp/ccqY4bmq.o: In function `main':
display.c:(.text+0x94): undefined reference to `lcdInit'
display.c:(.text+0xf8): undefined reference to `lcdPosition'
display.c:(.text+0x108): undefined reference to `lcdPuts'
display.c:(.text+0x118): undefined reference to `lcdPosition'
display.c:(.text+0x128): undefined reference to `lcdPuts'
collect2: ld returned 1 exit status
Bekommen wir die mit eurer Hilfe auch noch weg?
MFG
Die LCD-Funktionen sollten eigentlich in der wiringPi-Bibliothek
enthalten sein. Du kannst im Verzeichnis /usr/lib oder /lib (oder wo
immer die Bibliothek) installiert ist, mit
1
nm libwiringPi.a
oder
1
nm -D libwiringPi.so
eine Liste der Symbole ausgeben, die in der Bibliothek definiert sind.
Da sollten u.a. wiringPiSetup und lcdInit aufgelistet werden. Ist
wiringPiSetup vorhanden, nicht aber lcdInit, dann ist aus
irgendeinem Grund die Bibliothek unvollständig.
Mir ist gerade beim versuch die Bibliothek sicherheitshalber neu
zuinstallieren folgendes am ende nachdem Build von WiringPi aufgefallen:
NOTE: This is wiringPi v2, and if you need to use the lcd, Piface,
Gertboard, MaxDetext, etc. routines then you must change your
compile scripts to add -lwiringPiDev
Hat denn das was damit zutun, denn schließlich möchte ich ja ein lcd
nutzen..
EGS_TI schrieb:> Ohne mich jetzt mit dem Raspberry Pi auszukennen würde ich vermuten,> dass du "-lwiringPiDev" noch zusätzlich an gcc übergeben musst.
Ja, die Bibliothek scheint in der Version 2 zweigeteilt zu sein. Also
beim Linken einfach beide angeben.
Hallo,
ich habe das Programm jetzt kompiliert, Fehlerfrei dank eurer Hilfe.
Wenn ich es jetzt ausführen möchte mit:
./display
dann passiert nichts mehr, also die Konsole sprint in die nächste Zeile,
aber der Name und Pfad (pi@raspberry usw) kommt nicht mehr, d.H. die
Zeile blibt leer und auf Befehle wird nicht mehr Reagiert. Auf dem
Display wird auch noch nichts angezeigt.
Was ist denn jetzt schon wieder Falsch?
chekker schrieb:> Was ist denn jetzt schon wieder Falsch?
nichts, das Programm hat doch eine Entlosschleife. Das dauert also
ziemlich lange bis es sich beendet.
Hallo,
Das mit der Endlosschleife habe ich soweit verstanden, stand wohl
irgendwie gerade auf dem Schlauch..
Nun ist es ja aber so das auf dem Display einfach nichts angezeigt wird,
obwohl richtig verdrahtet, Kontrast richtig eingestellt und Display
(eigentlich) Funktionsfähig.
Und der Code sollte soweit ich das beurteilen kann ja auch
funktionieren..
Chekker schrieb:> Und der Code sollte soweit ich das beurteilen kann ja auch> funktionieren..
Kannst Du ihn denn beurteilen?
Ich hab den Eindruck, Dein "soweit" bedeutet eigentlich "sokurz".
Du machst zuviele Baustellen gleichzeitig auf.
Vielleicht solltest Du doch erst mit ner Blink-LED anfangen.
Hab ich schon. Mein einziges Problem ist, dass keine Uhrzeit+Datum auf
dem Display erscheint, obwohl Aufbau und Software exakt wie vorgegeben
ist.
Aber so läuft dass immer. Bei 20.000.000 Leuten geht's, und bei mir
wieder nicht.
Chekker schrieb:> Hab ich schon. Mein einziges Problem ist, dass keine Uhrzeit+Datum auf> dem Display erscheint, obwohl Aufbau und Software exakt wie vorgegeben> ist.
Tja. Aber irgendwas ist eben anders. Sonst würde es funktionieren.
Genau deswegen sind mir die kleinen AVR lieber. Da gibt es kein
Betriebssystem mit dem ich mich erst mal herumschlagen muss.
Karl Heinz Buchegger schrieb:> Tja. Aber irgendwas ist eben anders. Sonst würde es funktionieren.>> Genau deswegen sind mir die kleinen AVR lieber. Da gibt es kein> Betriebssystem mit dem ich mich erst mal herumschlagen muss.
ich glaube nicht das es am BS oder der Raspi liegt. Wenn das Programm
compiliert und auch startet dann wird es auch das machen was es soll.
Prüfe mal lieber die Anschlüsse zum LCD.