Почему в моем ардуине есть часы?

Конечно, я знаю, что полезно контролировать время задержки, но любое другое использование?

С 16-часовыми часами каждая строка моей программы займет 1/16000000 секунд, верно?

даже очень большая линия займет только 1/16000000 секунды?

С тактовой частотой 8 МГц каждая линия будет занимать вдвое больше времени, верно? Таким образом, вся «основная петля» тоже займет двойное время, верно?

9 голосов | спросил n0tis 4 FebruaryEurope/MoscowbThu, 04 Feb 2016 15:00:14 +0300000000pmThu, 04 Feb 2016 15:00:14 +030016 2016, 15:00:14

2 ответа


13
  

Почему в моем ардуине есть часы?

Так как работают компьютеры и микроконтроллеры и т. д.

  

С 16-часовыми часами каждая строка моей программы займет 1/16000000 секунд, правильно?

Нет.

  

даже очень большая строка займет только 1/16000000 секунды?

Нет.

Часы определяют, с какой скоростью команды машинного кода извлекаются из памяти и выполняются. Большинство инструкций принимают 1 такт, но некоторые принимают больше.

Одна строка кода C может быть скомпилирована в любое количество команд сборки, которые затем преобразуются в машинный код (необработанные числа). Это может быть от 1 инструкции по сборке до тысяч инструкций по сборке, в зависимости от того, что делает линия.

  

С 8-часовым тактом каждая строка займет двойное время, верно? Таким образом, весь «основной цикл» займет двойной раз, верно?

Каждая операция в чипе определяется часами. Если часы составляют половину скорости, чип работает на половине скорости, поэтому каждая операция займет вдвое больше, да.

ответил Majenko 4 FebruaryEurope/MoscowbThu, 04 Feb 2016 15:19:51 +0300000000pmThu, 04 Feb 2016 15:19:51 +030016 2016, 15:19:51
10

Не ответил на сообщение @ Majenko: Да, с 8-мегагерцовыми часами, каждая строка займет вдвое больше времени. Если линия не ожидает чего-то, что не управляется часами - например, внешний вход.

В дополнение к ответу Мадженко, у процессора есть часы, чтобы гарантировать, что инструкции полны, до того, как начнется следующий шаг. ЦП сделан из большого количества транзисторов (я нашел ссылку, которая указывала, что AtMega находилась в диапазоне низких миллионов, дайте или возьмите порядок).

В течение цикла электричество проходит через чип, включающий /выключает транзисторы, результаты которого будут включать и выключать больше транзисторов и т. д. вниз по линии. В то время как это происходит, некоторые части чипа имеют «неправильное» значение - вы можете думать об этом как о полпути через вычисление (вы добавили столбец и столбец 10s, и вот-вот начнете с 100s). Вы не хотите, чтобы это повлияло на внешний мир, поэтому (например) ваши выходные выводы защелкиваются - удерживаются на любом значении, которое они есть, - пока команда не будет завершена. Сколько времени требуется для завершения инструкции, но производитель разрабатывает самую медленную инструкцию в худших обстоятельствах.

Для AtMega (который является чипом на Arduino), Atmel (который разработал чип) заявил, что это 1/20 000 000 секунд - это 20 МГц.

Обратите внимание, что не все микропроцессоры выполняют все свои инструкции по 1 инструкции за цикл - некоторые инструкции могут занимать 1, 2 или 10 циклов. Консолидация делает вещи еще более сложными - процессор может выполнить некоторую работу (например, извлечь следующую команду) за один цикл, выполнить ее в следующем - но пока она выполняет команду 1, она также может извлечь следующую команду. Для этого может потребоваться догадаться, какая инструкция будет следующей (в случае эквивалента машинного кода «goto» - такой используется для циклов), и если он догадывается неправильно, он должен справиться с что; отбросить полученную команду и получить следующую, потеряв цикл.

На странице Wikipedia на конвейерной обработке инструкций показан пример конвейеризации микросхем RISC в 5 этапов - выбор команды, декодирование команд , выполнение, доступ к памяти и обратная связь. Таким образом, вы можете иметь 5 инструкций на определенном этапе выполнения, перекрываясь. До этапа «обратной записи» инструкции не имеют реального эффекта. Вы можете думать об этом как о сборочной линии - для объединения виджета требуется 7 минут, но его можно разбить на 5 этапов, самый длинный этап занимает 2 минуты. Каждые две минуты каждый частично завершенный виджет перемещается сборочной линией на следующую станцию. Вы получаете один виджет каждые две минуты. «Часы» могут галочь так быстро, как самый медленный шаг. Если вы вытащите виджет быстрее, «узкое место» получит все больше и больше виджетов в очереди.

ответил AMADANON Inc. 5 FebruaryEurope/MoscowbFri, 05 Feb 2016 00:12:06 +0300000000amFri, 05 Feb 2016 00:12:06 +030016 2016, 00:12:06

Похожие вопросы

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132