Напишу как у меня. Сразу скажу, что реализацю я почерпнул в примерах этого раздела форума - вариант ваке от haker_fox. Основа - кольцевой буфер с соответствующими процедурами из атмеловской аппликухи + буфер для передачи пакета ваке и буфер приема пакета ваке - не кольцевые. Эту систему я пользую не только для уарта, но и вообще для всяких асинхронных процессов обработки данных. У меня есть ряд подпрограмм для ваке: приема пакета, передачи пакета, подпрограммы выполнения команд, процесс. В процессе, который крутится в майне постоянно вызывается подпрограмма приема пакета, которая ловит начала фрейма, декодирует байтстаффинг, расчитывает контрольную сумму и контролирует размер буфера. Эта прога возвращет в процесс результат приема фрейма и является основой свитча. Если результат успешный, выполняется соответсвующая команда.
|