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

Re: Programm bricht immer ab Kategorie: Programmierung C (von PeterS - 8.04.2009 19:14)
Als Antwort auf Re: Programm bricht immer ab von Sanna - 7.04.2009 13:30

> Hallo Peter,
> das habe ich auch schon gemacht und sehe einfach nur, dass das Programm beim Absdelay abbricht.
> Komischerweise manchmal auch einfach an ganz unterschiedlichen Stellen. Da sehe ich überhaupt keine
> Logik hinter. Könnte das vielleicht auch an einem Hardewareproblem liegen� Also das irgendwas mit der
> C-Control nicht stimmt?

Hallo Sanna,

schick mir doch mal das Projekt mit allen Dateien an ccpro@gmx.de. Falls möglich, verkleiner das
Programm so, das unnötiger Ballast weg ist, aber der Fehler noch zu erkennen ist. Ich schau dann mal
rein.

Gruss Peter

>
> GruÃ?
> Sanna
>
>
> > Hallo Sanna,
> >
> > leider sehe ich in Deinem gekürzten Listing nicht warum die LED nur kurz aufblinkt. Aber dafür gibt es
> > ja Debugger, setze einfach Breakpoints an turbine1 und turbin2 und SingleStep bis Du siehst, warum
> > die LEDs nicht dauerhaft blinken.
> >
> > Gruss Peter
> >
> > > Hallo ihr Lieben!
> > > Ich hab ein problem mit meiner C-Control Pro. Ich will, dass sie bei verschiedenen tasteneingaben am Display
> > > etwas ausgibt. Das funktionierte auch super. Nur soll jetzt zusätzlich eine LED blinken. Das ging zuerst
> > > auch, nur auf einmal bricht das programm einfach ab und lässt die LED nur einmal kurz aufzucken.
> > > Vielleicht kann mmir ja jemand helfen. Wäre toll!
> > > Hier mein Code von der Eingaberoutine: (ist vielleicht etwas lang und kompliziert geschrieben)
> > > In den Funktionen turbine1() und turbine2() steht (bei trubine2 ist das Absdelay dann 1000):
> > > void turbine1(void)
> > > {
> > >         Port_WriteBit(PORT_LED1,PORT_ON);    //LED1 blinkt mit 0,5 Hz
> > >         AbsDelay(2000);
> > >         Port_WriteBit(PORT_LED1,PORT_OFF);
> > >         AbsDelay(2000);
> > > }
> > >
> > > //Tasteneingabe
> > >
> > > void Eingabe(void)
> > > {
> > >      key=Key_Scan();    //liest das keyboard
> > >      key_ch=Key_TranslateKey(key); //Wandelt Eingabe in ASCII code um
> > >
> > >      Msg_WriteHex(key);    //schreibt gedrückt taste als Hex_wert in Ausgabe-Fenster
> > >      Msg_WriteText(crlf);   // Absatz im Ausgabe-Fenster
> > >
> > >      if (key_ch==49)  //Bediener schaltet ein. Taste1
> > >      {
> > >         LCD_CursorOff();
> > >         LCD_ClearLCD();
> > >         LCD_CursorPos(0x00);
> > >         LCD_WriteText(status0);   // Gerät zeigt, dass es angeschlaten wurde "on"
> > >          do
> > >            {
> > >                 key=Key_Scan();             //liest das keyboard erneut und zwar solange bis Taste2 gedrückt
> > >                 key_ch=Key_TranslateKey(key); //wurde, so wird verhindert, dass aus Schleife gesprungen wird
> > >                 Msg_WriteHex(key);    //schreibt gedrückt taste als Hex_wert in Ausgabe-Fenster
> > >                 Msg_WriteText(crlf);   // Absatz im Ausgabe-Fenster
> > >             }while(key_ch!=50);               // falls keine tasteoder eine andere gedrückt wird
> > >
> > >
> > >         if (key_ch==50)      // Wenn Taste 2 gedrückt wurde (Sensoreingänge liefern ok),dann zeigt das Gerät
> > >         {                      // "Ready" an
> > >             LCD_CursorOff();
> > >             LCD_ClearLCD();
> > >             LCD_CursorPos(0x00);
> > >             LCD_WriteText(status1);
> > >              do
> > >                 {
> > >                     key=Key_Scan(); //liest das keyboard wieder bis Taste3 gedrückt wurde. Erklärung siehe Oben
> > >                     key_ch=Key_TranslateKey(key);
> > >                     Msg_WriteHex(key);    //schreibt gedrückt taste als Hex_wert in Ausgabe-Fenster
> > >                     Msg_WriteText(crlf);   // Absatz im Ausgabe-Fenster
> > >                 }while(key_ch!=51);
> > >
> > >                 if (key_ch==51)    // Wenn taste3 gedrückt wurde, zeigt das Gerät dies an
> > >                 {                  
> > >                     LCD_CursorOff();  
> > >                     LCD_ClearLCD();
> > >                     LCD_CursorPos(0x00);
> > >                     LCD_WriteText(status3);
> > >
> > >                     do
> > >                     {
> > >                     turbine1();
> > >                     key=Key_Scan(); //liest das keyboard wieder bis Taste3 gedrückt wurde. Erklärung siehe Oben
> > >                     key_ch=Key_TranslateKey(key);
> > >                     Msg_WriteHex(key);    //schreibt gedrückt taste als Hex_wert in Ausgabe-Fenster
> > >                     Msg_WriteText(crlf);
> > >                      }while(key_ch!=52);
> > >
> > >                      if (key_ch==52) // Wenn taste 4 gedrückt wurde
> > >                      {
> > >
> > >                        LCD_CursorOff();
> > >                        LCD_ClearLCD();
> > >                        LCD_CursorPos(0x00);
> > >                        LCD_WriteText(status4);
> > >                        do
> > >                         {
> > >                             turbine2();
> > >                         Msg_WriteHex(key);    //schreibt gedrückt taste als Hex_wert in Ausgabe-Fenster
> > >                         Msg_WriteText(crlf);
> > >                         }while(true);
> > >                        }
> > >                 }
> > >          }
> > >      }
> > > }
> > >
> > > Vielen vielen Dank


    Antwort schreiben


Antworten: