Что такое смыслЗначение * ((летучего uint32 *) (а)) в C
*((volatile UINT32*)(a)) ?
в C langauage?
Дайте мне пример.
Что такое смыслЗначение * ((летучего uint32 *) (а)) в C
*((volatile UINT32*)(a)) ?
в C langauage?
Дайте мне пример.
Это различие a
, после первого литья его типа «указатель на изменчивый UINT32
».
Есть путь больше, чем круглые скобки необходимы, то лучше было бы записать так:
*(volatile UINT32 *) a
Это делает то же самое. Вы ожидали бы, что там будет некоторый код здесь, конечно же, либо пишут:
*(volatile UINT32 *) a = 4711;
что пишет 4711
по адресу, указанному в a
, убедившись, что (из-за volatile
), что запись не оптимизирована даже если это может показаться бессмысленным с точки зрения компилятора.
Или чтения:
const UINT32 packetCounter = *(volatile UINT32 *) a;
который считывает текущее значение по адресу в a
, и сохраняет его в локальной постоянной переменной называется packetCounter
. Так будет выглядеть, если a
является адресом некоторого регистра ввода-вывода. Опять же, из-за volatile
, чтение должно произойти, оно не может быть оптимизировано или кэшировано, хотя это может показаться бессмысленным для компилятора. Это характерно для регистров ввода-вывода.
Не должен ли быть «изменчивым указателем на' UINT32' »? –
@ PhilippMatthiasSchäfer Нет, это будет 'UINT32 * volatile', что очень редко. См. [Эту страницу] (например, http://www.barrgroup.com/Embedded-Systems/How-To/C-Volatile-Keyword). – unwind
@unwind .. Спасибо за хороший ответ !! – Fagun