Применение управляющих символов ASCII-кода в организации передачи данных
Коллеги, добрый день!
Столкнулся с некой проблемой философского характера. Понадобилось мне организовать общение с некоторым устройством по UART / RS232. Насколько я понял, в каноничном режиме UART устройства вполне себе используют управляющие символы (0x016 - XON, 0x17 - XOF, 0x15 - CR, 0x12 - LF и др.). Чтобы передавать числовые данные те же десятичные числа 14, 15, 13, 10 и они не оказывали влияние непосредственно на устройство их следует кодировать в ASCII.
Однако, многие устройства, например датчики давления/влажности/температуры передают сырые данные. Например, вполне может быть передана температура десятичным числом 15. Отчего возникает первый вопрос, как быть с этими числами? Ведь источники данных (датчики) знать не знают про кодировки. По идее можно использовать неканоничный режим работы и мониторить эти символы в буфере.
Следующий вопрос плавно получился их первого. Если захочется организовать пакетную передачу данных по RS232, то что делать в этом случае? Знакомые предлагают организовать некое подобие протокола, со стартовым байтом/преамбулой, например символом SOH или STX, и окончанием вида CRLF, полем длинны пакета и мониторить это все на прикладном уровне при вычитывании из буфера. Однако, мне непонятно, что делать с десятичными числами. Да и связка "найди старт символ, найди поле длины, отсчитай нужной кол-во байт, найди символ конца последовательности, а если нет, то потерял пакет - ищи новый ( а может и не один потерял)" кажется весьма громоздкой и неудобной. Мне кажется, что кодировки, типа ASCII, в свое время были придуманы для решения подобных проблем.
Может, кто подскажет, какие решения уже существуют в мире для этого или направит в сторону, куда думать / что полезного почитать по этому вопросу?