Я працюю на повний робочий день інженером прошивки. Нещодавно мені дали завдання переглянути конфігурації GPIO та змінити налаштування за потребою. Я знайшов кілька штифтів, які були неправильно налаштовані, тому я природно налаштував їх, однак мені сказали, що я це зробив у неправильному порядку. Ось що я говорю:
Перед:
GPIO1.direction = ВХОД;Після:
GPIO1.direction = ВИХІД;
GPIO1.значення = 0;
Однак під час огляду коду мені сказали, що мені потрібно змінити порядок ініціалізації на такий:
GPIO1.значення = 0;
GPIO1.direction = ВИХІД;
Іншими словами, спочатку встановіть значення, а потім встановіть напрямок штифта. Мені також сказали, що саме так і повинно бути в сучасних процесорах, оскільки вони використовують два регістри, один для введення та один для виведення, проте старі процесори використовують лише один регістр, тому порядок операцій не має значення.
(Примітка: Modern = ARM Cortex M3 і вище, Old = Intel 8051)
Я попросив краще пояснення на роботі, але не зміг отримати гарної відповіді. Тому я вирішив попросити тут.
Тож ось мої запитання:
- Чому порядок ініціалізації має значення для нових процесорів?
- Чому порядок ініціалізації не має значення для старих процесорів?
- Про які два регістри вони говорять у сучасних процесорах?
- Про який єдиний реєстр вони говорять на старих процесорах?
Якби хтось міг надати якусь діаграму, це було б ще краще.