帮助破译速记C

帮助破译速记C,c,embedded,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<&l

我正试图通过一些为我们编写的固件来解决一些问题。我对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;
}
//因此按钮必须保持70毫秒才能被视为按下
//然后必须释放70毫秒才能被视为未按下

State=(State把变量“State”想象成16位

State=(State<<1) | !input(USER_BUTTON) | 0xe000;

状态=(State他通过每4.4ms将开关状态的样本转换为一个整数来解除开关的抖动。然后,他可以通过查看该整数的内容是否与某个十六进制值匹配来区分有效的按压和噪声。看起来他还可以通过将其与不同的值进行比较来判断是否已根据他的定义释放。

如果不知道最初的状态是什么以及0xE000代表什么(可能只是一个寄存器位字段),这段代码是从页面复制的,那么信息就不够了20@Mark-我知道它看起来很熟悉啊哈!你知道,我想知道他为什么用状态作为变量…它和其他样式不一致(没有其他内容大写)我们已经有了一个变量“state”一方面,我很高兴他没有重新发明轮子…另一方面,我们现在是有版权问题还是这都是犹太教的?谢谢!这对解决这个问题很有帮助。你有没有可能带我经过几次迭代,假设状态从零开始,输入(用户按钮)是错误的(例如)它不是变得无限大吗?|意味着按位OR,对吗?所以当我拿出我的windows编程计算器时,前3个的结果是:E001 1E003 3E007,我们已经可以看到它再也不可能是0xffff或0xe000了。我缺少什么简单的明显的东西?状态很可能是一个无符号的短字符,这意味着它是每次截断16位(4个十六进制数字)。