Чому в моєму ардуїно є годинник?


9

Звичайно, я знаю, що корисно контролювати час затримки, але будь-яке інше використання?

З тактовою частотою 16 МГц кожен рядок моєї програми займе 1/16000000 секунди, правда?

навіть дуже велика лінія займе лише 1/16000000 секунди?

З тактовою частотою 8 МГц кожен рядок займе вдвічі більше часу, правда? Так що весь "основний цикл" теж займе подвійний час, правда?


3
Ви плутаєте вказівки між інструкціями C та інструкціями з машини (складання). Але навіть якщо ви писали безпосередньо в збірці, ви могли б добре використати це, оскільки програма НЕ лінійна. Я маю на увазі, що переривання, як випливає з назви, перериває нормальний потік коду, перейшовши за іншою інструкцією, а потім відновившись. Тож, можливо, між одним рядком і наступним він змушений виконати ISR, що може бути дуже довгим
frarugi87

2
Якщо ви будете годинником свого чіпа на вісім мілігерц, навіть найпростіший рядок коду займе назавжди. Я пропоную вам використовувати годинник в мега герц діапазону (МГц).
Едгар Бонет

Кількість циклів, необхідних для виконання кожної інструкції з машини, вказана в Інструкції з набору інструкцій .
Едгар Бонет

Чорт
забираю

Відповіді:


13

Чому в моєму ардуїно є годинник?

Тому що так працюють комп’ютери та мікроконтролери тощо.

З тактовою частотою 16 МГц кожен рядок моєї програми займе 1/16000000 секунди, правда?

Ні.

навіть дуже велика лінія займе лише 1/16000000 секунди?

Ні.

Годинник визначає, з якою швидкістю вилучаються інструкції машинного коду з пам'яті та виконуються. Більшість інструкцій займає 1 тактовий цикл, а деякі - більше.

Один рядок коду С може бути складений в будь-яку кількість інструкцій по збірці, які потім перетворюються в машинний код (необроблені номери). Це може бути від 1 інструкції по збірці до тисяч інструкцій по збірці, залежно від того, що виконується в рядку.

З тактовою частотою 8 МГц кожен рядок займе вдвічі більше часу, правда? Так що весь "основний цикл" теж займе подвійний час, правда?

Кожна операція в мікросхемі регулюється годинником. Якщо тактова частота становить половину швидкості, чіп працює з половиною швидкості, тому кожна операція займе вдвічі більше часу, так.


також перебиває.
njzk2

1
Незначна нитка: Повинна бути "... де-небудь з 0 інструкцій по збірці ...", навіть без оптимізатора, але тим більше після оптимізації.
Петро

2
Не плутайте бідного хлопчика. Йому достатньо важкий час, як це є.
Majenko

@Majenko: плутанина - необхідність. Це важко.
intelfx

@intelfx "ІТ"? Це програмування, а не ІТ ....
BalinKingOfMoria Відновлення CM

10

Не відповів у публікації @ Majenko: Так, за тактовою частотою 8 МГц кожен рядок займе вдвічі більше часу. Якщо лінія не чекає чогось, що не керується годинником - наприклад, зовнішній вхід.

На додаток до відповіді @ Majenko, перед тим, як розпочати наступний крок, у процесора є годинник для забезпечення виконання інструкцій. ЦП складається з безлічі транзисторів (я знайшов посилання, яке вказувало, що AtMega знаходився в діапазоні низьких мільйонів, "подавайте чи приймайте порядок".

Під час циклу електрика протікає через мікросхему, включаючи / вимикаючи транзистори, результати яких включатимуть / вимикатимуть більше транзисторів і так далі вниз по лінії. Хоча це відбувається, деякі частини мікросхеми мають "неправильне" значення - ви можете вважати, що це на півдорозі через обчислення (ви додали свій стовпець і стовпчик 10s, і ось-ось почнете починати з Стовпець 100-х років). Ви не хочете, щоб це впливало на зовнішній світ, тому (наприклад) ваші вихідні штифти застібаються - тримаються за будь-якого значення - до тих пір, поки інструкція не буде завершена. Скільки часу потрібно, щоб виконати інструкцію, змінюється, але виробник розробляє найповільнішу інструкцію за найгірших обставин.

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

Зауважте, що не всі мікропроцесори виконують усі свої вказівки за 1 інструкцією за цикл - деякі інструкції можуть тривати 1, 2 або 10 циклів. В конвеєрному процесі все ускладнюється - процесор може виконати певну роботу (наприклад, отримати наступну інструкцію) за один цикл, виконати в наступному - але, поки він виконує інструкцію 1, він також може отримати наступну інструкцію. Для цього може знадобитися здогадуватися, яка інструкція наступна (у випадку машинного кодового еквівалента "goto" - такий використовується для циклів), і якщо він здогадається неправильно, він повинен впоратися з що; відкиньте отриману інструкцію та отримайте наступну, втрачаючи цикл.

Сторінка Вікіпедії щодо конвеєрного наведення інструкцій показує приклад конвеєра чіпа RISC на 5 етапах - отримання інструкцій, декодування інструкцій, виконання, доступ до пам'яті та повернення. Отже, ви можете мати 5 інструкцій на певному етапі виконання, що перекриваються. До етапу "списання" інструкції не мають реального ефекту. Ви можете подумати про це як складальну лінію - для складання віджета потрібно 7 хвилин, але його можна розбити на 5 етапів, найдовший етап - 2 хвилини. Раз на дві хвилини кожен частково виконаний віджет переміщується конвеєрним рядком на наступну станцію. Ви отримуєте один віджет кожні дві хвилини - "годинник" може поставити галочку лише так швидко, як і найповільніший крок. Якщо ви швидше виштовхнете віджет, "вузьке місце" буде ставати все більше і більше віджетів у черзі.


AVR має дуже неглибокий конвеєр: лише виймання та виконання. Потім умовні стрибки беруть або один цикл (стрибок не зроблений), або два цикли (стрибок зроблений).
Едгар Бонет

Додаткове ускладнення: кеш не вистачає.
Martín-Blas Pérez Pinilla

Є багато речей, про які я не згадував: кеш (будь-якого типу), багатопотоковий, багатоядерний ... Я, мабуть, уже заглибився у свій пост.
AMADANON Inc.
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.