0

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

大多数人建议TimeAlarm.h,这是一个与图书馆安排计时器和警报的Time.h图书馆。不幸的是,警报不会在中断时间运行。

我没有添加 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);
}
4

1 回答 1

0

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

您问“这样的想法是否可以反击” - 是的,在维护方面令人头疼。您的逻辑和设置分散在整个代码中。

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

于 2018-03-20T12:09:17.040 回答