ВходНаше всё Теги codebook 无线电组件 Поиск Опросы Закон Вторник
21 января
1486619 Топик полностью
Nikolay_Po (25.12.2024 23:34, просмотров: 138) ответил mse homjak на Прикольненько... Тема про АВР(вернее, ВинАВР-10), но там, походу, норота меньше. Тема-то про "С".
Странный вопрос. То, что меняется вне контекста, вне страницы исходного кода, обязано быть выкинуто компилятором, так как, варианты: а) не меняется в пределах обозримого контекста; б) не приводит к побочным эффектам. 

Другими словами, компилятор приготовит такой код, в результате выполнения которого будут обновлены только те переменные, которые помечены как "volatile". В частности, это регистры периферии. Они помечены как volatile. Так же, этот код проигнорирует изменения переменных вне контекста, не помеченных как volatile. Регистры перифиерии - volatile в определениях от производителя контроллера.

В общем, вас разбаловали готовые заголовочные файлы, поэтому вы не обратили внимание, что всё, куда идёт реальный вывод, да хоть отладочный printf() - оно, в конце цепочки - volatile. И всё, что читается - нажатия кнопок, код АЦП, байт данных из интерфейса - тоже volatile. Ну и помним про контекст. Если вы прочитали volatile-значение в одном контексте, оно не обязательно будет обновлено в другом, если промежуточная переменная так же не объявлена volatile.