2013-06-20 2 views
9

Указатели на C очень мощные и кажутся эффективными. Но как можно использовать указатель, вы можете получить доступ к оборудованию?Как указатели позволяют доступ к аппаратным средствам?

Мое представление об этом было бы установкой значения указателя, равного связанному с аппаратным обеспечением объекту, и манипулированию им с помощью указателя. Но если у вас уже есть достаточный доступ к объектам и свойствам аппаратного обеспечения, чтобы использовать указатель на нем, куда вводит указатель? Может быть, им что-то увидеть не так?

Я бегу на окнах 7.

Основной пример, наряду с объяснением того, почему указатель необходимо манипулировать, что аппаратное свойство было бы здорово.

+0

Yap. Это дает вам прямой доступ к необработанной памяти (с некоторыми ограничениями). –

+0

Зависит от оборудования и ОС. Что вы используете? – imreal

+2

Вы спрашиваете о [памяти, отображаемой I/O] (http://en.wikipedia.org/wiki/Memory-mapped_I/O)? –

ответ

7

Указатель содержит адрес памяти. И не весь диапазон адресации памяти указывает на области ОЗУ. Адреса памяти имеют диапазоны, а некоторые диапазоны относятся к аппаратным регистрам. И, записывая эти регистры, мы можем получить доступ к оборудованию. Конечно, это также зависит от того, какая операционная система и какое оборудование. Вот example.

+1

Огромное вам спасибо, что на самом деле для меня много смысла ... пример вместе с вашим объяснением. Мой вопрос исходил из заявления, в котором говорится, что Java не имеет прямого доступа к аппаратным средствам, поскольку он не может использоваться для программирования вредоносных программ. Например: Java не может keylog, потому что он не может читать нажатия клавиш за пределами предварительно сконфигурированной клиентской области. Он также не может прочитать аппаратное обеспечение клавиатуры. Я пытался спросить, как нужен указатель для доступа к этому оборудованию ...Я имею в виду, почему вы не можете просто использовать вход на основе программного обеспечения, чтобы получить, какие клавиши были нажаты, в отличие от записи аппаратного обеспечения? – moonbeamer2234

+0

Я не спрашиваю, как взломать или создать вредоносное ПО только для уточнения. – moonbeamer2234

+1

Скомпилированный байт-код Java запускается на виртуальной машине Java. Когда эти байт-коды выполняются виртуальной машиной (VM), он запускает код C/C++, из которого изготовлена ​​виртуальная машина (или ее библиотеки), и этот код C/C++ может использовать указатели для доступа к аппаратным средствам. Но обычно этот код работает с драйверами ОС, которые используют указатели для доступа к оборудованию. Таким образом, Java-программы не могут быть непосредственно вредоносными, если только базовая виртуальная машина, библиотека или драйверы не имеют дыр в безопасности, которые позволяют использовать код Java, и обращаться к аппаратным средствам так, как этого не должно. – ruben2020

2

Большинство аппаратных средств сопоставлено с памятью. Это означает, что он предоставляет ряд аппаратных регистров (или других аппаратных объектов) в качестве областей памяти. Доступ к этим ячейкам памяти можно получить, как и любая другая память. Вы можете читать и писать с помощью адресов памяти - и эти чтения и записи делают вещи в аппаратном обеспечении. Так же, как пример, запись в аппаратный регистр (адрес памяти) может привести к включению светодиода или к запуску поворота двигателя робота. Все аппаратные операции отображаются через такие регистры с отображением памяти и т. Д.

Теперь указатели - это языковые объекты, которые позволяют вам получить доступ к ячейке памяти. Вы вставляете адрес в указатель и разыгрываете его, чтобы читать (или писать) с (или до) этого адреса. Таким образом, в основном, как вы управляете оборудованием, вы получаете доступ к его адресному пространству с помощью указателей.

+0

Хорошо, что имеет большое значение, спасибо. Скажем, например, я писал этот особый регистр, который включал светодиод. Нужно ли мне знать, какие данные нужно записывать в этот регистр, и как я узнаю, какую информацию потребуется для выполнения определенных функций для оборудования? – moonbeamer2234

+0

Если вы используете конкретный микропроцессор или микроконтроллер, вы можете обратиться к техническому описанию или справочному руководству для этого процессора. Напр. для микроконтроллера Microchip PIC16F877 вы можете найти техническое описание [здесь] (http://www.microchip.com/wwwproducts/Devices.aspx?dDocName=en010241). В нем объясняется, как использовать регистры - что написать им, чтобы получить предполагаемый эффект. – ruben2020

+0

Оборудование поставляется с подробными спецификациями для интерфейса программирования. В нем подробно объясняются, какие регистры доступны, какие битовые шаблоны записывать в них, в какой последовательности вызывать поддерживаемые типы поведения. Обратите внимание, что большинство поставщиков аппаратного обеспечения предоставляют справочное программное обеспечение в виде библиотек или драйверов, которые могут использоваться либо напрямую, либо как ссылка для создания собственного программного обеспечения. – Ziffusion

7

В свободной постоянной среде (например, микроконтроллер), аппаратная платформа, которая не есть Memory Management Unit (некоторые ARM микропроцессоры), или операционная система, которая не поддерживает аппаратную защиту (например, DOS) указатели дают вам сырые доступ к оборудованию через магию memory mapped I/O. Указатели в программе, работающей на операционной системе , такой как Windows или Linux (или практически любая современная операционная система), являются указателями в a virtual address space. Эти указатели не позволят вам напрямую обращаться к оборудованию .

Способ работы с памятью ввода-вывода заключается в том, что определенные адреса физической памяти зарезервированы для связи с устройствами в системе. Когда доступ к адресу, который принадлежит устройству , данные направляются в соответствующий регистр устройства. На платформах x86 этот перевод выполняется северным мостом.