瀏覽代碼

MillisTimer - handle begin when active

Two issues:

if you called begin or begingRepeating while still in waiting queue, it would create circular state (code did not set state to waiting)

If you called begin on one in active list, it would first remove it from list, but did not update the timings for items left as the timing all rely on items before it
teensy4-core
Kurt Eckhardt 7 年之前
父節點
當前提交
5638ec5417
共有 1 個檔案被更改,包括 2 行新增0 行删除
  1. +2
    -0
      teensy3/EventResponder.cpp

+ 2
- 0
teensy3/EventResponder.cpp 查看文件

@@ -210,6 +210,7 @@ void MillisTimer::addToWaitingList()
bool irq = disableTimerInterrupt();
_next = listWaiting;
listWaiting = this; // TODO: use STREX to avoid interrupt disable
_state = TimerWaiting;
enableTimerInterrupt(irq);
}

@@ -261,6 +262,7 @@ void MillisTimer::end()
if (s == TimerActive) {
if (_next) {
_next->_prev = _prev;
_next->_ms += _ms; // add in the rest of our timing to next entry...
}
if (_prev) {
_prev->_next = _next;

Loading…
取消
儲存