aoreh (23.08.2013 12:33 - 12:41, просмотров: 102) ответил Nikolay801_ на что правильно я догадываюсь, меня интересует какой из 2-х правильных вариантов, наиболее правильный.
первый вариант говорит о том, что данные по вот тому адресу могут меняться где-то второй вариант говорит, что сама переменная, которая имееи тип указатель на юинт8_т и содержит в себе адрес) может изменяться где-то
вообще изначально вопрос стоит немного неправильный.
т.к. реально имеется в виду, что переменная X, которая находится по адресу (0x08004000-2) может меняться, н-р, железом, тогда нужно правильно выполнить приведение адреса к указателю, т.е. для простоты:
(hwdevice_t *)(0x08004000-2);
в то время как hwdevice_t есть ни что иное как volatile uint8_t, а часто и с атрибутами риад-онли (конст), н-р.
т.е. полное приведение, в вашем примере выглядит так:
(volatile uint8_t *)(0x08004000-2);
соответственно и левая часть должна быть
volatile uint8_t *ptr = (volatile uint8_t *)(0x08004000-2);
иначе (uint8_t * volatile ptr = (volatile uint8_t *)(0x08004000-2); ) будет просто ошибка компиллятора