2015-05-27 2 views
2

Может ли кто-нибудь объяснить мне, что такое картография? Порт картографии? Карта памяти? В разработке прошивки.PORT Mapping, Memory Mapping

Я прошел через многие другие сайты, все еще вопрос не ясен.

Задано в интервью разработчику прошивки.

Фактический вопрос: «Как вы получаете доступ к хранению данных в регистре/памяти контроллера с помощью C?» (И он дал ключ вы знаете, отображенные на память ввода/вывода, порт сопоставляются I/O? Подобное.

Я понял вопрос, может быть, как это,

Если есть данные в SPI/I2C/АЦП такие буферы памяти микроконтроллера, как вы доступ к этим данным? вопрос, заданный графеновых Semiconductors.

спасибо

+0

Вы должны дать больше контекста о том, где вы столкнулись с этим термином. Отображение означает только поиск значения в какой-либо таблице или каталоге, чтобы получить другое значение. О каком микроконтроллере вы говорите, и что вы пытаетесь сделать с ним? –

+0

Jus Я ученик в этой теме, некоторые из которых интервью, которое я задал по этому вопросу. Я спрашиваю в общих чертах. Вы можете рассмотреть контроллер Atmega128 –

+0

. Каков был вопрос, который вы задавали? –

ответ

0

Для сопоставленного порта IO вам нужен дополнительный драйвер для интерфейса. Это полностью определит, как обращаться с внешним устройством. Это может быть так же просто, как GPIO, просто управляя внешним регистром с помощью строба или SPI. Все это в основном определяется программным обеспечением или задается интерфейсом. Однако он не имеет отношения к адресу ЦП и шине данных.

Отображаемая память IO такая же, как если бы регистр был переменной в обычном адресном пространстве. Однако вам необходимо убедиться, что компилятор не оптимизирует доступ к ним и не упорядочивает их (либо с той же переменной, либо с другими такими регистрами). По мере того как адрес для такого регистра фиксируется аппаратными средствами, можно либо установить, что с помощью линкера (-script) или следующим образом (в течение 16 бит чтения/записи по адресу 0x1234):

#define REGX (*(volatile uint16_t *)0x1234) 
+0

Я получил лучший ответ на этот вопрос здесь, Лундин. http://stackoverflow.com/questions/5029938/c-pointers-and-the-physical-address –

+0

https://embeddedmicro.com/tutorials/mojo/memory-mapping-tutorial/ –

+1

@LokeshVGowda: И поэтому вы ниспровергаете ? Я действительно ответил на вопрос (почему еще вы согласились) – Olaf

3

памяти отображается I/O позволяет записи/чтения к устройствам ввода/вывода такой же, как чтение/запись в обычную память (с использованием того же машинного кода/asm). Вы используете физическую память addr ess для ваших устройств ввода/вывода с отображением памяти.

Обычно существует логика декодирования адреса между ЦП и ОЗУ, поэтому, когда вы попадаете в ячейку памяти, принадлежащую устройству ввода-вывода, логика декодирования адреса запускается и соединяет линии адреса ЦП с этим устройством ввода/вывода (вместо этого ОЗУ).

Это простой способ доступа к I/O, но он потребляет пространство памяти.

Отображение портов I/O позволяет записывать/считывать устройства ввода-вывода, используя специальные инструкции asm (in и out в сборке x86). Вы не занимаете адресное пространство памяти.

+0

благодарим вас за ответ, можете ли вы рассказать мне, как мы можем добиться этого на микроконтроллере используя C-программу? –

+0

Извините, достигните чего? –

+0

Это последнее будет специальным пространством ввода-вывода (несколько расширением Harvard-Architecture для другого специального адресного пространства), а не отображенным в порт IO. Отображаемый порт IO похож на использование GPIO например, для доступа к ЦАП, имитации шины (с программным адресным пространством) или через SPI/i2C или QSPI-Flash, который не интегрируется в обычные адресные пространства и требует промежуточного драйвера для интерфейса. – Olaf

1

Порт отображение и отображение памяти совершенно разные. Отображение портов - это назначение порта для использования. Например, какой порт вы хотите использовать для последовательной связи, UART1 или UART2 или USB?

Память с отображением IO разделяет то же адресное пространство памяти для ввода-вывода (одно и то же пространство, но уникальный адрес). Но, изолированная память IO выделила пространство для памяти & IO.

* gpio_for_led = 1; // mem mapped io

gpio_for_led = 0x1234; // изолированный io (код сборки имеет in, out инструкцию)

outportb (gpio_for_led, 1);

Это делает вас понятным?