Linux中的看门狗定时器
WatchDog Timer In Linux
我想在linux中使用定时器中断做软件看门狗定时器。如何在linux系统中生成定时器中断?
如果您想使用定时器中断,请使用信号,特别是SIGALRM
。您可以使用alarm()函数来请求超时。如果你想使用粒度,你可以使用ualarm()。一旦到达超时时间,它将调用您之前定义的回调函数。
下面是一个示例代码:
#include <signal.h>
void watchdog(int sig)
{
printf("Pet the dogrn");
/* reset the timer so we get called again in 5 seconds */
alarm(5);
}
/* start the timer - we want to wake up in 5 seconds */
int main()
{
/* set up our signal handler to catch SIGALRM */
signal(SIGALRM, watchdog);
alarm(5);
while (true)
;
}
您有几个其他的选项来实现看门狗:
- 写/使用一个内核驱动程序,它实际上作为一个看门狗,如果狗不是宠物(或踢),应用硬复位到设备
- 使用一个看门狗,一个有趣的软件看门狗守护进程的实现。
中断在应用程序级别不存在(只有内核管理它们,实际上它已经得到了很多定时器中断)。您可以使用信号、计时器和延迟系统调用(特别是poll
或nanosleep
)。阅读Advanced Linux Programming.
首先读取time(7)手册页。然后是timer_create(2), poll(2), timerfd_create(2), setitimer(2), sigaction(2), nanosleep(2), clock_gettime(2)等....
相关文章:
- Ardunio UNO解决了多个重叠的定时器循环
- 我们能否在stm32f中使用硬件定时器控制两个独立的进程
- Arduino Nano:A4988 使用串行输入时通过定时器进行步进控制不稳定
- 没有信号处理程序的POSIX定时器的目的是什么?
- 在定时器回调函数中使用 Sleep() 会导致C++出现问题吗?
- 如何在Qt中修改QWebsocket定时器
- 如何在看门狗执行前将日志复制到闪存?
- 导致ESP32随机停止并触发看门狗计时器重新启动的串行数据包
- C++Windows中的高分辨率定时器库
- 如何用单个信号处理程序解决这个多linux定时器的问题
- C#/.NET定时器和Win32睡眠函数都是不精确的
- Udp 在 QT 定时器信号中写入数据报
- AVR CTC模式下的16位定时器
- Linux C++定时器与软实时支持
- 在Qt中实现精确定时器
- 在不中断串行的情况下禁用Arduino上的定时器0中断
- 跨平台C++高精度事件定时器实现
- 在 C++11 中实现看门狗计时器
- 我可以编写什么程序来冻结/挂起我的程序来测试看门狗计时器
- Linux中的看门狗定时器