schau nochmal in die anleitung, ich denke du verwendest SerRead falsch.
Servus zusammen,
ich habe ein Programmier Problem. Da ich wenig Kennisse in C habe, habe ich mit einem Beispiel Programm aus dem Asuro Skript begonnen und dann darauf aufgebaut.
Schon recht am Anfang ich in diesem Programmcode Fehler:
Ich arbeite noch mit dem Testprogramm und laut dem Compiler gibt es in der Zeile mit dem SerRead folgenden Fehler:Code:#include "asuro.h" int main(void) { Init (); MotorDir(FWD,FWD); // Richtung der Motoren MotorSpeed(120,120); // Geschwindigkeit der Motoren StatusLED(GREEN); while (PollSwitch()==0) { SerWrite("Alle Parameter laufen innerhalb der Toleranz!/n",45); } MotorSpeed(0,0); StatusLED(RED); while (PollSwitch()==1) { SerWrite("Kollision mit einem unbekannten Objekt. Sicherheitsabschaltung des Antriebsaggregats!\n",68); } Init (); MotorDir(FWD,FWD); MotorSpeed(250,250); StatusLED(GREEN); while (SerRead('a',1,9)==1) { SerWrite("Volle Kraft!\n",13); } }
test.c:22: warning: passing arg 1 of `SerRead' makes pointer from integer without a cast
test.c:22: error: void value not ignored as it ought to be
Könnte mir bitte jemand helfen und mir den Code richtig hinschreiben, damit ich weiß, wie es aussehen muss.
schau nochmal in die anleitung, ich denke du verwendest SerRead falsch.
Wie müsste ich es dann verwenden? Könnte mir bitte jemand ein geeignetes Beispiel geben.
Hallo,
@Lifty:
Die Signatur des Prototypen ist folgendermassen:test.c:22: warning: passing arg 1 of `SerRead' makes pointer from integer without a cast
test.c:22: error: void value not ignored as it ought to be
d.h.Code:void SerRead(unsigned char *data, unsigned char length, unsigned int timeout);
der 1. Parameter ist ein pointer auf eine char Variable,
der 2. Parameter ist dessen Länge (maximal)
der 3. Parameter der Timeout
Du rufst die Funktion aber folgendermassen auf:
Fehler 1: 'a' ist keine Variablewhile (SerRead('a',1,9)==1) {
Fehler 2: die Funktion ist void und liefert somit keinen Wert
Beispiel:
Code:#include <string.h> #include "asuro.h" // Deklaration der Variablen char szReceive[30]; int main(void) { Init(); // nur einmal aufrufen!! // Lesen von einem Zeichen in die Variable szReceive, Timeout 9msec SerRead((char*)szReceive, 1, 9); // String hinter dem Zeichen terminieren. szReceive[1] = 0; // Anhängen von " received\r\n" and den Inhalt von szReceive strcat(szReceive, " received\r\n"); // Ausgeben von szReceive SerWrite(szReceive, strlen(szReceive)); while (1); // niemals vergessen! return 0; }
Habe das Proggi nicht getestet! Es macht so auch noch keinen Sinn ohne eine while Schleife. Der Kode ist nur zur Verdeutlichung.
Ist es jetzt klar?
O.
Hallo Lifty,
willkommen im Forum.
Schau doch mal auf der zum Asuro mitgelieferten CD nach. Da solltest du die Datei PCDemo.c wahrscheinlich immer noch finden.
Es gibt dort eine Beispielstelle mit der Funktion SerRead().
Du musst dort vor allem auf den ersten Parameter achten. Du hast da in deinem Programm ein 'a' eingetragen. In der Datei auf der CD steht dort ein &cmd [Komplett also: SerRead(&cmd,1,0xFFFE);].
Es ist hier besonders wichtig, dass du das &-Zeichen mit angibst, da es in C die Bedeutung hat, das diese char-Variable von der Funktion gefüllt wird, und der Inhalt zurück zum Aufrufer gegeben wird. Schließlich will der Aufrufer ja wissen was da so über die Schnittstelle gekommen ist.
Dein Fehler in deinem Programm ist der, dass die SerRead()-Funktion etwas in den ersten Parameter reinschreiben will. Du gibst der Funktion aber keine Variable (Speicherplatz), sondern einen konstanten Wert (das a).
Viel Erfolg beim Ändern und vor allem viel Spaß mit dem Asuro.
Gruß Sternthaler
Lieber Asuro programieren als arbeiten gehen.
Na, wenn dass keine Breitseite an Unterstützung ist
Lieber Asuro programieren als arbeiten gehen.
Vielen Dank! Du hast mir da schon weitergeholfen.
Lesezeichen