Контроллер посылает (нон-стоп) данные (uart 7e1) на 8-разрядный 7-сегментный дисплей с 4-мя статусными светодиодами.
Если логичкски сгруппировать данные, то каждая посылка начинается с 0x00
или 0x04
, далее следуют 8 байт на индикаторы, байт на светодиоды и контрольная сумма:
0x00 0x3F 0x3F 0x3F 0x3f 0x3F 0x3F 0x3F 0x3F 0x00 0x78
0x00 0x3F 0x3F 0x3F 0x3f 0x3F 0x3F 0x3F 0x3F 0x00 0x78
0x00 0x3F 0x3F 0x3F 0x3f 0x3F 0x3F 0x3F 0x3F 0x00 0x78
0x04 0x3F 0x3F 0x3F 0x3f 0x3F 0x3F 0x3F 0x3F 0x00 0x7C
0x00
0x00 0x3F 0x3F 0x3F 0x3f 0x3F 0x3F 0x3F 0x3F 0x00 0x78
0x04 0x3F 0x3F 0x3F 0x3f 0x3F 0x3F 0x3F 0x3F 0x00 0x7C
0x00
0x00 0x3F 0x3F 0x3F 0x3f 0x3F 0x3F 0x3F 0x3F 0x00 0x78
0x04 0x3F 0x3F 0x3F 0x3f 0x3F 0x3F 0x3F 0x3F 0x00 0x7C
0x00
0x00 0x3F 0x3F 0x3F 0x3f 0x3F 0x3F 0x3F 0x3F 0x00 0x21
0x04 0x3F 0x3F 0x3F 0x3f 0x3F 0x3F 0x3F 0x3F 0x21 0x1D
0x00
0x00 0x3F 0x3F 0x3F 0x3f 0x3F 0x3F 0x3F 0x3F 0x21 0x19
0x04 0x3F 0x3F 0x3F 0x3f 0x3F 0x3F 0x3F 0x3F 0x21 0x1D
0x00
0x00 0x3F 0x3F 0x3F 0x3f 0x3F 0x3F 0x3F 0x3F 0x21 0x19
0x00 0x3F 0x3F 0x3F 0x3f 0x3F 0x3F 0x3F 0x3F 0x21 0x19
0x00 0x3F 0x3F 0x3F 0x3f 0x3F 0x3F 0x3F 0x3F 0x00 0x78
Если строка начинается с 0x04
, то просто нужно прочитать 11 байт включительно.
Проблема для меня заключается в том, что данных начинающихся с 0x00
значительно больше и если их не читать, то обновления информации сильно запаздывают.
Как правильно распознать эту строку, начинающуюся с 0x00
, с учетом того, что каждый 7-сегментный индикатор или светодиоды могут не гореть, т.е. соотвествующий байт тоже может быть 0x00
?:
0x00 0x3F 0x00 0x00 0x3f 0x3F 0x3F 0x3F 0x3F 0x00 0x7A