реклама на сайте
подробности

 
 
 
Reply to this topicStart new topic
> FreeRTOS+CLI escape codes, приложение виснет при передаче escape кода
winniethepooh
сообщение Oct 12 2016, 10:18
Сообщение #1


Участник
*

Группа: Участник
Сообщений: 68
Регистрация: 3-06-15
Пользователь №: 86 995



Здравствуйте.
Работаю с FreeRTOS +CLI (для Сortex -M3 под FreeRTOS соответственно) и VT100 терминалом.
В случае передачи escape последовательности сursor move (стрелочка вправо ,в лево и т.д.),
все приложение виснет.
Может кто то знает причину?
Go to the top of the page
 
+Quote Post
k155la3
сообщение Oct 15 2016, 12:12
Сообщение #2


Профессионал
*****

Группа: Свой
Сообщений: 1 123
Регистрация: 8-03-09
Из: Днепр
Пользователь №: 45 848



Цитата(winniethepooh @ Oct 12 2016, 13:18) *
Здравствуйте.
Работаю с FreeRTOS +CLI (для Сortex -M3 под FreeRTOS соответственно) и VT100 терминалом.
В случае передачи escape последовательности сursor move (стрелочка вправо ,в лево и т.д.),
все приложение виснет.
Может кто то знает причину?


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




Go to the top of the page
 
+Quote Post
winniethepooh
сообщение Oct 17 2016, 13:11
Сообщение #3


Участник
*

Группа: Участник
Сообщений: 68
Регистрация: 3-06-15
Пользователь №: 86 995



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


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

что может замедлять обработчик?
Go to the top of the page
 
+Quote Post
x893
сообщение Oct 17 2016, 13:20
Сообщение #4


Профессионал
*****

Группа: Свой
Сообщений: 1 333
Регистрация: 27-10-08
Из: Планета Земля
Пользователь №: 41 226



Только работа мозга.
Проверьте без OS.
Загрузите проект на github - тогда что-то конкретное будет.
RTS/CTS
XON/XOFF
Go to the top of the page
 
+Quote Post
winniethepooh
сообщение Oct 17 2016, 13:34
Сообщение #5


Участник
*

Группа: Участник
Сообщений: 68
Регистрация: 3-06-15
Пользователь №: 86 995



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


без OS все ОК
RTS/CTS не вариант.
Go to the top of the page
 
+Quote Post
x893
сообщение Oct 17 2016, 15:48
Сообщение #6


Профессионал
*****

Группа: Свой
Сообщений: 1 333
Регистрация: 27-10-08
Из: Планета Земля
Пользователь №: 41 226



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

Загрузите проект на github - тогда что-то конкретное будет.
Go to the top of the page
 
+Quote Post
winniethepooh
сообщение Oct 18 2016, 08:50
Сообщение #7


Участник
*

Группа: Участник
Сообщений: 68
Регистрация: 3-06-15
Пользователь №: 86 995



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

Спасибо k155la3 и x893 за участие. хорошего дня.
Go to the top of the page
 
+Quote Post

Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 22nd July 2025 - 02:52
Рейтинг@Mail.ru


Страница сгенерированна за 0.01283 секунд с 7
ELECTRONIX ©2004-2016