Brauche Hilfe um Funktion zu verstehen



  • Hallo ich bräuchte etwas Hilfe : ) bin ziemlicher C neuling und muss mich mit embedded Programmierung beschäftigen.

    Leider versteh ich das Programm das unten steht nicht so ganz, das ganze soll wohl dazu dienen eine Zeichenfolge vom Seriellen Port einzulesen. Ich hab Probleme mit den Zeigern, kann mir jemand erklären wie das ganze funktioniert, wie ich das ganze aufrufen muss (vielleicht sogar mit vorhergenender Variablendeklaration) und wie ich auf die eingelesenen Zeichen zugreifen kann ? also wie ich die in "buffer" gespeicherten Zeichen wieder ausgeben kann, Danke schonmal im voraus : )

    ConsoleIsGetReady() schaut wohl ob am Seriellen Port noch was anliegt
    BYTE ist einfach ein unsigned char
    v = RCREG liest das aktuell anliegende Zeichen am Seriellen Port in die Variable v

    BYTE ConsoleGetString(char *buffer, BYTE bufferLen)
    {
    BYTE v;
    BYTE count;

    count = 0;
    do
    {
    if ( bufferLen-- == 0 )
    break;

    while( !ConsoleIsGetReady() );

    v = RCREG;

    if ( v == '\r' || v == '\n' )
    break;

    count++;
    *buffer++ = v;
    *buffer = '\0';
    } while(1);
    return count;
    }



  • Versuch's einfach mal so:

    char buffer[1024]={0};
    ConsoleGetString(buffer,1024);
    printf(buffer);
    


  • Hollafuchs schrieb:

    Leider versteh ich das Programm das unten steht nicht so ganz, das ganze soll wohl dazu dienen eine Zeichenfolge vom Seriellen Port einzulesen.

    // Liesst zeichen von der Seriellen in einen Buffer 
    // bufferlen ist die maximale Anzahl der Zeichen, die eintrudeln dürfen
    // Funktion arbeitet ähnlich wie 'fgets'
    BYTE ConsoleGetString (char *buffer, BYTE bufferLen)
    {
      BYTE v;       // Das eingelesene Zeichen
      BYTE count;   // Interne Zählvariable für Anzahl eingelesener Zeichen
    
      count = 0;   // Zählvariable erstmal auf 0
    
      do                                // Schleifenanfang
      {
        if ( bufferLen-- == 0 )         // Buffer voll, dann aufhören (Was ist wenn bufferlen anfangs 0 ist???)
          break;
    
        while( !ConsoleIsGetReady() );  // Warten bis ein Zeichen da ist
    
        v = RCREG;                      // Das Zeichen einlesen
    
        if ( v == '\r' || v == '\n' )   // Abbruch wenn Zeichen entweder CR oder LF ist
          break;
                                        // Ansonsten das Zeichen speichern
        count++;                        // Anzahl gespeicherter Zeichen zählen
        *buffer++ = v;                  // Zeichen in den Buffer schreiben, Bufferpointer eins weitersetzen
        *buffer = '\0';                 // Eine 0 anhängen (wird beim nächsten mal überschrieben)
      } 
      while(1);                         // Schleife nochmal durchlaufen
    
      return count;                     // Eine der Abbruchbedingungen ist eingetreten: Anzahl gespeicherter Zeichen zurückgeben 
    }
    

    🙂


Anmelden zum Antworten