在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);
}
答案 0 :(得分:0)
我会尝试尽可能快地进出中断。我认为这几乎总是很好的建议。
你问“可以这样思考一下” - 是的,在维护问题上。您的逻辑和设置分散在整个代码中。
我会考虑转过来:制作一个或两个例程来负责设置和处理RTC中断。让它使用时间和例程表来设置正确的延迟并分派适当的动作。然后你不需要附加/分离中断的开销,所有相关代码都在一个地方,你的数据告诉你该怎么做。