ВходНаше всё Теги codebook 无线电组件 Поиск Опросы Закон Пятница
19 июля
660594 Топик полностью
il-2 (16.03.2016 16:17, просмотров: 101) ответил SciFi на Вот такой теоретицкий вопрос. Есть UART и программный FIFO на передачу (через прерывания). Нужно ли массив, в котором сидит этот FIFO, объявлять как volatile?
Мое ИМХО - никакие глобальные переменные не следует объявлять через volatile. В местах, где нужна эта волатильность следует объявить через volatile локальную переменную и работать через нее. Как правило это - ожидание (поллинг) какого-либо флага, который взводится в обработчике прерывания. Чтобы в пустом цикле каждый раз опрашивать переменную, которая может измениться в прерывании ее объявляют через volatile. Это неверно (точнее - неоптимально), ибо во всех других местах работа с этой переменной будет вестись без оптимизации. Правильнее - объявить глобальную переменную как обычно, а поллинг выполнять примерно так: static bool poll_flag = false; main() { ... while(1) { volatile bool flag = poll_flag; if ( flag ) break; } }