Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: FreeRTOS+CLI escape codes
Форум разработчиков электроники ELECTRONIX.ru > Cистемный уровень проектирования > Операционные системы > FreeRTOS
winniethepooh
Здравствуйте.
Работаю с FreeRTOS +CLI (для Сortex -M3 под FreeRTOS соответственно) и VT100 терминалом.
В случае передачи escape последовательности сursor move (стрелочка вправо ,в лево и т.д.),
все приложение виснет.
Может кто то знает причину?
k155la3
Цитата(winniethepooh @ Oct 12 2016, 13:18) *
Здравствуйте.
Работаю с FreeRTOS +CLI (для Сortex -M3 под FreeRTOS соответственно) и VT100 терминалом.
В случае передачи escape последовательности сursor move (стрелочка вправо ,в лево и т.д.),
все приложение виснет.
Может кто то знает причину?


А на отладчике что видно ?
Смотрите размер буферов USART.
Если сбой только на "цепочечных" посылках, когда пакет из ESC итд идет без паузы - в
отличие от тыкания пальцем по отдельным кодам (тогда между каждым прилетающим в приемник символом идет бОООльшая пауза).
Что-то не феншуй с приемом и векторах прерываний. Получается критична скорость обработки пришедшего символа.
смотрите настройки соотв-го вектора по прерывания по Rx и его увязку с обработчиком ОС.
Сбой только на <0x1B> <...> <...> ?
Зашлите из терминальной программы с помощью макроса пакет другого содержания из нескольких байт. Будет ли сбой-завес.




winniethepooh
Цитата(k155la3 @ Oct 15 2016, 13:12) *
А на отладчике что видно ?
Смотрите размер буферов USART.
Если сбой только на "цепочечных" посылках, когда пакет из ESC итд идет без паузы - в
отличие от тыкания пальцем по отдельным кодам (тогда между каждым прилетающим в приемник символом идет бОООльшая пауза).
Что-то не феншуй с приемом и векторах прерываний. Получается критична скорость обработки пришедшего символа.
смотрите настройки соотв-го вектора по прерывания по Rx и его увязку с обработчиком ОС.
Сбой только на <0x1B> <...> <...> ?
Зашлите из терминальной программы с помощью макроса пакет другого содержания из нескольких байт. Будет ли сбой-завес.


На отладчике ошибка переполнения регистра приема uart, обработчик явно не успевает (если поставить задержку передачи символа в
терминалке на 1мс/символ все работает), в случае передачи нескольких символов сразу ситуация повторяется как и для ESC.
Наверное причин может быть много, но
задача обработчика ввода с консоли самая высокоприоритетная,
приоритет обработчика прерываний configMAX_SYSCALL_INTERRUPT_PRIORITY
задача обработчика консоли одна и выполняется на высокопроизводительном 32 разрядном cortex m3

что может замедлять обработчик?
x893
Только работа мозга.
Проверьте без OS.
Загрузите проект на github - тогда что-то конкретное будет.
RTS/CTS
XON/XOFF
winniethepooh
Цитата(x893 @ Oct 17 2016, 13:20) *
Только работа мозга.
Проверьте без OS.
Загрузите проект на github - тогда что-то конкретное будет.
RTS/CTS
XON/XOFF


без OS все ОК
RTS/CTS не вариант.
x893
Цитата(winniethepooh @ Oct 17 2016, 16:34) *
без OS все ОК
RTS/CTS не вариант.

Загрузите проект на github - тогда что-то конкретное будет.
winniethepooh
причина неправильной обработки ESC обнаружилась в неправильной инициализации uart.
он был установлен в режим "asynchronous multi-processor" (а нужен был "asynchronus normal serial mode").
при получении трех символов ESC последовательности (непрерывно), происходило считывание дополнительного (9-го) бита.
т.е. имело место некорректное чтение символа (обработчик прерывания сбрасывал принятый "мусорный" символ, очищал ошибку переполнения в Serial Status Register и на этом заканчивал свою часть работы)
Особенности работы задачи-обработчика принятых символов я пока не понял (вместо переданной ESC последовательности терминалка выводила "мусор", хотя обработчик прерываний данные в задачу-обработчик не отправлял..).
Однако понятно, что данная глупая ошибка связана с невнимательностью при инициализации uart.

Спасибо k155la3 и x893 за участие. хорошего дня.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2024 Invision Power Services, Inc.