В настоящее время я проверяю онлайн-курс edX о встроенных системах и узнаю об использовании таймера SysTick для расчета прошедшего времени.Использование ARM Cortex SysTick для расчета истекшего времени; что произойдет, когда счетчик SysTick перевернется?
Picture of logic I'm referring to
Code of logic I'm referring to
Однако есть один момент, который сбивает с толку меня. Я понимаю идею вычитания «сейчас» из «последней», чтобы получить прошедшее время. Тем не менее, что вы делаете, когда «сейчас» перевернется, когда таймер SysTick достигает 0 и получает перезагрузку, но «последним» является значение от ПЕРЕД прежде чем таймер SysTick перевернулся (так «сейчас» есть> чем «последний», когда обычно это должно быть меньше)? Значение хранится в unsigned long, так же как это нарушает программу? Или это никогда не произойдет, и если да, то почему? Буду признателен за любую помощь по расчистке!
Я посмотрел на единственную ссылку, которую я мог найти, которая была похожа на мой вопрос здесь: How to deal with a wrapping counter in embedded C, но я не нашел ясного ответа на мой вопрос.
Почему бы вам просто не попробовать какие-то значения? 'unsigned' integer wraparound очень хорошо определен, и даже если счетчик обертывает, * целочисленная разность * знака * до предыдущего значения будет по-прежнему правильной (если она достаточно мала, т. е. половина вашего диапазона' int') – tofro
[Использование модульная арифметика, чтобы избежать проблем с переполнением]] (https://blogs.msdn.microsoft.com/oldnewthing/20050531-22/?p=35493) – kkrambo
@tofro Я дам ему шанс, спасибо! Я просто хотел прояснить, что происходит логически заблаговременно, так как я решил реализовать код без полного понимания логики, было бы бессмысленно. – Yuerno