К каким регистрам вы хотите обращаться?
Регистры общего назначения обычно недоступны из C. Вы можете объявить переменные регистра в функции, но это не указывает, какие конкретныерегистры используются.Кроме того, большинство компиляторов игнорируют ключевое слово register и автоматически оптимизируют использование регистра.
Во встроенных системах часто требуется доступ к периферийным регистрам (таким как таймеры, контроллеры DMA, ввод / вывод).штифты).Такие регистры обычно отображаются в память, поэтому к ним можно получить доступ из C ...
, указав указатель:
volatile unsigned int *control_register_ptr = (unsigned int*) 0x00000178;
или используя препроцессор:
#define control_register (*(unsigned int*) 0x00000178)
Или вы можете использовать процедуру сборки.
Для использования Язык сборки существует (как минимум) три возможности:
- Отдельно.Исходный файл asm, связанный с программой.Процедуры сборки вызываются из C как обычные функции.Это, вероятно, самый распространенный метод, и его преимущество заключается в том, что hw-зависимые функции отделены от кода приложения.
- Встроенная сборка
- Встроенные функции, которые выполняют отдельные инструкции на языке ассемблера.Это дает преимущество в том, что инструкция на ассемблере может напрямую обращаться к любым переменным Си.