Обновление платы на V2
This commit is contained in:
parent
916318f6ef
commit
d6a399adf4
22
crc32_uds.c
22
crc32_uds.c
|
|
@ -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) {
|
||||
|
|
|
|||
Loading…
Reference in New Issue