Hallo, ich habe da ein Proble: Ich möchte dem Display eine Variable übergeben, in der ein Wert gespeichert ist. Dazu habe ich die Variable global definiert. Jetzt möchte ich, dass das Display den Inhalt der Variable Wert (hier: 123) ausgibt. Es funktioniert aber nicht. Ich bekomme die Fehlermeldung: "../display2.c:24: warning: passing arg 1 of `lcd_out' makes pointer from integer without a cast" Als absoluter Newbie kann ich da so gar nix mit anfangen. Was mach ich falsch?? Ich hab doch gar keinen Pointer initialisiert!? Hier der Quellcode. Danke schonmal! Gruß Sven #include <avr/io.h> #include "lcd4b.c" //LCD-Routine einbinden int wert=123; int ausgabe(); int main(void) { ausgabe(); while(1); } int ausgabe() { DDRD |= 0b11111100; //Pins 2-7 als Ausgänge lcd_linit(); //LCD Initialisieren lcd_clear(); //Display löschen lcd_out(wert); //Text ausgeben lcd_command(line2); //2. Zeile lcd_out("!!!"); //Text ausgeben return(0); }
Die Funktion lcd_out erwartet einen Pointer als Übergabewert. Du übergibst einen Zahlenwert. Das geht nicht. Entweder benutzt Du formatierte Ausgabe oder Du musst Deinen Zahlenwert zunächst in einen ASCII-String umwandeln. Ich weiß nicht, wie die Funktion lcd_out definiert ist, deshalb kann ich dazu nicht mehr sagen. Gruß Johnny
Ich nehme an das lcd_out einen String erwartet Da du weiter unten "!!!" an lcd_out übergibst, also wie johnny sagt: erst mal wert in einen String verwandeln und dann einen Pointer auf diesen String an lcd_out übergeben Grüße Walter
Hmm... danke schonmal für den Hinweis. Habe auch daraufhin ein bisschen im Netz gesucht, jedoch keine wirkliche Lösung gefunden. Es waren immer Verweise, man müsse sprintf oder _itoa benutzen. Jedoch stürzt mein AVM Studio beim kompilieren ab. Ausserdem muss ich dazu Bibliotheken einbinden, die riesig groß sind und ich (bis auf die eine Ausnahme) nicht brauchen werde. Kann mir daher jemand einen Tip für eine nach mögl. einfache Realisierung geben?? Gruß Sven
int ausgabe(void) { char buff [7]; // buffer Größe für +/-32768 und \0 ... itoa(wert, buff, 10); // Wert in ASCII konvertieren lcd_out(buff); // Wert ausgeben ... } itoa ist in stdlib.h, also nicht riesig groß mfg Reiner
ahhhh... das kann doch alles nicht sein... Erstmal danke für die Antwort! Ist ja doch nicht so schwierig.. Habe aber wieder ein Problem: Wenn ich versuche, meinen Quellcode mit #include "stdlib.h" zu kompilieren, stürzt mein komplettes AVM Studio ab. Macht einfach nix mehr, so dass ich es abschiessen muss!? Was ist da jetzt los?????????? stdlib.h ist im selben Verzeichnis! Er scheint es auch zu finden, da eine Fehlermeldung kommt, wenn ich es nicht im Verzeichnis habe... Die Kompilierung beendet er gar nicht... wie gesagt, kann nix mehr machen dann??? Gruß Sven
#include <stdlib.h> nicht "stdlib.h" Anführungszeichen nur für "eigene" .h files stdlib.h sollte nicht in dem Verzeichnis sein indem der eigene Code ist. Der Compiler "weiß" schon wo er seine eigenen libs findet. mfg Reiner
Keine Ahnung. lcd4b.c sollte auch nicht "included" werden sondern im makefile eingetragen werden. Einfach mal Zeile für Zeile auskommentieren und sehen wann es läuft. Reiner
@SvenM Ich habe neulich WinXPPro über Win98SE gebügelt und da fing AVRStudio auch an zu spinnen, insbesondere mit Abstürzen beim Kompilieren. Nachdem ich das AVRStudio-Service-Pack-2 installiert habe, ist alles wieder in Ordnung: http://www.atmel.com/dyn/products/tools_card.asp?tool_id=2725 viele grüße ralph
Besorge Dir mal die aktuellen Patches fürs AVR-Studio (NICHT AVM, die sitzen in Berlin :) von http://www.atmel.no/beta_ware/ Zumindest den SP2
thumbsup ihr seid super... Der Tip mit dem Patch hat funktioniert! danke schön... THX @Reiner: Das funktioniert so. Das bringt mich schon weiter jetzt! Vielen vielen Dank! ;-) Gruß Sven
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.