Допустим, у нас 8-ми битный МК типа AVR, какой-нибудь датчик угла/скорости/влажности/жадности, который отдаёт своё значение через два регистра — в одном low-byte, в другом high-byte, при этом у датчика есть регистр ready, который устанавливается в HIGH, когда данные готовы для чтения. Теперь мы хотим усреднить показания датчика за секунду и что-то сделать с этим значением. Как я понял, это довольно типичная задача. Для этого мы вешаем прерывание на ready, и из прерывания обновляем значение показания датчика, а в основном потоке только используем это значение. Как правильно выстроить логику? Если бы значения укладывались в 1 байт, то было бы всё просто. Но с двумя байтами может быть так, что функция чтения видит старое значение в low-байте, происходит прерывание, и в high-байте уже новое значение.