Дело в коммутаторе требует небольшого обновления - PullRequest
0 голосов
/ 20 апреля 2020

Я строю таймер отладки, используя переключатели.

Я ввожу «случай 1», но он не продолжается после if (in_1_timerTimeout), и я понятия не имею, почему. Может кто-нибудь выяснить, чего не хватает?

Пока что я проверил, что код существует "case 0" и вводит "case 1", но на этом все заканчивается. У меня такое чувство, что я могу неправильно интерпретировать if (in_1_timerTimeout), поэтому я не правильно его использую.

#include "mcc_generated_files/mcc.h"
#include "stdbool.h"

unsigned long in_1_timer = 0;
unsigned long in_1_state = 0;

bool in_1_timerTimeout = false;
bool in_1 = false;


void myInterruptHandler(void)
{

}

void handleInputFilter(void)
{
    switch (in_1_state)
    {
        case 0:
            if (!in_button_GetValue())
            {
                in_1_timer        = 1000;
                in_1_timerTimeout = false;
                in_1_state        = 1;
            }
            break;

        case 1:
            if (!in_button_GetValue())
            { 
                //programmet kører hertil, men kommer ikke videre til næste "if"
                if (in_1_timerTimeout)
                { 
                    in_1_state       = 2;
                    in_1             = true;
                    //out_LED_SetHigh();
                }
            } else in_1_state     = 0;
            break;

        case 2:

            if (in_button_GetValue())
            {
                in_1_timer        = 1000;
                in_1_timerTimeout = false;
                in_1_state        = 3;
            }
            break; 

        case 3:

            if (in_button_GetValue())
            {
                if (in_1_timerTimeout)
                {
                    in_1_state        = 0;
                    in_1              = false;
                    //out_LED_SetLow();
                }
            } else in_1_state     = 2;
            break;
    }
}

void main(void)
{
    SYSTEM_Initialize();
    while (1)
    {
        handleInputFilter();
        // Add your application code
    }
}

1 Ответ

0 голосов
/ 23 апреля 2020

В данном контексте я не вижу места, где in_1_timerTimeout имеет значение true.

Из-за этого он всегда будет пропускать if (in_1_timerTimeout), потому что он остается ложным.

Я не вижу проблем с вашим оператором switch, он работает нормально, как есть.

...