Много ответов программиста ПК, как всегда.Вот ответ с общей точки зрения программирования.
Вам будет весьма интересно фактическое числовое значение адреса при выполнении любой формы аппаратного программирования.Например, вы можете получить доступ к аппаратным регистрам на компьютере следующим образом:
#define MY_REGISTER (*(volatile unsigned char*)0x1234)
Этот код предполагает, что вы знаете, что существует определенный аппаратный регистр, расположенный по адресу 0x1234.Все адреса в компьютере по традиции / для удобства выражены в шестнадцатеричном формате.
В этом примере длина адреса составляет 16 бит, что означает, что шина адреса на используемом компьютере имеет ширину 16 бит.Каждая ячейка памяти в вашем компьютере имеет адрес.Таким образом, на 16-битной адресной шине вы можете иметь максимум 2 ^ 16 = 65536 адресуемых ячеек памяти.Например, на ПК адрес обычно имеет длину 32 бита, что дает вам 4,29 миллиарда адресуемых ячеек памяти, то есть 4,29 гигабайта.
Чтобы подробно объяснить этот макрос:
- 0x1234это адрес регистра / ячейки памяти.
- Нам нужно получить доступ к этой ячейке памяти через указатель, поэтому мы ввели целочисленную константу 0x1234 в беззнаковый указатель на символ = указатель на байт.
- Предполагается, что интересующий нас регистр имеет размер 1 байт.Если бы он был размером в два байта, мы могли бы вместо этого использовать unsigned short.
- Аппаратные регистры могут обновляться в любое время (их содержимое является «изменчивым»), поэтому программе нельзя разрешать делать какие-либопредположения / оптимизация того, что хранится в них.Программа должна считывать значение из регистра каждый раз, когда регистр используется в коде.Чтобы применить это поведение, мы используем ключевое слово volatile.
- Наконец, мы хотим получить доступ к регистру так же, как если бы это была простая переменная.Поэтому добавляется *, чтобы взять содержимое указателя.
Теперь программа может получить доступ к определенной ячейке памяти:
MY_REGISTER = 1;
unsigned char var = MY_REGISTER;
Например, такой код используется везде во встроенных приложениях.
(Но, как уже упоминалось в других ответах, вы не можете делать подобные вещи на современных ПК, поскольку они используют так называемую виртуальную адресацию, что дает вам пощечину, если вы попытаетесь это сделать.)