开关盒需要一点更新

Posted

技术标签:

【中文标题】开关盒需要一点更新【英文标题】:Switch case needs a little update 【发布时间】:2020-04-20 07:06:03 【问题描述】:

我正在使用开关盒构建一个去抖动计时器。

我输入了“案例 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
    

【问题讨论】:

在给定的上下文中,我看不到任何将 in_1_timerTimeout 设置为 true 的地方,因此,它总是会跳过 if (in_1_timerTimeout),因为它保持为 false。 是的,我想通了,我没有完成整个计时器,所以正如你所说,我从来没有让 in_1_timerTimeout 真正中断。谢谢! 很高兴能帮上忙,我会从我的评论中回答。 【参考方案1】:

在给定的上下文中,我看不到任何将 in_1_timerTimeout 设置为 true 的地方。

因此,它将始终跳过 if (in_1_timerTimeout),因为它保持为 false。

我没有发现你的 switch 语句有任何问题,它工作正常。

【讨论】:

以上是关于开关盒需要一点更新的主要内容,如果未能解决你的问题,请参考以下文章

什么是大型开关盒的好替代品?

Java - 如何在开关盒中存储数组

是否有太多的开关盒可以减少圈复杂度?

为啥 Pentaho 开关盒在运行后不会损坏?

如何测试取决于参数的开关盒?

开关盒错误?