gpt4 book ai didi

c - 为什么我的去抖器不起作用?

转载 作者:太空宇宙 更新时间:2023-11-04 01:52:58 25 4
gpt4 key购买 nike

我正在尝试编写一个去抖动器,如果它已经被去抖动(-1 四次弹跳),它只会返回一个有效参数 (>0)。到目前为止我已经想出了这个,但它总是返回 -1,为什么我想知道:

#include <stdio.h>
#include <time.h>
#include <unistd.h>

#define BOUNCETIME 500000000 //(500ms)

#define SetTime(x) clock_gettime(CLOCK_REALTIME, (x)); // set time

static struct timespec tset;
struct timespec tnow;

int DeBounce(unsigned int arg)
{
static int val = -1;
long long nsec = 0;
if (val < 0) {
val = arg;
SetTime(&tset);
return arg;
} else {
SetTime(&tnow);
if (tnow.tv_nsec < tset.tv_nsec)
nsec = tnow.tv_nsec + 1000000000;
else
nsec = tnow.tv_nsec;
if (tnow.tv_nsec - tset.tv_nsec > BOUNCETIME) {
printf("arg okay\n");
val = -1;
return arg;
}
else
printf("bounce, ignore!\n");
return -1;
}

}

int main (void)
{
printf("#1 %d\n",DeBounce(0));
usleep(1);
printf("#2 %d\n",DeBounce(1));
usleep(200);
printf("#3 %d\n",DeBounce(1));
sleep(1);
printf("#4 %d\n",DeBounce(1));
}

我得到的输出是:

$ ./debounce 
#1 0
bounce, ignore!
#2 -1
bounce, ignore!
#3 -1
bounce, ignore!
#4 -1
$

最佳答案

usleep(600); 是 600 微秒。但是你的去抖周期是 500 毫秒

此外 tnow.tv_nsec - tset.tv_nsec 是不正确的,因为 tv_nsec 不是完整的时间值,而只是超过一秒的纳秒数。以纳秒为单位计算耗时的正确方法是这样的:

(tnow.tv_sec * 1.0e-9 + tnow.tv_nsec) - (tset.tv_sec * 1.0e-9 + tset.tv_nsec)

关于c - 为什么我的去抖器不起作用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39987772/

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