Я разрабатываю приложение на BeagleBoneBlack. Встроенный Linux для меня совершенно новый = /
Проблема, с которой я сталкиваюсь, заключается в том, что я хочу реализовать связь RS485,
Я написал фрагмент C ++ — кода с использованием библиотеки SeriaLib, на данный момент выделенный GPIO используется для переключения направления интерфейса RS485. Все было хорошо до этого момента.
Для написания сообщения используется функция write ниже
write(fd,Message,Lenght);
Единственная проблема заключается в переключении DIRECTION-Pin сразу после того, как последний байт записан в BUS = (
При разработке на микроконтроллерах нет проблем реагировать на различные прерывания и так далее.
Есть ли решение — глубоко в ядре? — переключить пин DIRECT после успешной передачи сообщения?
Обычно на маленький В микроконтроллере после ввода последнего символа вы можете включить прерывание завершения передачи или просто заняться ожиданием флага завершения передачи в процедуре отправки, а затем отключить драйвер.
Тем не менее, некоторые более тяжелые MCU не имеют полного прерывания передачи, и многозадачная ОС может нелюбовь заняты ожиданием (и вводят нежелательную задержку, если вы уступаете между опросами). На ум приходят два способа борьбы с этим.
Поскольку у вас есть драйвер для отключения, похоже, у вас есть одна двунаправленная пара, и будет получить все, что вы передаете. В сочетании с отслеживанием состояния вы можете использовать Получать прервите, чтобы узнать, что ваш последний персонаж был отправлен, и отключите драйвер. (Также обработайте ошибки RX, если кто-то еще блокирует автобус)
Определите время, зависящее от скорости передачи, от постановки в очередь последнего символа до завершения передачи, и установите прерывание таймера на это время, затем отключите драйвер в ISR.
Других решений пока нет …