| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > 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 |
| потому, что A - адрес, и нужно было бы писать *A=B но т.к. вместо A, обычно, будут числовые константы, то их надо привести к типу указателя вот это и делается в макросе... |
| Автор: Solodov 24.3.2006, 10:59 |
| Грубо говоря по произвольному аддресу, который обозвали -"А" записываем число "В", правильно ли я понял? |
| Автор: maxim1000 24.3.2006, 11:04 |
| ну да... |
| Автор: regis 24.3.2006, 11:06 |
| Квалификатор volatile к указателю видимо добавлен для того, чтобы компилятор сделал чтение-запись атомарными. Впрочем, далеко не уверен, что это работает на практике. |