Сколько времени может занять поток, который блокируется при получении от последовательного порта RS232, чтобы проснуться? - PullRequest
0 голосов
/ 15 апреля 2020

Предполагая, что я установил процесс на максимально возможный приоритет, и при этом не происходит подкачки ...

Сколько времени может занять поток, который блокируется при получении из последовательного порта RS232, для пробуждения up?

Я хочу знать, будет ли поток пробужден в течение микросекунд после прерывания UART, попадающего в ядро, или ему придется ждать следующий 100-миллисекундный интервал времени на процессоре.

1 Ответ

1 голос
/ 17 апреля 2020

Сколько времени может занять поток, который блокируется при получении из последовательного порта RS232, для пробуждения?

В зависимости от режима (например, канонического) процесс может ждать вечно (например, для символа EOL).


Я хочу знать, будет ли поток быть разбуженным в течение микросекунд после прерывания UART, поражающего ядро, или

Конец кадра (т. е. стоп-бит) на проводе является лучшей (т. е. непротиворечивой) контрольной точкой.

" Прерывание UART, попадающее в ядро ​​", является плохой контрольной точкой, учитывая, что создание и обработка прерываний могут быть отложены.
FIFO UART может не генерировать прерывание для каждого символа / байта.
Контроллер прерываний назначает приоритеты ожидающим прерываниям, а UART редко присваивается высокий приоритет.
Программное обеспечение может отключать прерывания для критических областей.


, придется ли ему ждать следующего Временной интервал 100 мс на процессоре.

Выполняемый процесс с наивысшим приоритетом получает управление после завершения системного вызова.
Ссылка: Linux Разработка ядра: вытеснение и переключение контекста :

Consequently, whenever the kernel is preparing to return to user-space, either 
on return from an interrupt or after a system call, the value of need_resched 
is checked. If it is set, the scheduler is invoked to select a new (more fit) 
process to execute.

Я стремлюсь минимизировать Linux последовательную задержку между полученным стоп-битом и стартовым битом ответа из высокоприоритетного потока пользовательского пространства.

Я подозревал, что это то, что вы действительно ищете.
Конфигурация последовательного терминала имеет решающее значение для минимизации таких широт. Например, исследуйте флаг ASYNC_LOW_LATENCY .
Однако конфигурация ядра Linux может дополнительно улучшить / минимизировать такую ​​задержку, например, этот разработчик сообщает уменьшение величины от миллисекунд до всего ~ 100 микросхем c.


Я знаком только с последовательными интерфейсами на микроконтроллерах ATMEGA и STM32 ...

Тогда обязательно ознакомьтесь Linux серийные драйверы .

...