【发布时间】:2018-03-11 14:12:07
【问题描述】:
我想运行一个间隔为 5 毫秒的计时器。我创建了一个 Linux 计时器,当调用 sigalrm_handler 时,我正在检查上一次调用的经过时间。当我希望间隔约为 5000 微秒且误差最小时,我得到的时间如下:4163、4422、4266、4443、4470 4503、4288 微秒。我不知道为什么这个间隔不是恒定的,而是变化的,而且远低于应有的值。
这是我的代码:
static int time_count;
static int counter;
struct itimerval timer={0};
void sigalrm_handler(int signum)
{
Serial.print("SIGALRM received, time: ");
Serial.println(micros()-time_count);
time_count=micros();
}
void setup() {
Serial.begin(9600);
timer.it_value.tv_sec = 1;
timer.it_interval.tv_usec = 5000;
signal(SIGALRM, &sigalrm_handler);
setitimer(ITIMER_REAL, &timer, NULL);
time_count = micros();
}
【问题讨论】:
-
我不明白这个问题,如果你已经让你的计时器工作了会有什么问题?顺便说一句,你能提供一个最小的工作代码块吗?
-
间隔不是恒定的。它变化多端,远低于 5000 微秒。
-
请编辑您的问题,解释为什么 5 毫秒时间对您如此重要。
标签: timer arduino intel-edison