Вот только НИКАКОЙ код не может гарантировать обработку всех сигналов, если последние поступают чаще, чем МК способен их обрабатывать.
Если поступают часто и много). При двойном прерывании и в случае возникновения второго прерывания в критический момент, это прерывание не будет потеряно при cli()/sei(). Только применительно к кнопке вся эта возня и нафиг не нужна.)
Да?
И сколько прерываний контроллер способен запомнить? Не будет ли потеряяны 3-4 4-е и 5-е, пока обрабатывается первое? Да и какая разница, пусть хоть 100500, если прерывания поступают чаще, чем контроллер способен их обрабатывать, это все равно проблему не решит.
И, кстати, почему Вы решили, что приведенная прека приведет к потере прерывания в "нормальном" случае? (под "ненормальным" подразумеваем случай, когда контролллер банально не успеват) Факт прерывания будет обнаружен на следующем проходе.
И сколько прерываний контроллер способен запомнить? Не будет ли потеряяны 3-4 4-е и 5-е, пока обрабатывается первое? Да и какая разница, пусть хоть 100500, если прерывания поступают чаще, чем контроллер способен их обрабатывать, это все равно проблему не решит.
Естетственно будет потеряно. Речь только о 2-м.
andriano пишет:
И, кстати, почему Вы решили, что приведенная прека приведет к потере прерывания в "нормальном" случае? (под "ненормальным" подразумеваем случай, когда контролллер банально не успеват) Факт прерывания будет обнаружен на следующем проходе.
Потому что
static bool isPressed(void) {
if(result = buttonState) //забираем результат прерывания
// если в этот момент возникнет следующее прерывание, то его результат будет обнулен ниже
buttonState = false;
return result;
}
В случае же запрета прерывания мы получаем его буферизацию на 1 уровень - флаг прерывавания взведётся, но его обработка начнётся только после разрешения прерывания.
Вот только НИКАКОЙ код не может гарантировать обработку всех сигналов, если последние поступают чаще, чем МК способен их обрабатывать.
Если поступают часто и много). При двойном прерывании и в случае возникновения второго прерывания в критический момент, это прерывание не будет потеряно при cli()/sei(). Только применительно к кнопке вся эта возня и нафиг не нужна.)
И сколько прерываний контроллер способен запомнить? Не будет ли потеряяны 3-4 4-е и 5-е, пока обрабатывается первое? Да и какая разница, пусть хоть 100500, если прерывания поступают чаще, чем контроллер способен их обрабатывать, это все равно проблему не решит.
И, кстати, почему Вы решили, что приведенная прека приведет к потере прерывания в "нормальном" случае? (под "ненормальным" подразумеваем случай, когда контролллер банально не успеват) Факт прерывания будет обнаружен на следующем проходе.
И сколько прерываний контроллер способен запомнить? Не будет ли потеряяны 3-4 4-е и 5-е, пока обрабатывается первое? Да и какая разница, пусть хоть 100500, если прерывания поступают чаще, чем контроллер способен их обрабатывать, это все равно проблему не решит.
Естетственно будет потеряно. Речь только о 2-м.
И, кстати, почему Вы решили, что приведенная прека приведет к потере прерывания в "нормальном" случае? (под "ненормальным" подразумеваем случай, когда контролллер банально не успеват) Факт прерывания будет обнаружен на следующем проходе.
Потому что
В случае же запрета прерывания мы получаем его буферизацию на 1 уровень - флаг прерывавания взведётся, но его обработка начнётся только после разрешения прерывания.