Все эти слова немного сбивают меня с толку, поскольку я новичок. Я понимаю, что в основном микроконтроллер - это процессор + память для хранения данных (ОЗУ) + память данных ИЛИ откуда выполняются инструкции (ПЗУ / флэш-память) + периферийные устройства.
если это действительно глупый вопрос или широкий, дайте мне знать. Я бы попробовал сузить.
Я думаю, что эти термины в основном используются с микропроцессорами, а не с микроконтроллерами.
Устройства ввода-вывода с отображением памяти отображаются как обычные ячейки памяти и могут быть прочитаны или записаны любыми инструкциями, которые могут читать или записывать обычную память данных. Ввод-вывод с отображением памяти может использоваться любым микропроцессором.
Некоторые микропроцессоры (Intel 8085 и родственные им) имеют отдельное адресное пространство для использования устройством ввода-вывода, не являющееся частью обычного пространства памяти, и ограниченное количество инструкций для чтения или записи в это адресное пространство. Устройства ввода-вывода, использующие это пространство, будут «сопоставлены вводом-выводом».
Кажется, об этом прямо никто не говорил, так что я скажу; в основном это означает, что два типа отображения имеют разные линии управления. Рассмотрим хорошо любимую (по крайней мере, мной, хех) архитектуру Z80 с раздельными вводом-выводом и памятью.
Оба типа отображения используют одну и ту же адресную (16 линий) и шину данных (8 линий). Чтобы сообщить внешней логике, адресуете ли вы память или ввод-вывод, у процессора есть два контакта; один называется MREQ, а другой — IORQ. Когда процессор переводит MREQ в низкий уровень, внешняя логика конфигурируется для распознавания того, что это адрес памяти на адресной шине, и подключает память к шине данных после декодирования адресной шины для чтения или записи данных (которые контролируются RD). (чтение) и WR (запись), один из которых будет иметь низкий уровень для операции чтения или записи.
Если процессор переводит IORQ в низкий уровень, ваша внешняя логика распознает это как запрос ввода-вывода и подключает какое-то внешнее устройство к шине данных после декодирования адресной шины. Память остается неподключенной. На практике большинство микросхем памяти выполняют декодирование адреса и подключение/отключение с помощью внутренней управляющей логики.
Если процессор одновременно устанавливает низкий уровень MREQ и IORQ, он неисправен. Выброси это. То, что он вытягивает вниз, зависит от отдельных инструкций в наборе инструкций, используемом программистом.
Так что все зависит от того, есть ли на процессоре линии управления, чтобы различать более одного режима для шин. Преимущество заключается в том, что вы можете использовать все адресное пространство для памяти и при этом иметь средства для подключения к внешним устройствам, которые могут свободно использовать множество адресов для простоты взаимодействия, поскольку потенциально доступно 64 КБ из них (с 16-битным автобус).
Любопытная странность Z80 заключается в том, что в его спецификации заявлено, что он использует только 8 бит адресной шины для ввода-вывода, управляемого регистром C, но на самом деле он кодирует все 16, используя пару BC (в инструкциях ввода и вывода). Что приятно.
Отображение обычно выполняется с помощью специального аппаратного обеспечения в кремнии, обычно под эгидой ЦП. Давайте очень быстро посмотрим на ваши четыре фразы:
Моя интуиция говорит, что ваше использование отображения памяти и отображения ввода-вывода связано с двойным пространством памяти системы на базе x86 - 64 КБ пространства ввода-вывода, которое по существу устарело, а затем гораздо большее пространство памяти, которое, я думаю, варьируется в эксабайты теперь с 64-битными машинами.
РЕДАКТИРОВАТЬ: я собираюсь добавить этот абзац в свой ответ, предполагая, что то, что вы просите, больше ориентировано на микроконтроллеры (PIC, AVR и т. д.). Я коснулся этого немного, чтобы ответить на ваш вопрос номер четыре. Отображение/адреса здесь в основном фиксируются разработчиками чипа, и обычно имеется блок управления декодером адреса/памятью (не в строгом смысле MMU), который отправляет данные в нужное место на внутренней шине. То есть, если вы записываете в регистр управления UART, это влияет на триггеры, которые физически отвечают за эти биты, если вы читаете с адреса SRAM, он возвращает данные непосредственно из него.
В любом случае, сопоставление - это одна и та же общая задача - взять конкретный адрес и придать ему особое значение / направить его куда-нибудь. Например, на платформе x86 адрес пространства ввода-вывода 0x3F8 указывает на регистр последовательного порта в системе. Когда вы записываете или читаете с этого адреса (outb()/inb()), вы физически изменяете состояние 8 битов (реализованных, вероятно, как SRAM или триггеры), которые содержат данные на этом последовательном порту.
Аналогично, для ввода-вывода с отображением памяти у вас может быть устройство PCI, которое запрашивает некоторый объем памяти. Я мог бы спроектировать устройство, в котором, если вы записываете байт по определенному адресу, это меняет состояние 8 светодиодов — 0x00, все выключены, 0xFF, все горят. Ваш MMU (блок управления памятью) отвечает за распознавание того, что адрес памяти, который вы также написали, предназначен для чего-то на шине PCI.
Я не собираюсь здесь углубляться в виртуальную память — в современных ОС, как правило, только код ядра/привилегированный код имеет возможность прямого чтения/записи из адресов физической памяти. Существуют встроенные уровни инфраструктуры/абстракции для управления этим доступом для пользовательских приложений. Например, вы можете прочитать таблицы страниц.
Итак, вернемся к вашим вопросам...
1) Как я должен визуализировать отображение?
Просто это -- сопоставление. Это карта, которая сообщает вам, как добраться от вашего начала (адрес, скажем, 0xE0000000) до места назначения (возможно, устройство PCI, возможно, определенное место в физической ОЗУ).
2) Отображение делается на ОЗУ?
Нет. Физическая RAM — скажем, на самом низком уровне отдельный конденсатор, представляющий один бит в DRAM, — это одно из многих назначений, которые также могут быть сопоставлены. Каждый отдельный адрес памяти не обязательно соответствует физическому биту, хранящемуся где-то.
Если у вас есть процессор с внешней шиной адреса/данных (или какой-либо другой большой параллельной шиной), то операции чтения/записи будут напрямую транслироваться в трафик на этом интерфейсе — большинство людей в наши дни будут использовать SPI/I2C/другие последовательные протоколы. , но нередко имелись большие встроенные системы, в которых параллельные SRAM подключались через 8- или 16-битный параллельный интерфейс (AD0-AD15).
3) Если да, то разве это не сама память? Как об этом узнает процессор?
В системах x86 большая часть низкоуровневого управления картой системной памяти, которая существует более 20 лет, выполняется микропрограммой BIOS, а затем инициализацией ОС.
4) Это сопоставление выполняется, когда я включаю контроллер, или это делается лицом/компанией, изготовившей контроллер?
В кремнии есть фиксированные отображения (очень верно для встроенных микроконтроллеров), где вы можете просмотреть таблицу данных и получить фиксированные адреса для управляющих регистров, периферийных устройств и т. д. Архитекторы чипа разработали карту памяти, которая имела для них смысл, и обычно оставляет положения для разных моделей с разными периферийными устройствами/объемами памяти (т. е. у моделей 32 КБ и 64 КБ одного и того же чипа все их регистры/периферийные устройства могут находиться в одних и тех же местах, и отличается только адрес памяти для ОЗУ).
Для более сложных систем, где все может перемещаться (например, PCI plug and play), распределение адресов памяти является динамическим и выполняется программным обеспечением.
Это интересное упражнение. Предлагаю свой вариант.
1) Как я должен визуализировать отображение? - так же, как карта улицы, с единицами хранения (память хранит данные!), где каждая единица имеет уникальный почтовый адрес. Память может быть организована в виде «страниц». Это похоже на ту же карту улиц с тем же диапазоном адресов, только в другом городе с другим почтовым индексом (селектор страниц).
2) Отображение делается на ОЗУ? - не уверен, что вы имеете в виду «в ОЗУ», но отображение выполняется с помощью специального логического устройства, называемого «декодером адреса». Это как почтовое отделение. ЦП выдает номер (адрес хранилища), а декодер «открывает» соответствующий «блок хранения». Затем ЦП может сохранить некоторые данные или может извлечь сохраненные данные.
3) Если да, то разве это не сама память? - нет, см. (2) выше. Кто-то («декодер адреса») должен просмотреть номер (запрошенный адрес), просмотреть карту и открыть нужное место хранения («дверь») для операции чтения/записи.
3а) Как об этом узнает процессор? - Это не. Контроллер памяти просто выдает данные по «карте». Но программист должен знать, какая область отображена и какую «единицу памяти» использовать.
4) Это сопоставление выполняется, когда я включаю контроллер, или его выполняет человек/компания, изготовившая контроллер? - это зависит. Меньшие микроконтроллеры имеют карту, жестко закодированную в аппаратном обеспечении. Процессоры большего размера с устанавливаемой пользователем памятью (например, модули DIMM в ПК) должны определять особенности установленных модулей памяти и настраивать контроллер памяти (устанавливать диапазоны декодера адресов и другие параметры, такие как время доступа и т. д.) во время инициализации в BIOS.
Обратите внимание, что память обычно понимается как внутренняя единица хранения и обычно не подвергается воздействию внешнего (периферийного) мира. Периферийные устройства взаимодействуют с внутренними компонентами процессора через специальные регистры ввода-вывода или GPIO — регистры ввода-вывода общего назначения. В некоторых архитектурах процессоров эти GPIO отображаются в одну и ту же карту адресов в отдельное удаленное «подразделение». Некоторые архитектуры имеют выделенное пространство ввода-вывода и специальные инструкции ввода-вывода. Выбор разных GPIO следует той же идее — декодер адреса выбирает заранее определенные «двери».
Существуют и другие пространства, такие как «пространство конфигурации», которые могут иметь специальный режим ограниченного доступа. Его также можно отобразить в адресное пространство памяти.
Игнасио Васкес-Абрамс
Але..ченски
Анонимный
МАНЬЯКК
МАНЬЯКК
Питер Беннет
Але..ченски