Как вы, возможно, уже определили по всем ответам, которые не направляют вас напрямую к протоколу, что ваш собственный подход - это лучший выбор.
Итак, это заставило меня задуматься и хорошо, вот несколько моих мыслей -
Учитывая, что этот чип имеет 6 каналов АЦП, наиболее вероятно, что вы используете последовательную связь RS-232 (предположение из вашего вопроса), и, конечно, ограниченное пространство кода, определяющее простую структуру команд, поможет, как указывает Адам - Возможно, вы захотите свести к минимуму обработку ввода на чипе, чтобы двоичный звук звучал привлекательно, но компромисс заключается в простоте разработки и обслуживания (вам может потребоваться отстреливать мертвый ввод через 6 месяцев) - гипертерминал является мощным средством отладки, поэтому я подумал о том, как реализовать простую структуру команд с хорошей надежностью.
Несколько общих соображений -
сохраняет команды одинакового размера - облегчает декодирование.
Обрамление команд и необязательную контрольную сумму, как указывает Адам, можно легко обернуть вокруг ваших команд. (с помощью небольших команд простая контрольная сумма XOR / ADD выполняется быстро и безболезненно)
Я бы порекомендовал объявлению о запуске хоста с версией прошивки при сбросе - например, «HELLO; Версия прошивки 1.00z» - сообщать хосту, что цель только что запущена и что работает.
Если вы в первую очередь осуществляете мониторинг, вы можете рассмотреть режим «свободного запуска», при котором цель просто циклически просматривает аналоговые и цифровые показания - конечно, это не обязательно должно быть непрерывным, оно может быть разнесено через 1, 5, 10 секунд или просто по команде. Ваш микро всегда слушает, поэтому отправка обновленного значения является независимой задачей.
Завершение каждой строки вывода символом CR (или другим символом) делает синхронизацию на хосте прямой.
например, ваш микро может просто выводить строки;
V0=3.20
V1=3.21
V2= ...
D1=0
D2=1
D3=...
and then start over --
Кроме того, команды могут быть очень простыми -
? - Прочитайте все значения - их не так много, поэтому получите их все.
X = 12,34 - Чтобы установить значение, первым байтом является порт, затем напряжение, и я бы порекомендовал оставить "=" и "." как создание, чтобы гарантировать действительный пакет, если вы отказываетесь от контрольной суммы.
Еще одна возможность, если ваши выходы находятся в заданном диапазоне, вы можете их предварительно масштабировать. Например, если вывод не должен быть точным, вы можете отправить что-то вроде
5=0
6=9
2=5
, при котором порт 5 будет отключен, порт 6 - полным, а порт 2 - половинным значением. При таком подходе ascii и двоичные данные примерно одинаковы в отношении ресурсов вычислений / декодирования на микроуровне. Или для большей точности сделайте вывод 2 байта, например, 2 = 54 - ИЛИ, добавьте таблицу внешних ссылок, и значения даже не должны быть линейными, если байт данных является индексом в справочной таблице. .
Как мне нравится говорить; просто обычно лучше, если это не так.
Надеюсь, это немного поможет.
Еще раз подумал, перечитывая; добавление команды "*" может запрашивать данные, обернутые тегами html, и теперь ваше хост-приложение может просто перенаправить вывод с вашего микро в браузер и wala, браузер готов -
:)