Zur Übersicht - INFO - Neueste 50 Beiträge - Neuer Beitrag - Suchen - Zum C-Control-I-Forum - Zum C-Control-II-Forum

Re: RS232 echo und Multithread Kategorie: Programmierung C (von ToKu - 1.11.2006 14:23)
Als Antwort auf RS232 echo und Multithread von ToKu - 1.11.2006 9:57
Ich nutze:
C-Control Pro Mega128, eigenes Board
So...
nachdem ich mit dem Befehl Serial_ReadExt gearbeitet habe leuchtet meine Status LED
(also arbeitet der Thread), jedoch bekomme ich im Hyperterminal dauernd Ausgaben. Das ist also
keine passende Lösung. Ich habe mich auch schon gefragt, ob ich bei meinem Vorhaben mit einem
Interrupt arbeiten muss für die RS232-abfrage, aber da hab ich noch keine Ahnung!

Das Problem ist also weiterhin da!

> Hallo miteinander!
>
> Ich habe versucht aus den Beispielprogrammen zu dem RS232 echo und einer einfachen
> LED-blink-schleife ein Programm im Multithread zu betreiben. Das funktioniert allerdings nicht!
> Ich weiÃ? auch nicht woran es liegt, denn einfach ein Threadprogramm bei dem nur zwischen zwei
> LED-blinkschleifen unterschieden wird geht.
> Komisch ist das die LED nicht blinkt, aber das RS232echo geht
> Hier der C-code
>
> // Deklaration der Formatierungsvariablen
> #define LF 0x0A
> #define CR 0x0D
> #define SPACE 0x20
>
> //------------------------------------------------------------------------------
>
> void thread1(void)
> {
>
>     while(1)
>     {
>         // Ein- und Ausschalten der LED1
>         Port_WriteBit(PORT_LED1,PORT_ON);       // LED1 einschalten
>         Thread_Delay(100);                     // variable Verzögerung
>         Port_WriteBit(PORT_LED1,PORT_OFF);      // LED1 ausschalten
>         Thread_Delay(100);                     // variable Verzögerung
>     }
> }
> //------------------------------------------------------------------------------
> // RS_Echo Hauptprogramm
> //
> void main(void)
> {
>     byte c,n,i;                                 // Variablen deklarieren
>     byte Buf_Index;
>     byte Limit;
>     char Buffer[82];                            // Arrays deklarieren
>     char Text1[40];
>     char Text2[40];
>
>     Port_DataDirBit(PORT_LED1,PORT_OUT);        // LED1 auf Ausgabe vorbereiten
>     Port_DataDirBit(PORT_LED2,PORT_OUT);        // LED1 auf Ausgabe vorbereiten
>
> //*******************
>     Thread_Start(1,thread1);                 //void Thread_Start(byte thread,float func)
>                                                 //thread  = (0-13) Nummer des Threads, der gestartet werden soll
>                                                 //func  = Name der Funktion, in welcher der neue Thread gestartet wird
> //*******************
>     Port_WriteBit(PORT_LED2,PORT_ON);           // LED2 einschalten   =>Status led
>
>     Text1="-- Test serielle Schnittstelle --";  // Werte ins Array Text1 geschrieben.
>     Text2="Text eingeben:";                     // Werte ins Array Text2 geschrieben.
>     Serial_Init(0,SR_8BIT|SR_1STOP|SR_NO_PAR,SR_BD115200);
>                                                 //Init RS232: 115200 bps, 8 Bit, 1 Stop, NP
>     c=0;
>     Buf_Index=0;
>     Limit=80;                                   // maximale Zeichenzahl
>     for (i=0;i<33;i++) Msg_WriteChar(Text1[i]); // Systemausgabe "-- Test serielle Schnittstelle --"
>     Serial_Write(0,CR);                         // neue Zeile über die RS232 Schnittstelle gesendet
>     Serial_Write(0,LF);                         // Zeilenvorschub über die RS232 Schnittstelle gesendet
>
>     while (1)
>     {
>         for (i=0;i<14;i++) Serial_Write(0,Text2[i]);  // Ausgabe Terminal: Text eingeben:
>         Serial_Write(0,CR);                     // neue Zeile über die RS232 Schnittstelle gesendet
>         Serial_Write(0,LF);                     // Zeilenvorschub über die RS232 Schnittstelle gesendet
>         while (c!=CR)
>         {
>             c=Serial_Read(0);                   // Zeichen lesen
>             Serial_Write(0,c);                  // Zeichen ausgeben
>             Buffer[Buf_Index]=c;                // Zeichen im Buffer speichern
>             Buf_Index++;
>             if (Buf_Index==Limit)               // wenn Buffer voll, alle Zeichen ausgeben
>             {
>                 c=CR;
>                 Buffer[Buf_Index]=c;
>                 Serial_Write(0,CR);             // neue Zeile über die RS232 Schnittstelle gesendet
>                 Buf_Index++;
>             }
>         }
>         c=0;                                    // CR >> alle Zeichen ausgeben
>         Serial_Write(0,LF);
>         for (n=0;n >         {
>             Serial_Write(0,Buffer[n]);          // Bufferinhalt ausgeben
>         }
>         Serial_Write(0,LF);                     // Zeilenvorschub über die RS232 Schnittstelle gesendet
>         Buf_Index=0;
>     }
> }


    Antwort schreiben


Antworten: