Привет, я не разложился на плесень и липовый мед, я с вами). Утро началось не с кофе.
Во многих микроконтроллерах, в частности в cortex-m0+, нет аппаратного деления, а значит и исключения divide by zero тоже нет. Деление делает компилятор, и ситуация с делением на ноль является UB.
Если кто-то пишет свои программы исключительно с применением UB, то вот вам информация:
для u32 операций в IAR 7.70 X/0 = X
, а в arm-none-eabi-gcc 7.3.1 — X/0 = 0
.
…что я и словил при переносе проекта с иара в gcc: в файле с расчетом тактовой частоты ребята заменили битовые сдвиги на деление, а дефолтные значения забыли заменить с 0 на 1. В IAR все работало, а в gcc получалась нулевая частота и это совсем не нравилось модулю UART.