是否可以在Linux中设置具有本地时间的计时器?

时间:2016-06-17 08:41:12

标签: c linux timer embedded-linux

我正在使用raspberry pi进行物联网项目,

我想在06:00:00和12:00:00之间的某个时间举办活动

但我不能用jiffies这样做,因为jiffies只计算自os开始以来的时间。

我有一个想法:

我可以每秒提高一次中断并查看当地时间,并将其与特定时间进行比较。

但我认为这是非常糟糕的方式

你对这个问题有什么好主意吗?

提前致谢。

3 个答案:

答案 0 :(得分:2)

在06:00:00和12:00:00运行cron。通过cron。How to create a cronjob

触发您的活动

答案 1 :(得分:1)

Crontabcron是忍者已经回答的方式。

如果您需要非常轻量级的解决方案,并且想要使用RTC。然后有另一种解决方案:

RTC芯片通常包含报警功能。如果中断信号从RTC连接到CPU,则可以通过linux的rtc API使用它。

对于设置和等待计时器,你需要这样的东西(不是一个完整的例子):

struct rtc_time rtc_tm = {....};

fd = open("/dev/rtc0", O_RDONLY, 0);  // Open the RTC device
ioctl(fd, RTC_AIE_ON, 0);             // Enable alarm interrupt
ioctl(fd, RTC_ALM_SET, &rtc_tm);      // Set the alarm time
read(fd, &x, sizeof(x));              // Wait the alarm

完整示例here

答案 2 :(得分:1)

不是使用cron,而是可以做cron自己做的事情。像这样:

struct timespec target = { ... };
int ret;

while((ret = clock_nanosleep(CLOCK_REALTIME, TIMER_ABSTIME, &target, NULL)) == EINTR)
    ;

/* if !ret, current time is $target here */

需要循环来处理可能的中断; check clock_nanosleep(2)。