Максимальное количество прерываний таймера

По этой ссылке

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 минут.

Другие вопросы по тегам