Конечно, я знаю, что это полезно для контроля времени задержки, но какое-либо другое использование?
С тактовой частотой 16 МГц каждая строка моей программы займет 1/16000000 секунды, верно?
даже очень очень большая линия займет всего 1/16000000 секунды?
С тактовой частотой 8 МГц каждая строка займет удвоенное время, верно? Таким образом, весь «основной цикл» займет двойное время, верно?
oscillator-clock
n0tis
источник
источник
Ответы:
Потому что так работают компьютеры, микроконтроллеры и т. Д.
Нет.
Нет.
Часы определяют, с какой скоростью команды машинного кода извлекаются из памяти и выполняются. Большинство инструкций занимает 1 такт, а некоторые - больше.
Одна строка кода C может быть скомпилирована в любое количество инструкций по сборке, которые затем преобразуются в машинный код (необработанные числа). Это может быть где-то от 1 инструкции по сборке до тысяч инструкций по сборке, в зависимости от того, что делает строка.
Каждая операция в чипе регулируется часами. Если тактовая частота равна половине скорости, то чип работает на половине скорости, поэтому каждая операция займет вдвое больше времени, да.
источник
В ответе @ Majenko нет ответа: Да, с тактовой частотой 8 МГц каждая строка будет занимать двойное время. Если линия не ожидает чего-то, что не управляется часами - например, внешний вход.
В дополнение к ответу @ Majenko, у CPU есть часы, чтобы убедиться, что инструкции выполнены до начала следующего шага. Процессор состоит из множества транзисторов (я обнаружил ссылку, в которой указывалось, что AtMega находилась в диапазоне низких миллионов, на порядок или меньше).
В течение цикла электричество протекает через микросхему, включая / выключая транзисторы, в результате чего большее количество транзисторов включается и выключается и так далее по линии. В то время как это происходит, некоторые части чипа имеют «неправильное» значение - вы можете подумать, что это посередине вычислений (вы добавили столбец 1 и столбец 10 с и собираетесь начать с Колонка 100-х годов). Вы не хотите, чтобы это влияло на внешний мир, поэтому (например) ваши выходные контакты фиксируются - удерживаются на любом значении - пока инструкция не будет завершена. Время, необходимое для выполнения инструкции, варьируется, но производитель вырабатывает самую медленную инструкцию при худших обстоятельствах.
Для AtMega (который является чипом на Arduino), Atmel (который разработал чип) объявил, что это 1/20 000 000 секунд - это 20 МГц.
Обратите внимание, что не все микропроцессоры выполняют все свои инструкции по 1 инструкции за цикл - некоторые инструкции могут занимать 1, 2 или 10 циклов. Конвейерная обработка делает вещи еще более сложными - процессор может выполнять часть работы (например, извлекать следующую инструкцию) в одном цикле, выполнять ее в следующем - но пока он выполняет инструкцию 1, он также может извлекать следующую инструкцию. Чтобы сделать это, может потребоваться угадать, какая инструкция будет следующей (в случае машинного кода, эквивалентного «goto» - такой используется для циклов), и если он угадывает неправильно, он должен справиться с который; выбросить извлеченную инструкцию и получить следующую, потеряв цикл.
На странице Википедии, посвященной конвейерной обработке команд, показан пример конвейерной обработки чипа RISC в 5 этапов - выборка команд, декодирование команд, выполнение, доступ к памяти и обратная запись. Таким образом, вы можете иметь 5 инструкций на каком-то этапе выполнения, перекрывая друг друга. До фазы «обратной записи» инструкции не имеют реального эффекта. Вы можете думать об этом как о сборочной линии - сборка виджета занимает 7 минут, но его можно разбить на 5 этапов, самый длинный этап занимает 2 минуты. Каждые две минуты каждый частично завершенный виджет перемещается сборочной линией на следующую станцию. Вы получаете один виджет каждые две минуты. «Часы» могут работать только с самым медленным шагом. Если вы выдвинете виджет быстрее, «узкое место» будет ставить все больше и больше виджетов в очередь.
источник