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

Re: do while Schleife bricht ab Kategorie: Programmierung C (von Kai - 12.02.2009 21:20)
Als Antwort auf do while Schleife bricht ab von Kai - 9.02.2009 22:08
Ich nutze:
CC-Pro 128 Application Board, Pro-Bot128
Problem beseitigt,
durch Verhinderung des Threadwechsel mit Thread_Lock(1);
klappt die Sache jetzt.

Kai

> Hallo miteinander,
>
> ich habe ein kleines Problem, welches ich nicht recht verstehe. Vielleicht erkennt ihr warum die folgende
> Schleife abbricht.
> Dazu folgendes: Der Code ist ein kleiner Ausschnitt aus meinem Programm. Bei einem bestimmten
> Auswahlmenü wird der Thread gestartet und soll wenn keine Taste im Menü gedrückt wird nach ca. 50 sek.
> dieses nicht mehr anzeigen sondern die Uhrzeit und das Datum anzeigen.
> Das klappt.
> Jedoch wird die Schleife nach nicht bestimmter Zeit verlassen und zum Menü zurückgekehrt, ohne das
> die Taste * gedrückt wurde.
> Das Schauspiel beginnt von vorn. Es läuft ansonsten nur Thread 0 (Main).
> Ich glaube ja, dass es mit der Funktion Timer_TickCount() zusammenhängt, aber wie?
>
> Danke im Vorraus Kai
>
> // Thread zur Anzeige der Uhrzeit
> void th_uhrzeit(void)      //Thread 4 Uhrzeit einblenden nach 50 Sekunden
> {
>  int azeit, bzeit;
>      azeit =0; bzeit=0;
>
>     Timer_TickCount();
>     do
>      {
>       azeit = Timer_TickCount();              // Timer Differenz auslesen
>       bzeit = bzeit + azeit;                       // Differenz addieren
>       Thread_Delay(10);
>      }
>      while(bzeit < 5000);                         // ca. 50 Sekunden
>      
>      LCD_ClearLCD();
>          do
>             {
>              anzeigeuhrzeit();
>              LCD_CursorPos(0x50);zeile1="* weiter"; LCD_WriteText(zeile1);
>              key1();
>
>              if (key==42)         // *
>                {
>                 beep1();
>                 key=0;
>                 Thread_Delay(10);
>                 Thread_Kill(4);
>                 LCD_ClearLCD();
>                 break;
>                }
>              }
>           while(true);
> }
> //-----------------------------------------------------------------------------
> void anzeigeuhrzeit(void)
> {
>   Display_Buffer_Set_Time();
>     LCD_CursorPos(0x00+4); LCD_WriteText(uhrzeit);
>   Display_Buffer_Set_Date();
>     LCD_CursorPos(0x40+4); LCD_WriteText(datum);
> }
>
> //----------------------------------------------------------------------------
> void key1(void)
> {
>   key = Key_Scan();
>   key = Key_TranslateKey(key);
> }


    Antwort schreiben


Antworten: