Programm läuft durch ohne zu stoppen
Verfasst: Mo Jun 29, 2020 10:08 am
Guten Tag zusammen,
ich bin recht neu sowohl hier im Forum, als auch im Bereich der Programmierung tätig.
Daher bitte ich Sie eventuelle "dumme Fragen" zu entschuldigen.
Hier eine kleine Beschreibung zu meinem Projekt und dann zu meinem Problem:
Ich arbeite zur Zeit mit einem µC Board mit Tastern, Schaltern und LEDs.
Jetzt ist es so, dass ich mit einem Programm die Funktion der Taster, Schalter und LEDs testen möchte.
Dafür soll ein Bediener durch ein Programm geführt werden und dabei die Tasten drücken.
Dabei nutze ich eine schon vorhandene C-Datei mit einer Funktion die sich alle 1ms nochmal aufruft. (das ist Vorgabe)
In dieser Funktion habe ich mein Programm geschrieben. Es sind mehrere While-Schleifen hintereinander die ich benutze (siehe Code)
In jeder While-Schleife wird der Benutzer aufgefordert eine Aktion durchzuführen (Taster und Schalter betätigen).
Nun bin ich auf folgendes Problem gestoßen:
Das Programm läuft alle While-Schleifen einmal komplett von oben bis unten durch, ohne auf die Eingaben des Bedieners zu warten oder dort an dem Punkt das Programm zu stoppen.
Der Code funktioniert bei mir ohne Error Anzeigen.
Was muss ich tun, damit das Programm an den Abfragen der Schalter und Taster stoppt und auf die Eingabe des Bedieners wartet?
Hier bitte ich um eure Hilfe. Möglich ist es, dass ich den Wald vor lauter Bäumen nicht sehe. Aber ich freue mich um jede Hilfe die ich bekommen kann.
Danke schon mal im voraus!
Falls noch mehr Informationen benötigt werden einfach fragen.
Hier der Code:
Lieben Gruß Logan
ich bin recht neu sowohl hier im Forum, als auch im Bereich der Programmierung tätig.
Daher bitte ich Sie eventuelle "dumme Fragen" zu entschuldigen.

Hier eine kleine Beschreibung zu meinem Projekt und dann zu meinem Problem:
Ich arbeite zur Zeit mit einem µC Board mit Tastern, Schaltern und LEDs.
Jetzt ist es so, dass ich mit einem Programm die Funktion der Taster, Schalter und LEDs testen möchte.
Dafür soll ein Bediener durch ein Programm geführt werden und dabei die Tasten drücken.
Dabei nutze ich eine schon vorhandene C-Datei mit einer Funktion die sich alle 1ms nochmal aufruft. (das ist Vorgabe)
In dieser Funktion habe ich mein Programm geschrieben. Es sind mehrere While-Schleifen hintereinander die ich benutze (siehe Code)
In jeder While-Schleife wird der Benutzer aufgefordert eine Aktion durchzuführen (Taster und Schalter betätigen).
Nun bin ich auf folgendes Problem gestoßen:
Das Programm läuft alle While-Schleifen einmal komplett von oben bis unten durch, ohne auf die Eingaben des Bedieners zu warten oder dort an dem Punkt das Programm zu stoppen.
Der Code funktioniert bei mir ohne Error Anzeigen.
Was muss ich tun, damit das Programm an den Abfragen der Schalter und Taster stoppt und auf die Eingabe des Bedieners wartet?
Hier bitte ich um eure Hilfe. Möglich ist es, dass ich den Wald vor lauter Bäumen nicht sehe. Aber ich freue mich um jede Hilfe die ich bekommen kann.
Danke schon mal im voraus!
Falls noch mehr Informationen benötigt werden einfach fragen.
Hier der Code:
Code: Alles auswählen
void test_platinen_task_rtos(){
bool testTask = 0;
uint32_t confirmfunction_taster1=0;
uint32_t confirmfunction_taster2=0;
uint32_t confirmfunction_schalter1=0;
uint32_t confirmfunction_schalter2=0;
#define QUERYTASTER1 REGISTER_READ_BIT(0x400E1200, 0x003C, 16) // ist der Taster1 gedrückt
#define QUERYTASTER2 REGISTER_READ_BIT(0x400E1200, 0x003C, 17) // ist der Taster2 gedrückt
#define QUERYSCHALTER1 REGISTER_READ_BIT(0x400E1200, 0x0000, 1) // ist der Schalter 1 gedrückt
#define QUERYSCHALTER2 REGISTER_READ_BIT(0x400E1200, 0x0000, 2) // ist der Schalter 2 gedrückt
//*********************************** Taster Test ******************************************************
//*********************************** Taster T1 ********************************************************
printf("Beginn der Taster- und Schaltertests.");
static uint32_t confirmtimer_taster=0;
printf("Test Taster T1 beginnt.\n");
printf("Bitte drücken Sie innerhalb von 5 Sekunden Taster T1.\n");
while(testTask == 1){
confirmtimer_taster++;
if (QUERYTASTER1 && confirmtimer_taster<=5000) //wenn Taster T1 gedrückt wird (lese Pin Data Status Register aus)dann...
{ //Zeit in ms: 5000 ms = 5s
printf("Test erfolgreich. Funktion Taster T1 bestätigt.\n");
printf("Dieser Taster ist für kommende Tests der Bestätigungstaster.\n"); //Bestätigung, dass Taster Funktioniert hat
confirmfunction_taster1=1;
confirmtimer_taster=0;
testTask=1;
}
else if(confirmtimer_taster>5000) //Wenn Timer über 5sec dann...
{
printf("Test Taster T1 nicht bestanden. Taster T1 wurde nicht innerhalb in der vorgegebenen Zeit betätigt.\n");
confirmtimer_taster=0;
testTask=1;
}
}
//*********************************** Taster T2 ********************************************************
printf("Test Taster T2 beginnt.\n");
printf("Bitte drücken Sie innerhalb von 5 Sekunden Taster T2.\n");
while(testTask == 1){
confirmtimer_taster++;
if (QUERYTASTER2 && confirmtimer_taster<=5000) //wenn Taster T2 gedrückt wird (lese Pin Data Status Register aus)dann...
{ //Zeit in ms: 5000 ms = 5s
printf("Test erfolgreich. Funktion Taster T2 bestätigt.\n");
printf("Dieser Taster ist für kommende Tests der Ablehnungstaster.\n"); //Bestätigung, dass Taster Funktioniert hat
confirmfunction_taster2=1;
confirmtimer_taster=0;
testTask=1;
}
else if(confirmtimer_taster>5000) //Wenn Timer über 5sec dann...
{
printf("Test Taster 2 nicht bestanden. Taster T2 wurde nicht in der vorgegebenen Zeit betätigt.\n");
confirmtimer_taster=0;
testTask=1;
}
}
//*********************************** Schalter S1 ********************************************************
printf("Test Schalter S1 beginnt.\n");
printf("Bitte bringen Sie den Schalter S1 in die Ausgangslage (Schalthebel nach rechts) und drücken Sie zum Bestätigen den Taster T1 zum Start, oder Taster T2 für den Abbruch des Tests.\n");
while(testTask == 1){
//confirmtimer_taster++;
if (QUERYSCHALTER1 && QUERYTASTER1)
{
printf("Test 1/2 erfolgreich.\n");
printf("Bitte den Schalthebel in die linke Position bringen und bestätigen Sie mit dem Taster T1 oder brechen mit Taster T2 ab.\n");
if (!QUERYSCHALTER1 && QUERYTASTER1)
{
printf("Test 2/2 erfolgreich. Funktion Schalter S1 bestätigt.\n");
confirmfunction_schalter1=1;
}
else if (QUERYTASTER2)
{
printf("Test abgebrochen. Funktion Schalter S1 nicht bestätigt\n");
confirmfunction_schalter1=2;
}
//confirmfunction_schalter1=1;
//confirmtimer_taster=0;
testTask=1;
}
else if(QUERYTASTER2) //Wenn Taster T2 dann....
{
printf("Test: Schalter S1 nicht bestanden.\n");
//confirmtimer_taster=0;
testTask=1;
}
}
//*********************************** Schalter S2 ********************************************************
printf("Test Schalter S2 beginnt.\n");
printf("Bitte bringen Sie den Schalter S2 in die Ausgangslage (Schalthebel nach rechts) und drücken Sie zum Bestätigen den Taster T1 zum Start, oder Taster T2 für den Abbruch des Tests.\n");
while(testTask == 1){
//confirmtimer_taster++;
if (QUERYSCHALTER2 && QUERYTASTER1)
{
printf("Test 1/2 erfolgreich.\n");
printf("Bitte den Schalthebel in die linke Position bringen und bestätigen Sie mit dem Taster T1 oder brechen mit Taster T2 ab.\n");
if (!QUERYSCHALTER2 && QUERYTASTER1)
{
printf("Test 2/2 erfolgreich. Funktion Schalter S2 bestätigt.\n");
confirmfunction_schalter1=1;
}
else if (QUERYTASTER2)
{
printf("Test abgebrochen. Funktion Schalter S2 nicht bestätigt\n");
confirmfunction_schalter1=2;
}
//confirmfunction_schalter1=1;
//confirmtimer_taster=0;
testTask=1;
}
else if(QUERYTASTER2) //Wenn Taster T2 dann....
{
printf("Test: Schalter S2 nicht bestanden.\n");
//confirmtimer_taster=0;
testTask=1;
}
}
}
Lieben Gruß Logan