gpt4 book ai didi

c - 如何避免定时器堆栈

转载 作者:行者123 更新时间:2023-11-30 19:37:28 24 4
gpt4 key购买 nike

如果他的问题已经以某种方式被问过,我很抱歉。

我目前正在 Linux 内核中重写振动驱动程序。我之所以改变它是因为振动电机获得特定速度时引起的振动过强。为了解决这个问题,我实现了一个类似 PWM 的 Controller ,它只是在达到最大加速度之前的特定时间停止电机,最后它不断重复这个 Action 。

有一个大问题在使用键盘时尤其明显。如果振动器在很短的时间内频繁切换,计时器往往会累积时间,从而导致滞后和振动延迟。当同时输入多个键时,很容易实现此缺陷。

为了直观地向您展示此事件,我创建了一个小图表。

Timer Graph

红色区域表示计时器重叠。振动 1 和 2 之间的重叠会导致第二次振动延迟,从而将其移出原来的位置。

防止此问题的主要想法是,如果前一个振动尚未完成,则将振动合并为一个。例如,振动 2 将简单地加入振动 1。

另一种方法是简单地使用单个振动来实现堆叠振动,例如,振动 2 可以简单地使用振动 1 的最后一个剩余位。为什么会这样呢?好吧,因为我实现的振动 Controller 仅适用于 100 毫秒以下的时间,这意味着如果一次向击键发送垃圾信息,则振动时间差异不会明显,而是两个击键应形成并共享单个振动。

最后我的问题是,如果函数再次被调用,我怎样才能进行自身检查。或者至少为该函数添加一个时间来检查击键是否在短时间内多次被垃圾邮件发送?

最佳答案

int foo ()
{
static foo_counter;

if(foo_counter)
{
// If function has been called again
}

return(0);
foo_counter++;
}

关于c - 如何避免定时器堆栈,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39804834/

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