Разработка, производство и продажа радиоэлектронной аппаратуры
|
Требуется программист в Зеленограде - обработка данных с датчиков; ColdFire; 40 тыс.
e-mail: jobsmp@pochta.ru
|
Есть довольно много плат с уже имеющимся RS485 на борту, есть куча внешних преобразователей RS232 <-> RS485. Все, что я знаю, переключаются RTS. Они различаются тем, слышат ли они линию в режиме передачи - обычно глохнут (т.е. сами себя не слышат).
Заморочка вот в чём состоит. Скажем, протокол MODBUS регламентирует время начала ответа слейвом спустя 3,5 символа (точнее, время передачи одного байта на текущей скорости) после конца передачи мастером. За это время мастер должен успеть переключить направление с передачи на приём. Проблема состоит в том, что обычный писюковый COM-порт не содержит аппаратного прерывания по концу передачи. Последнее прерывание, которое он генерит - это когда последний байт загружен в сдвиговый регистр и начал выдавливаться. Подразумевается, что тут программа должна сидеть и бит поллить, пока оба бита (есть чего-то в очереди на передачу и есть чего-то в сдвиговом регистре) не обнулятся. На скорости 9600 байт выдавливается почти миллисекунду - зачастую это непозволительно долго. Можно попытаться зарядить прерывание по таймеру, но тут другая засада - обычно свободных железячных таймеров нету, а когда реально получишь управление по срабатыванию софтового таймера - хрен его знает, тут нужна RTOS с гарантированным временем отклика - заведомо не больше чем, время, отведённое протоколом для переключения из режима передачи в приём.
Составить ответ | Вернуться на конференцию
Ответы