帮助解读速记C

Ste*_*ven 3 c embedded

我正在试图找出一些为我们编写的固件.我不是那么熟悉C,我觉得这里有一些简写,我只是没有得到.我不明白代码与评论的关系,特别是你如何从中获得70毫秒.你能帮忙翻译成英文吗?

// so the button has to be held for 70 ms to be considered being pressed
// and then has to be released for 70ms to be considered un-pressed
State=(State<<1) | !input(USER_BUTTON) | 0xe000;
if(State==0xe000)
{
    Debounced_Button_Pressed =  TRUE;
    time_button_held++;
}
else if (State==0xffff)
{
    Debounced_Button_Pressed =  FALSE;
}
Run Code Online (Sandbox Code Playgroud)

这是一个定时器中断功能,显然每4.4ms发射一次

谢谢.

bdo*_*lan 13

让我们一步一步......

State=(State<<1) | !input(USER_BUTTON) | 0xe000;
Run Code Online (Sandbox Code Playgroud)

这样做是:

  • 向左移一个状态(抛出最高位,将所有内容移开,将低位设置为0)
  • 如果输入为0(关闭),则设置低位
  • 强制前3位.

因此,这里有13位未强制打开,它们形成了USER_BUTTON输入的最后13个样本的历史记录.

if语句然后只检查这些位中的所有13位是关闭(给出0xe000)还是打开(给出0xffff).如果关闭,按钮一直按下了13个样品; 如果打开,则13个样本未被按下.

然后,这给出了4.4ms*13 = 57.2ms的去抖时间 - 与评论稍微偏离,或者定时器间隔接近5.385ms.