Альтернатива RDTSC для Arduino
Чтобы рассчитать время выполнения операции, я сохранял результат millis()
до и после операции, чтобы рассчитать интервал времени. Есть ли альтернатива Arduino Uno, такая как RDTSC для архитектуры x86?
@Harini, 👍1
Обсуждение1 ответ
Лучший ответ:
Есть несколько вариантов. Лучший выбор для вас зависит от нужное временное разрешение и максимальная продолжительность мера:
millis()
подходит для медленных задач. Разрешение 2 мс (большую часть времени он увеличивается с шагом 1 мс, но 2 мс время от времени) и может измерять продолжительность до 49,7 дней.micros()
— это простой выбор, когда вам нужно большее разрешение для более быстрые вещи. Он увеличивается с шагом 4 мкс и ограничен около 71,6 минут.Для очень быстрых задач можно получить разрешение за один цикл, если настроить Таймер 1 для подсчета на полной скорости процессора, если вы не нужен таймер для чего-то еще. Но будьте осторожны, таймер переворачиваться примерно каждые 4,1 миллисекунды.
Вы также можете использовать Timer 1 с предделителем, установленным на ÷8, чтобы расширить измеряемый диапазон до 32,8 мс ценой ухудшение разрешения.
В таблице перечислены доступные методы, отсортированные по разрешению:
method data type resolution max. duration
--------------------------------------------------
millis() uint32_t 2 ms 49.7 days
micros() uint32_t 4 µs 71.6 min
Timer 1 (÷8) uint16_t 0.5 µs 32.8 ms
Timer 1 (÷1) uint16_t 62.5 ns 4.1 ms
Большое спасибо! У меня есть подвопрос: «Timer 1 (÷64)» и «micros()» кажутся эквивалентными по разрешению, будет ли чтение значения «Timer1» более точным/надежным, чем использование «micros()»?, @Harini
@Harini: Чтение «TCNT1» будет быстрее, чем вызов «micros()», поэтому вы получите меньше накладных расходов за счет сокращения периода переноса., @Edgar Bonet
- Разница между «time_t» и «DateTime»
- Получение кода FFT arduino для работы более 9 часов с использованием micros()
- Невозможно ввести клавишу клавиатуры в цикл while
- Как получить текущее время и дату в Arduino без внешнего источника?
- Как запустить цикл на определенное время?
- Как сделать очень долгую функцию delay(), несколько часов
- Почему мои часы реального времени показывают неверное время с моего ПК?
- Получение BPM из данного кода
да, в Uno альтернативой является millis(), @Juraj