2014-02-10 3 views

ответ

3

Это различие a, после первого литья его типа «указатель на изменчивый UINT32».

Есть путь больше, чем круглые скобки необходимы, то лучше было бы записать так:

*(volatile UINT32 *) a 

Это делает то же самое. Вы ожидали бы, что там будет некоторый код здесь, конечно же, либо пишут:

*(volatile UINT32 *) a = 4711; 

что пишет 4711 по адресу, указанному в a, убедившись, что (из-за volatile), что запись не оптимизирована даже если это может показаться бессмысленным с точки зрения компилятора.

Или чтения:

const UINT32 packetCounter = *(volatile UINT32 *) a; 

который считывает текущее значение по адресу в a, и сохраняет его в локальной постоянной переменной называется packetCounter. Так будет выглядеть, если a является адресом некоторого регистра ввода-вывода. Опять же, из-за volatile, чтение должно произойти, оно не может быть оптимизировано или кэшировано, хотя это может показаться бессмысленным для компилятора. Это характерно для регистров ввода-вывода.

+1

Не должен ли быть «изменчивым указателем на' UINT32' »? –

+1

@ PhilippMatthiasSchäfer Нет, это будет 'UINT32 * volatile', что очень редко. См. [Эту страницу] (например, http://www.barrgroup.com/Embedded-Systems/How-To/C-Volatile-Keyword). – unwind

+0

@unwind .. Спасибо за хороший ответ !! – Fagun

Смежные вопросы