Обновление платы на 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 timeout) {
|
||||||
|
|
||||||
uint32_t time = SystemGetMs() + timeout;
|
uint32_t time = SystemGetMs() + timeout;
|
||||||
for (uint32_t i = 0; i < len; ++i) {
|
// Обрабатываем выровненные 4-байтовые блоки
|
||||||
crc = (crc >> 8) ^ crc_table[(crc ^ data[i]) & 0xFF];
|
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) {
|
if (SystemGetMs() > time) {
|
||||||
update_func(update_func_env);
|
update_func(update_func_env);
|
||||||
time = SystemGetMs() + timeout;
|
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) {
|
uint32_t UdsCrc32Finalize(uint32_t crc) {
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue