Forum: Compiler & IDEs Programm für die Prüfung funktioniert nicht richtig


von Peter K. (devja)


Lesenswert?

Hey,

ich habe für die Abschlussprüfung ein Programm geschrieben, dass ich 
morgen abgeben muss. Leider funktioniert es noch nicht so ganz. Wir 
sollen eine Ein- und Ausschaltzeit in einem Terminalfenster eingeben und 
dort auch wieder ausgeben. Wenn ich die Einschaltzeit zum ersten mal 
eingebe und den aktuellen Status der beiden zeiten aufrufe zeigt der die 
richtige zeit an und bei der ausschaltzeit steht 00:00 (richtig). Gebe 
ich jetzt aber die ausschaltzeit ein ändert sich auch die einschaltzeit 
zur ausschaltzeit. Bei einer erneuten eingabe der einschaltzeit ändern 
sich wieder beide.

Ist warscheinlich ein so einfacher Fehler, dass ich den natürlich nicht 
finde....Danke im vorraus :)


while(1) {

if (uart_rx_flag==1 && buffer_full==0) { // kompletter String empfangen
   get_string(stringbuffer+2);    // und Buffer leer?
   buffer_full=1;       // die ersten zwei Zeichen
                     // vom String lesen


///////////////Einschaltzeit////////////

if(UDR == '1')
{
  uart_puts("Schaltuhr Heizungssteuerung\n\r");
  uart_puts("---------------------------\n\r\n\r");
  uart_puts("Bitte setzen Sie die Einschaltzeit mit ein hh:mm\n\r");
  uart_puts("Bestätigen Sie die Eingabe danach mit Enter\n\r\n\r");
  status_einschaltzeit = true;

}else if(UDR == '2')
{
  uart_puts("Schaltuhr Heizungssteuerung\n\r");
  uart_puts("---------------------------\n\r\n\r");
  uart_puts("Bitte setzen Sie die Ausschaltzeit mit aus hh:mm\n\r");
  uart_puts("Bestätigen Sie die Eingabe danach mit Enter\n\r\n\r");
  status_ausschaltzeit = true;
}

if(strcmp(uart_rx_buffer,"status") == 0)
{
  start(); //Zeigt die Statusmeldungen mit den zeiten an
}

 if(strncmp(uart_rx_buffer,"ein",2) == 0 && status_einschaltzeit == 
true)
  {
    status_einschaltzeit = false;
  strtok(uart_rx_buffer," ");  // Erster Stringabschnitt
  enabletime = strtok(NULL,"");  // Zweiter Stringabschnitt (Zeit)

  ....
        ....

  }

//////////Ausschaltzeit////////////////////////
else
 if(strncmp(uart_rx_buffer,"aus",2) == 0 && status_ausschaltzeit == 
true)
  {
    status_ausschaltzeit = false;
  strtok(uart_rx_buffer," ");  // Erster Stringabschnitt
  disabletime = strtok(NULL,"");  // Zweiter Stringabschnitt (Zeit)

       ...
       ...

  }
}
}

von Glaskugel (Gast)


Lesenswert?

1. Code nicht kompilierbar
2. Code nicht kommentiert
3. Variablendeklarationen fehlen
4. Unklar warum strncmp mit Drei-Zeichen String aber Länge auf 2 
begrenzt
5. Code nicht in
 tags
6. Code nicht eingerückt
7. Unklar warum der Fehler gerade in diesem Codeabschnitt liegen soll.

von Glaskugel (Gast)


Lesenswert?

8. Syntax der Kommandos unbekannt.

von Helper (Gast)


Lesenswert?

Kleines Ablaufdiagramm oder so vorhanden was der Sinn deines Programms 
sein soll?

von Uwe .. (uwegw)


Lesenswert?

Es könnte problematisch sein, dass UDR zweimal ausgelesen wird. Denn das 
Lesen dieses Register ist für das UART das Signal, das der Wert 
problemlos mit dem nächsten Wert überschrieben werden kann, der ggf. 
schon im Buffer steht.

von Glaskugel (Gast)


Lesenswert?

9. Es ist fraglich ob die Variable UDR tatsächlich das 
UART-Datenregister meint, weil eine lokale Deklaration es überdecken 
könnte. Zusammenhang mit Punkt 1. bzw. 3.

von Karl H. (kbuchegg)


Lesenswert?

10. Es ist eine gute Idee, wenn das Programm als allererstes das, was es
    empfangen hat, zu Debugzwecken gleich wieder ausgibt.

11. Wenn ein Programm nicht so tut wie man es gerne hätte, ist es eine
    gute Idee, einfach zusätzliche Ausgaben zu Debugzwecken einzufügen,
    sodass man als Entwickler verfolgen kann, welche Pfade das Programm
    nimmt, welchen Wert Variablen haben, etc. Eben alles was man braucht
    um dem Problem auf die Schliche zu kommen.
    Ist das Programm erst einmal fertig, kann man diese Ausgaben wieder
    entfernen oder auch einfach auskommentieren. Die paar Minuten, die
    man für diese 'Bestückung' braucht, sind gut angelegte Zeit.

von MarioMM (Gast)


Lesenswert?

nachdem das Programm am 7.6.2011 abgegeben werden hätte sollen denke ich 
nicht dass hier noch "input" vom Fragenden kommen wird g

lg Mario

von Blödmann (Gast)


Lesenswert?

Nun, MarioMM, es ist sicher ungeheuer wichtig zu wissen, was Du denkst.
Nur wofür?

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.