gpt4 book ai didi

c - 帮助破译速记C

转载 作者:太空狗 更新时间:2023-10-29 15:44:54 26 4
gpt4 key购买 nike

我正在尝试使用为我们编写的一些固件来解决一些问题。我对 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;
}

这是一个定时器中断函数,显然每 4.4 毫秒触发一次

谢谢。

最佳答案

让我们一步一个脚印...

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

它的作用是:

  • 将状态向左移动一位(丢掉最高位,移动所有内容,将低位设置为 0)
  • 如果输入为 0(关闭),则设置低位
  • 强制打开前 3 位。

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

然后 if 语句只检查所有 13 个位是否关闭(给出 0xe000)或打开(给出 0xffff)。如果关闭,则按钮已被按下 13 个样本;如果打开,则 未压缩 13 个样本。

这给出了 4.4ms * 13 = 57.2ms 的去抖动时间 - 与评论有一点偏差,或者定时器间隔更接近 5.385ms。

关于c - 帮助破译速记C,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1258151/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com