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)
...
...
}
}
}
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.
Kleines Ablaufdiagramm oder so vorhanden was der Sinn deines Programms sein soll?
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.
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.
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.
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
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.