Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Общие вопросы > Хитрый макросс


Автор: Solodov 23.3.2006, 18:59


// как понять эти макросы?
#define WRITE_REG32(A, B) *(volatile uint32 *)(A) = (B)
// 1) по аддресу переменной А записывается переменная В ? (Почему нельзя просто написать А=В)
#define READ_REG32(A) *(volatile uint32 *)(A)
// 2) Чтение переменной по адресу А?


Автор: maxim1000 23.3.2006, 19:43
Цитата(Solodov @ 23.3.2006, 17:59 Найти цитируемый пост)
Почему нельзя просто написать А=В

потому, что A - адрес, и нужно было бы писать *A=B
но т.к. вместо A, обычно, будут числовые константы, то их надо привести к типу указателя
вот это и делается в макросе...

Автор: Solodov 24.3.2006, 10:59
Грубо говоря по произвольному аддресу, который обозвали -"А" записываем число "В", правильно ли я понял?

Автор: maxim1000 24.3.2006, 11:04
ну да...

Автор: regis 24.3.2006, 11:06
Квалификатор volatile к указателю видимо добавлен для того, чтобы компилятор сделал чтение-запись атомарными. Впрочем, далеко не уверен, что это работает на практике.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)