Почему коды совместимы между материнскими платами?

Я уже собирал печатные платы для встраиваемых систем с использованием микроконтроллеров, таких как stm32, stm32l, nRF51822, efm32g, большинство из которых использует arm cortex m3. И программировать каждый из них обычно по-разному, т. е. линия прерывания, используемая в одном микроконтроллере для gpio, не такая же, как и в другом, регистры для настройки одного не совпадают с другим, поэтому код, который я сделал для один несовместим с другим, потому что каждый микроконтроллер по-разному связывает свои периферийные устройства с процессором.

Я полагаю, что эквивалентом микроконтроллера в архитектуре ПК является материнская плата, верно? Но как код, созданный для материнской платы (например, с использованием x86), совместим с другими материнскими платами? Есть ли стандарт? Все ли линии прерывания (связанные аппаратно) одинаковы для всех материнских плат, предназначенных для работы под управлением Windows или Linux? И порты ввода-вывода одинаковые? Интерфейс для смены часов такой же?

Обычно, когда я иду программировать голый металл (без ОС) для микроконтроллера, я получаю его таблицы данных, чтобы узнать, как я могу взаимодействовать с периферийными устройствами, есть ли унифицированное справочное руководство для всех материнских плат?

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


person Lilás    schedule 02.11.2015    source источник


Ответы (1)


Я думаю, что короткий ответ - нет, материнские платы несовместимы с материнскими платами, созданными для других архитектур. Компилятор и ядро ​​ОС абстрагируются от архитектурных различий, но само ядро ​​ОС должно было быть закодировано для каждой архитектуры. В частности, часть ОС, специфичная для оборудования, называется «драйвером» для этого конкретного оборудования, и его нужно было закодировать для каждой архитектуры.

При написании кода для ОС все обращения к оборудованию проходят через ядро ​​ОС, которое знает, как осуществлять доступ к оборудованию для этой конкретной аппаратной архитектуры. Программы сами не делают никаких прерываний, а позволяют ядру выполнять фактическую работу.

Все, что должны знать программа и компилятор, — это как выполнить системный вызов в данной архитектуре и ОС и какой номер системного вызова идентифицирует API ОС.

person Lie Ryan    schedule 02.11.2015
comment
Даже если обе материнские платы имеют одинаковый процессор? Итак, когда я устанавливаю Ubuntu или Windows на свой компьютер, он проверяет производителя материнской платы, чтобы получить правильные драйверы? - person Lilás; 02.11.2015
comment
@Lilás - Да, вы даже можете получить информацию о процессоре из вашей соответствующей ОС. Итак, вам нужно иметь определенный образ ОС, например. для x86,x64, SPARC, ARM и т.д. - person Am_I_Helpful; 02.11.2015