PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Hilfe bei SerRead



Lifty
11.03.2008, 20:18
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:


#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);
}
}

Ich arbeite noch mit dem Testprogramm und laut dem Compiler gibt es in der Zeile mit dem SerRead folgenden Fehler:
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.

damaltor
11.03.2008, 21:58
schau nochmal in die anleitung, ich denke du verwendest SerRead falsch.

Lifty
12.03.2008, 12:29
Wie müsste ich es dann verwenden? Könnte mir bitte jemand ein geeignetes Beispiel geben.

Osser
12.03.2008, 21:57
Hallo,

@Lifty:

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
Die Signatur des Prototypen ist folgendermassen:

void SerRead(unsigned char *data, unsigned char length, unsigned int timeout);
d.h.
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:

while (SerRead('a',1,9)==1) {

Fehler 1: 'a' ist keine Variable
Fehler 2: die Funktion ist void und liefert somit keinen Wert


Beispiel:

#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.

Sternthaler
12.03.2008, 22:02
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

Sternthaler
12.03.2008, 22:06
Na, wenn dass keine Breitseite an Unterstützung ist ;-)

Lifty
12.03.2008, 22:43
Vielen Dank! Du hast mir da schon weitergeholfen.