uint8_t Gen_ECC(uint8_t data) { uint8_t G[] = {0, 0xB,0xD,0xE}; // матрица генерации uint8_t i = 0, j = 0, res = 0, inputw = 0; data = data & 0xF; for (i=1; i<4; i++) // Формируем r3-r1 { inputw = data & G[i]; // Выбрали необходимые информационные биты для формирования контрольного бита res=0; for (j=0; j<4; j++) res = res ^ ((inputw >> j) & 0x01); // Суммируем выбранные информационные биты по модулю 2, получаем один контрольный бит data |= res<<(i+4); // Дописываем контрольные биты к исходному слову } res=0; //Формируем бит чётности p for (j=0; j<8; j++) res = res ^ ((data >> j) & 0x01); // Суммируем все биты получившегося слова для нахождения бита чётности (S0) return data |= res<<4; }