Цитата(sigmaN @ Jul 11 2017, 13:02)

Error[Pe020]: identifier "__even_in_range" is undefined main.cpp 140
__even_in_range() встречал только в IAR for MSP430. Сдаётся мне, что макрос этот характерен только для данного ядра.
Насколько помню: там (в MSP430) значения некоторых регистров периферии, содержащие перечисления, сделаны с шагом ==2 (т.е. - значения enum-ов для них идут с шагом 2, а не 1 как в стандарте).
Сделано это чтобы такое значение можно было просуммировать с адресом начала таблицы переходов (по switch) и сразу выполнить ветвление без лишних команд.
even - потому что через 2, так как размер памяти - 16 бит.
В этом макросе первый аргумент - это регистр, содержащий перечисление в таком формате, второй аргумент определяет размер таблицы переходов.
В STM8 регистры периферии с перечислениями не выполнены в таком формате, соответственно и макрос этот там бесполезен.