Правила для того, что запросы данных видят в материализованном представлении, идентичны правилам, которые применяются к тому, что запросы данных видят в таблице, которая подвергается изменениям. Эти правила обобщены в документации под согласованность многоверсионного чтения .
Я предполагаю, что вы делаете атомное обновление материализованного представления. Вы могли бы сделать неатомарное обновление, которое бы урезало материализованное представление перед обновлением, но это почти наверняка не то, что вы хотели бы в этом случае.
See this answer I gave to a very similar question regarding details of a simple protocol.
To respond to your specific points:
Для чего-то подобного к тому времени, когда вы получите существующее решение для работы на вашем устройстве, было бы проще просто заново изобрести колесо.
void buffer_packet(unsigned char rx_byte)
{
static unsigned char byte_count = 0;
static unsigned char packet[8];
packet[byte_count++] = rx_byte;
if (byte_count == 8)
{
unsigned char crc = calculate_crc(packet, 8);
write_uart(0x55);
write_uart(8);
while (byte_count--)
{
write_uart(packet[7 - byte_count]);
}
write_uart(crc);
}
}
Или, возможно, я недооцениваю вашу проблему. Если вы ищете, как генерировать биты RS232, обратитесь к таблице данных вашего микроконтроллера.
Единственное, что там, кроме ваших примитивов ввода / вывода, это вычисление CRC. Здесь есть отличная статья с кодом .