链接多个RTC警报:好的或坏的做法

时间:2018-03-18 23:24:22

标签: arduino interrupt real-time-clock

在SAMD Arduino上工作时,我发现自己需要多个警报,在中断时触发事件。

大多数人都建议TimeAlarm.h,这是一个用Time.h库安排计时器和闹钟的库。不幸的是,警报不会在中断时间内运行。

我提出了#34; daisychaining"而不是添加Time和TimeAlarms库。 RTC报警。我想知道这是好事还是坏事。这样的事可以咬回来吗?

代码快照:

void main() {
    ...
    //set alarm at 16:0:0 and trigger Event_1 at interrupt time
    rtc.enableAlarm(16,0,0);
    rtc.attachInterrupt(Event_1_isr);
    ...
}

void Event_1_isr() {
    ...some code...
    //Set next alarm and interrupt Event_2
    rtc.setAlarmTime(16, 0, 15);
    rtc.enableAlarm(rtc.MATCH_HHMMSS);
    rtc.detachInterrupt();
    rtc.attachInterrupt(Event_2_isr);
}

void Event_2_isr() {
    ...some code...
    //I guess you get the point
    rtc.setAlarmTime(16, 0, 30);
    rtc.enableAlarm(rtc.MATCH_HHMMSS);
    rtc.detachInterrupt();
    rtc.attachInterrupt(Event_3_isr);
}

1 个答案:

答案 0 :(得分:0)

我会尝试尽可能快地进出中断。我认为这几乎总是很好的建议。

你问“可以这样思考一下” - 是的,在维护问题上。您的逻辑和设置分散在整个代码中。

我会考虑转过来:制作一个或两个例程来负责设置和处理RTC中断。让它使用时间和例程表来设置正确的延迟并分派适当的动作。然后你不需要附加/分离中断的开销,所有相关代码都在一个地方,你的数据告诉你该怎么做。