10 years, 9 months ago.

Was genau macht Readfile() - What exactly does Readfile()?

Wenn ichs könnte würde ich es auf Englisch schreiben, aber ich wüsste nicht genau wie ich es beschreiben soll. Hoffe es kann mir trotzdem jemand helfen.

Hallö, ich hab mal eine Frage.

Ich programmiere gerade seriell empfangen und senden. Dazu verwende ich eine mir vorgegebene Funktion namens PollComport, in dieser wird eine Funktion namens Readfile aufgerufen. Wie genau funktioniert diese Funktion, wenn ich PollComport in den Code packe und mir von meinem Mikrocontroller einen String rüberschicke und diesen dann empfangen will, kommt nichts an. In anderen Fällen nutze ich diese Funktion um ein einzelnes char einzulesen, das funktioniert wunderbar.

Braucht man eine Schleife um zu warten bis auch wirklich was empfangen wird oder funktioniert die Funktion irgendwie nur bei einzelnen chars.

Wie genau arbeitet Readfile()? Was genau macht diese Funktion? Wie verhält PollComport sich wenn nichts im ComPort zu lesen ist?

<<int PollComport(int comport_number, unsigned char *buf, int size) { int n; if(size>4096) size = 4096;

/* added the void pointer cast, otherwise gcc will complain about */ /* "warning: dereferencing type-punned pointer will break strict aliasing rules" */

ReadFile(Cport[comport_number], buf, size, (LPDWORD)((void *)&n), NULL);

return(n); }>>

1 Answer

10 years, 9 months ago.

Unfortunately, my German isn't good enough to reply in German, but if I understood you correctly, if you want to be told when data is sent to you, you can set up an interrupt function, which will be called when you receive data over serial:

#include "mbed.h"

Serial serialPort(USBTX, USBRX);

void receivedData() {
   // get data etc... here
   char character = serialPort.getc();
}

int main() {
   serialPort.attach(&receivedData);
}

If you would like to read in a whole line of data from the Serial connection, rather than just characters, you could change it to something like this:

#include "mbed.h"
#include <string>

Serial serialPort(USBTX, USBRX);
string data;

void receivedData() {
   // get data etc... here
   char character = serialPort.getc();

   if (character == '\n') {
        // new line, do what you want!
   }
   else {
      data += character; // append new character to the string...
   }
}

int main() {
   serialPort.attach(&receivedData);
}

On the mbed side, I have also done that way. But on the PC side, I can not just say serial.attach or something like this. I have to use a function called PollComport, this seems to be similar to getc.

However, this does not work with the string outside the mbed code.

This is my PC Code:

<< >> <</code>>

Code

unsigned char receiveBytes[]="";
    char tmp;
    //string recBytes;  doesnt work
    unsigned char anz[10];

       do {
           tmp = PollComport(cport_nr, anz, 255);

           if(anz != 0) {
            // receiveBytes += tmp; doesnt work
             strcat(receiveBytes, tmp); //doesnt work
        
           }
       } while (tmp != '\n');

       fprintf(outFile, (const char*)receiveBytes);
posted by Franziska Gerlich 30 Jul 2013