Обновление платы на V2

This commit is contained in:
cfif 2026-05-28 13:06:54 +03:00
parent 916318f6ef
commit d6a399adf4
1 changed files with 19 additions and 3 deletions

View File

@ -57,15 +57,31 @@ UdsCrc32Update(uint32_t crc, const uint8_t *data, uint32_t len, crc32_update_fun
uint32_t timeout) {
uint32_t time = SystemGetMs() + timeout;
for (uint32_t i = 0; i < len; ++i) {
crc = (crc >> 8) ^ crc_table[(crc ^ data[i]) & 0xFF];
// Обрабатываем выровненные 4-байтовые блоки
while (len >= 4) {
uint32_t word = *(const uint32_t*)data;
// Оптимизированная обработка 4 байт за раз
crc = (crc >> 8) ^ crc_table[(crc ^ (word >> 0)) & 0xFF];
crc = (crc >> 8) ^ crc_table[(crc ^ (word >> 8)) & 0xFF];
crc = (crc >> 8) ^ crc_table[(crc ^ (word >> 16)) & 0xFF];
crc = (crc >> 8) ^ crc_table[(crc ^ (word >> 24)) & 0xFF];
if (SystemGetMs() > time) {
update_func(update_func_env);
time = SystemGetMs() + timeout;
}
data += 4;
len -= 4;
}
return crc; // Без финальной инверсии
// Обрабатываем оставшиеся байты (0-3 байта)
while (len--) {
crc = (crc >> 8) ^ crc_table[(crc ^ *data++) & 0xFF];
}
return crc;
}
uint32_t UdsCrc32Finalize(uint32_t crc) {