LINUX.ORG.RU

История изменений

Исправление u5er, (текущая версия) :

Вообще как бы хороший вопрос, почему нельзя просто разыменовать указатель, да?

На мк это было примерно так. Допустим, в даташите указан адрес 0x00AAE0BB для порта ввода-вывода А, который представляет из себя 8 GPIO. Код будет примерно такой

volatile unsigned char* portA = 0x00AAE0BB;
*portA = 0x0F;

Тогда GPIO 0-3 выдадут высокий уровень, а GPIO 4-7 - низкий. Только там обычно даётся некий «опорный» адрес, а всё остальное - это смещения, которые нужно прибавить к.

Тут фишка в том, подо что ты кодишь. Если ты кодишь под голое железо, то ты сам себе хозяин и можешь читать/писать по любым адресам в памяти. Если ты кодишь под операционку, то ты будешь дёргать уже её функции. Такие как outb() и inb(), которые ты упомянул выше.

Исходная версия u5er, :

Вообще как бы хороший вопрос, почему нельзя просто разыменовать указатель, да?

На мк это было примерно так. Допустим, в даташите указан адрес 0x00AAE0BBFF для порта ввода-вывода А, который представляет из себя 8 GPIO. Код будет примерно такой

volatile unsigned char* portA = 0x00AAE0BBFF;
*portA = 0x0F;

Тогда GPIO 0-3 выдадут высокий уровень, а GPIO 4-7 - низкий. Только там обычно даётся некий «опорный» адрес, а всё остальное - это смещения, которые нужно прибавить к.

Тут фишка в том, подо что ты кодишь. Если ты кодишь под голое железо, то ты сам себе хозяин и можешь читать/писать по любым адресам в памяти. Если ты кодишь под операционку, то ты будешь дёргать уже её функции. Такие как outb() и inb(), которые ты упомянул выше.