Максимальное количество прерываний таймера
По этой ссылке
https://os.mbed.com/handbook/Ticker
в нем говорится: "Обратите внимание, что таймеры основаны на 32-битных микросекундных счетчиках int, поэтому могут работать только максимум до 2^31-1 микросекунд, то есть 30 минут. Они рассчитаны на промежуток времени между микросекундами и секундами. Вы должны рассмотреть время ()/ Часы реального времени."
Мой вопрос заключается в том, что этот 30-минутный лимит предназначен только для случаев, когда используется интервал в 1 нас? что-то вроде этого
flipper.attach_us(&flip, 1);
Если мне нужно вызывать прерывание каждые 1 мс, значит ли это, что счетчик теперь может работать до 30000 минут? что-то вроде этого
flipper.attach_us(&flip, 1000);
Кроме того, что произойдет с таймером после его заполнения, он самостоятельно очищается и перезапускается или выдает ошибку.
2 ответа
Страница, на которую вы ссылаетесь, старая. Таймеры больше не 32-битные, но теперь 64-битные; так что это больше не проблема. Смотрите последнюю версию Ticker
документы по адресу https://os.mbed.com/docs/latest/reference/ticker.html.
Это объявление функции:
void attach_us (Callback< void()> func, us_timestamp_t t)
"т" - это время между звонками. Предупреждение, которое вы нашли на связанной странице ( https://os.mbed.com/handbook/Ticker), говорит, что максимальный интервал времени, который вы можете установить, составляет около 30 минут, потому что "t" - это 32-битное целое число. (Я думаю, что это 64-битная версия в последнем API. https://os.mbed.com/docs/latest/reference/ticker.html).
Когда таймер достигает значения, указанного в "t", он переполняется и запускает функцию обратного вызова. Это повторяется до тех пор, пока вы не отсоедините его.
Если ваш интервал составляет 1 мс, вам не нужно беспокоиться о максимальном ограничении 30 минут.