Он изобрёл С++ :)))
Вот, пример формирования таблицы перекодировки. Выполняется на этапе комиляции
class ENCODE_DELAY { uint8_t value[256]{}; static constexpr auto Q(const uint8_t x) { return 1<<x; } static constexpr auto rx_decode(const uint8_t x) { return (x&Q(0)?Q(7):0) + (x&Q(1)?Q(3):0) + (x&Q(2)?Q(0):0); } static constexpr auto tx_decode(const uint8_t x) { return (x&Q(0)?Q(6):0) + (x&Q(1)?Q(2):0) + (x&Q(2)?Q(1):0); } public: constexpr ENCODE_DELAY() { for(auto n=0; n<256; n++) value[n] = tx_decode(n>>4) + rx_decode(n&0xF); } constexpr auto operator()(const uint8_t n) const { return value[n]; } constexpr auto& operator[](const uint8_t index) const { return value[index]; } }; constexpr ENCODE_DELAY encode_delay;
В результате во флэш ложится таблица
encode_delay: DC8 0, 128, 8, 136, 1, 129, 9, 137, 0, 128, 8, 136, 1, 129, 9, 137, 64 DC8 192, 72, 200, 65, 193, 73, 201, 64, 192, 72, 200, 65, 193, 73, 201 DC8 4, 132, 12, 140, 5, 133, 13, 141, 4, 132, 12, 140, 5, 133, 13, 141 DC8 68, 196, 76, 204, 69, 197, 77, 205, 68, 196, 76, 204, 69, 197, 77 DC8 205, 2, 130, 10, 138, 3, 131, 11, 139, 2, 130, 10, 138, 3, 131, 11 DC8 139, 66, 194, 74, 202, 67, 195, 75, 203, 66, 194, 74, 202, 67, 195 DC8 75, 203, 6, 134, 14, 142, 7, 135, 15, 143, 6, 134, 14, 142, 7, 135 DC8 15, 143, 70, 198, 78, 206, 71, 199, 79, 207, 70, 198, 78, 206, 71 DC8 199, 79, 207, 0, 128, 8, 136, 1, 129, 9, 137, 0, 128, 8, 136, 1 DC8 129, 9, 137, 64, 192, 72, 200, 65, 193, 73, 201, 64, 192, 72, 200 DC8 65, 193, 73, 201, 4, 132, 12, 140, 5, 133, 13, 141, 4, 132, 12, 140 DC8 5, 133, 13, 141, 68, 196, 76, 204, 69, 197, 77, 205, 68, 196, 76 DC8 204, 69, 197, 77, 205, 2, 130, 10, 138, 3, 131, 11, 139, 2, 130, 10 DC8 138, 3, 131, 11, 139, 66, 194, 74, 202, 67, 195, 75, 203, 66, 194 DC8 74, 202, 67, 195, 75, 203, 6, 134, 14, 142, 7, 135, 15, 143, 6, 134 DC8 14, 142, 7, 135, 15, 143, 70, 198, 78, 206, 71, 199, 79, 207, 70 DC8 198, 78, 206, 71, 199, 79, 207
Которой можно пользоваться как обычным массивом encode_delay[].