Код маски прерываний перенесли со STM32 на AVR, и маска стала неверной
Функция отлично работала на STM32. После переноса на ATmega (avr-gcc) маска для битов старше 15-го всегда получается неверной:
uint32_t irq_mask(unsigned bit) {
return 1 << bit; /* bit = 0..31 */
}
Компилятор при константном bit = 20 пишет left shift count >= width of type. Что исправить?
- Писать 1UL << bit, чтобы сдвигать 32-битное
- Писать (uint32_t)(1 << bit) для приведения
- Заменить сдвиг умножением 1 * 2 ^ bit
- Объявить параметр bit как uint32_t
