Как можно получить доступ к регистрам ЦП, используя адреса памяти?
Следующее взято из таблицы данных ATmega328-328P.
Согласно этому, я могу получить доступ ко всем 32 регистрам процессора, используя адреса памяти. Например:
unsigned char *register = 0x0;
получит доступ к первому регистру. Это правда? если да, то возможно ли это сделать и на обычных процессорах (например, на моем ноутбуке), поскольку я думал, что для доступа к памяти можно использовать только указатель, а не к регистрам процессора.
Сопоставлен ли регистр в SRAM в этом случае?
@xnight, 👍1
Обсуждение1 ответ
Микроконтроллеры, как правило, просты по сравнению с процессорами, которые вы можете найти в своем ноутбуке. Большинство операционных систем используют функции более высокого уровня безопасности, которые могут предотвратить попадание пользовательских программ туда, где они не должны быть.
Что касается отображения регистров в памяти, это действительно зависит от конкретной архитектуры и каждого процессора. Они не все одинаковы.
Сопоставлен ли регистр в SRAM в этом случае?
Адресное пространство данных отображает 32 регистра общего назначения, все регистры ввода-вывода (включая те, которые также доступны через адресное пространство ввода-вывода) и ОЗУ
- Является ли использование malloc() и free() действительно плохой идеей для Arduino?
- устаревшее преобразование из строковой константы в 'char*'
- Как запрограммировать ардуино на чистом C/C++?
- Количество элементов в массиве char
- Регистры ввода-вывода SAM3X8E (Arduino Due)
- как быстро loop() работает в Arduino
- Arduino: как получить тип платы в коде
- Как вызвать функции C из скетча ардуино?
Я разобрался, они сопоставлены. Объяснено здесь: https://stackoverflow.com/questions/3022046/is-it-possible-to-access-32-bit-registers-in-c, @xnight