Он изобрёл С++ :)))
Вот, пример формирования таблицы перекодировки. Выполняется на этапе комиляции
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[].