![]() |
Здравствуйте, гость ( Вход | Регистрация )
![]() |
x-8973 |
![]()
Сообщение
#1
|
Студент ![]() Группа: Участник Сообщений: 25 Регистрация: 22.2.2013 Пользователь №: 3720 Спасибо сказали: 0 раз(а) Репутация: ![]() ![]() ![]() |
Вечер добрый всем здешним обитателям!
Проблема моя затрагивает программирование для микроконтроллеров, но на решение данный факт, я надеюсь, никак не влияет. Итак: Есть последовательный порт на микроконтроллере. Имеется прерывание, которое генерируется при приеме портом байта данных. Есть возможность получить этот байт. Нужно принять пакет данных, который состоит из нескольких байт (длина пакета может быть разной). Пакет представляет из себя заголовок (признак начала 0xAEAE, идентификатор пакета, длина пакета) длиной 4 байта, и собственно данные. Примерный алгоритм я себе представляю так: -принимать данные, пока длина буфера в массиве char не станет равна 4. -поискать в буфере признак начала пакета -если признак найден, выбросить байты, что слева от него, иначе очистить буфер и выйти из прерывания -если длина пакета принята, то прочитать ее и принимать данные, пока не наберется нужное количество байт, иначе принимать данные, пока не будет принята длина пакета -если принято нужное количество байт, то передать буфер на обработку. Для ПК я этот алгоритм реализовал с использованием классов QT, в частности, QByteArray. А вот для МК ничего придумать не могу. Натыкаюсь на то, что массив char есть именно массив. А QByteArray - класс, имеющий методы для поиска, "обрезки" и прочих насущных дел. Может быть, кто поможет мне в этом деле? Код QT прилагаю.
|
|
|
![]() ![]() ![]() |
![]() |
|
Текстовая версия | Сейчас: 26.5.2025, 2:36 |