Цитата(Arlleex @ Sep 28 2018, 14:15)
Кстати, попутно тут хочу узнать, как красиво организовать счётчик, который считает до, например, 5 и сбрасывается в 0 без условия if(). Ну то есть вычитая, сдвигая... Интересно можно ли так сделать. Для ровных битовых чисел, как в коде выше, как видно, я битовой маской обнуляю. А вот интересно, как быть с числами, не являющихся степенями 2.
Код
int i, i1;
i1 = i - 5 >> 31;
i = i - i1 & i1;
Будет 3 или 4 команды (в зависимости от оптимизации).
Цитата(Arlleex @ Sep 28 2018, 14:54)
Почему? Именно по сравнению: как только заданный период прошёл (счётчик таймера сравнялся с указанным значением сравнения), формируется прерывание, в котором регистр сравнения перенастраивается на следующий интервал, а лапка дергается в соответствующую сторону
А чтение значения ноги когда?
Если по этому прерыванию, то так делать - ненадёжно, так как будет зависимо от задержек входа в ISR. К тому же - требует в 2 раза большей частоты прерываний.
Цитата(Arlleex @ Sep 28 2018, 14:54)
А захват - это защёлкивание текущего значения таймера по какому-либо событи'юю, как я понимаю эту всю кухню.
Вот именно. А потом анализируем защёлкнутое значение и решаем что это было - 0 или 1.