Semaphore.h без RTOS

Мне интересно, могу ли я использовать семафор и мьютекс с ОС Linux, запрограммированной на C ++ с помощью API semaphore.h.

Я еще не на этапе разработки / написания кода, но цель состоит в том, чтобы считывать данные на приемнике, который отправляет асинхронные двоичные данные со скоростью передачи данных 115 200 бод. Затем эти данные должны быть переданы в модем как можно быстрее.

Я думал об использовании, возможно, RTOS, но у меня нет знаний о загрузчиках и о том, как получить Linux или любую другую ОС на чипе или во встроенной среде.

Можно ли написать эти функции чтения и записи в отдельном потоке, связанном с помощью сигналов и каналов, с добавлением семафоров?

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

Можно ли получить преимущества семафоров при использовании не-ОСРВ? Я видел только их применение в сотрудничестве с ОСРВ.

0

Решение

Семафоры POSIX не менее важны для синхронизации в многопоточных приложениях Linux, чем семафоры RTOS во встроенном приложении.

0

Другие решения

Подумайте, что означает 115200 в качестве скорости передачи данных — это 11520 символов (при условии 8N1) в секунду или около 86,8 мксек на символ. Сейчас операционная система Linux ненадежна для реального времени, но у нас наверняка не будет проблем с гранулярностью около 1 миллисекунды, если у нас есть стандартное ядро ​​с частотой 1000 Гц, что примерно в 11,5 раз больше — при условии, что вы настроили свой планировщик. Кроме того, в некотором смысле это задержка наихудшего случая — пакетная запись символов вместе будет иметь почти идеальную задержку между символами, при условии, что вы можете сохранить исходящий буфер заполненным.

Теперь ответьте на этот вопрос: что терпимо для вашего приложения? В зависимости от ответа вам придется учитывать разные вещи — от исправлений для Linux в режиме реального времени — до гибридного Xenomai / RTAI до полной RTOS, такой как RTEMS. С моим текущим пониманием вашей ситуации, я бы сказал, что достаточно использовать ядро ​​с частотой 1000 Гц.

Серийные файловые дескрипторы linux могут быть записаны и прочитаны в разных потоках одновременно без проблем. Вы можете разделить эти задачи на разные потоки или использовать неблокирующий ввод-вывод в обмен на незначительную задержку, пока ваша обработка не требует много усилий — это может избежать переключений контекста, и это хорошо, потому что они медленные. Другими словами, вам не нужно вводить семафоры, если используются потоки или неблокирующий режим.

И наконец — семафоры есть практически во всех ОС

0

По вопросам рекламы [email protected]