Возможно, ваш отладчик на самом деле не так хорош. Когда один из моих инструментов не работает, я всегда проверяю его на другой инструмент.
Попробуйте отладить старинке, с:
volatile uint32_t value = *((volatile uint32_t *) 0xA0000000);
printf ("A:%d\n", value);
value *= 2;
printf ("B:%d\n", value);
value |= 0x0000001;
printf ("C:%d\n", value);
или какой-либо другой метод вывода, если printf
недоступен (это выглядит, как вы можете работать во встроенном пространстве).
Посмотрите, что вы получите с этим - я был бы более склонен доверять printf
-debugging, чем отладчики.
Если ваша проблема не связана с value
, но вместо того, чтобы с памятью на месте 0xA0000000
, то он работает, как ожидалось.
Вы управляете локальной переменной, а не ячейкой памяти. Вам нужно записать значение обратно, что-то вроде:
*((volatile uint32_t *) 0xA0000000) = value;
Однако, учитывая ваше использование изменчиво, это вполне возможно, вы просто хотели переменную указателя к этому месту, так что изменения будут отражать немедленно ,
Если это так, то вам нужно будет что-то вдоль линий:
volatile uint32_t *pValue = (volatile uint32_t *) 0xA0000000;
*pValue *= 2;
*pValue |= 0x00000001;
В этом случае ячейка памяти будет изменена в каждой инструкции без, имеющих явно записать значение.
Возможно, ваш отладчик правильно справляется с летучами? –
Почему бы просто не использовать некоторую трассировку и проверить поведение реальной программы, не полагаясь на отладчик для проверки. –
Какой процессор вы используете? – DipSwitch