while-Schleife unterbrechen



  • Hallo,
    Ich habe vor in einer while schleife alle 100ms oder so ein Signal an ein Microcontroller zu senden und anschließend von ihm über Serielle Schnittstelle ein
    Datenpacket(128B) zu empfangen.
    Die Zeitverzögerung brauche ich weil mein MC sonst nicht hinterherkommt.
    die Schleife geht normalerweise solange bis der MC ein ende zeichen im 1 Bytte sendet (z.b. Z oder besser 0xff).
    mein Problem ist, solange er in dieser while Schleife ist, ist natürlich das ganze Programm blockiert, aber bei bedarf muss ich diese Schleife manuell beenden können
    (wenn ich z.B. ein Button drücke). Gibt es eine möglichkeit z.B. über eine Art Interrupt die Schleife zu verlassen?
    oder habe ich eine andere möglichkeit diese funktion zu bewerksteliggen?
    die schleife sieht bis jetzt so aus:
    while(rec_buf_c[0] != 0xff) //Datensatz Downloaden und Speichern
    {
    //Daten Empfangen: // Wird bei mir direkt nach Write_Comport ausgeführt
    Read_Comport (com_status_h, // Fest - True falls Port geöffnet
    &rec_bytes_dw, // Fest - Anzahl der Empfangenen Bytes
    128, // Variabel - Empfange maximal 128 Bytes char)
    &rec_buf_c, // Variabel - Empfangspuffer (min. 19 Bytes
    3000); // Variabel - Timeout nach 3 sec.
    Memo->Lines->Add(rec_buf_c);

    mfg



  • Entweder Threads siehe http://bcb-tutorial.c-plusplus.net/
    oder
    z.b. Application->ProcessMessage() damit andere Programmsache abgearbeitet werden.



  • Hallo,
    das Application->ProzessMessage klingt richtig gut!
    ich habe aber probleme beim Implementieren.

    laut Hilfe muss ich es einfach in meine Schleife packen, ich bekomme dann aber beim Compilieren folgende fehlermeldung:
    [C++ Fehler] TK1.cpp(246): E2247 Zugriff auf '_fastcall TApplication::ProcessMessage(tagMSG &)' nicht möglich

    warum?Muss ich vorher noch irgendwelche Parameter verstellen?
    wenn ich es mit void_fastcall ProcessMessage(void) deklariere schluckt es der compiler zwar, aber es funktioniert nicht.



  • Sorry die Fehlermeldung ist weg, war wohl nur etwas falsch geschrieben.

    aber ich kann die while schleife nicht unterbrechen!
    meine while Schleife hat folgende bedingung:
    while(rec_buf_c[0] != 0xff)

    in meinem 2 button initialisiere ich dann rec_buf dann so:
    rec_buf_c[0] = 0xff;
    aber die schleife läuft trotz dieser Initialisierung weiter und bricht nicht ab.

    das problem ist das der wert in char rec_buf_c[0] nicht ff wird, er bringt mir immer nur ein y mit umlauten (entspricht 98h). Ich weiß nicht warum



  • break;

    😃


Anmelden zum Antworten