-         

Ergebnis 1 bis 7 von 7

Thema: Hilfe bei SerRead

  1. #1

    Hilfe bei SerRead

    Anzeige

    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:

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

  2. #2
    Moderator Robotik Einstein Avatar von damaltor
    Registriert seit
    28.09.2006
    Ort
    Jena
    Alter
    31
    Beiträge
    3.912
    schau nochmal in die anleitung, ich denke du verwendest SerRead falsch.
    kleinschreibung ist cool!

  3. #3
    Wie müsste ich es dann verwenden? Könnte mir bitte jemand ein geeignetes Beispiel geben.

  4. #4
    Erfahrener Benutzer Begeisterter Techniker Avatar von Osser
    Registriert seit
    31.10.2006
    Ort
    Köln
    Alter
    47
    Beiträge
    387
    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:
    Code:
    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:
    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.

  5. #5
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    29.05.2005
    Beiträge
    1.018
    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.

  6. #6
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    29.05.2005
    Beiträge
    1.018
    Na, wenn dass keine Breitseite an Unterstützung ist
    Lieber Asuro programieren als arbeiten gehen.

  7. #7
    Vielen Dank! Du hast mir da schon weitergeholfen.

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •