int
может быть равна длине типа char
, но всё равно это тоже некорректно, т.к. размеры типов не зависят от разрядности архитектуры, надо было указывать разрядность типа int
), роль играет порядок байт.c
помещается наименьший значащий байт числа, т.е. это эквивалентно x % 256
.c
помещается наибольший значащий байт числа, т.е. это эквивалентно x >> 24
(для 32-битной архитектуры).1
вернёт 1
, для big-endian - 0
.bool
) для нормализации значения (!!x
эквивалентно x > 0 ? 1 : 0
).!
возвращает bool
, а результат двойного применения отрицания это, по сути, преобразование типа исходного значения к bool
(!!x
эквивалентно (bool)x
).true
/1
, если архитектура little-endian, а иначе - false
/0
.IsLittleEndian()
. void setup()
{
//------ Timer0 ----------
TCCR0A = (1<<WGM01); // Режим CTC (сброс по совпадению)
TCCR0B = (1<<CS00); // Тактирование от CLK.
// Если нужен предделитель :
// TCCR0B = (1<<CS01); // CLK/8
// TCCR0B = (1<<CS00)|(1<<CS01); // CLK/64
// TCCR0B = (1<<CS02); // CLK/256
// TCCR0B = (1<<CS00)|(1<<CS02); // CLK/1024
OCR0A = 123; // Верхняя граница счета. Диапазон от 0 до 255.
// Частота прерываний будет = Fclk/(N*(1+OCR0A))
// где N - коэф. предделителя (1, 8, 64, 256 или 1024)
TIMSK0 = (1<<OCIE0A); // Разрешить прерывание по совпадению
//------ Timer1 ----------
TCCR1B = (1<<WGM12); // Режим CTC (сброс по совпадению)
TCCR1B |= (1<<CS10); // Тактирование от CLK.
// Если нужен предделитель :
// TCCR1B |= (1<<CS11); // CLK/8
// TCCR1B |= (1<<CS10)|(1<<CS11); // CLK/64
// TCCR1B |= (1<<CS12); // CLK/256
// TCCR1B |= (1<<CS10)|(1<<CS12); // CLK/1024
OCR1A = 2678; // Верхняя граница счета. Диапазон от 0 до 65535.
// Частота прерываний будет = Fclk/(N*(1+OCR1A))
// где N - коэф. предделителя (1, 8, 64, 256 или 1024)
TIMSK1 = (1<<OCIE1A); // Разрешить прерывание по совпадению
//------ Timer2 ----------
TCCR2A = (1<<WGM21); // Режим CTC (сброс по совпадению)
TCCR2B = (1<<CS20); // Тактирование от CLK.
// Если нужен предделитель :
// TCCR2B = (1<<CS21); // CLK/8
// TCCR2B = (1<<CS20)|(1<<CS21); // CLK/32
// TCCR2B = (1<<CS22); // CLK/64
// TCCR2B = (1<<CS20)|(1<<CS22); // CLK/128
// TCCR2B = (1<<CS21)|(1<<CS22); // CLK/256
// TCCR2B = (1<<CS20)|(1<<CS21)|(1<<CS22); // CLK/1024
OCR2A = 234; // Верхняя граница счета. Диапазон от 0 до 255.
// Частота прерываний будет = Fclk/(N*(1+OCR2A))
// где N - коэф. предделителя (1, 8, 32, 64, 128, 256 или 1024)
TIMSK2 = (1<<OCIE2A); // Разрешить прерывание по совпадению
sei (); // Глобально разрешить прерывания
}
ISR (TIMER0_COMPA_vect)
{
// Обработчик прерывания таймера 0
}
ISR (TIMER1_COMPA_vect)
{
// Обработчик прерывания таймера 1
}
ISR (TIMER2_COMPA_vect)
{
// Обработчик прерывания таймера 2
}
Секреты её подсчёта хабраредакции открыли пришельцы из созвездия Андромеды (до их прилёта даже хабраредакция не знала, как она рассчитывается). Время от времени пришельцы возвращаются и меняют принципы подсчёта, что может влиять на величину рейтинга отдельно взятых пользователей.Вот так.