ВходНаше всё Теги codebook 无线电组件 Поиск Опросы Закон Суббота
20 апреля
503831 Топик полностью
fk0, легенда (04.04.2014 17:34, просмотров: 205) ответил Snaky на именно в этом - слейв не может пнуть мастера, а поллинг всех по очереди со всеми такими погремушками - медленно.
Это в Газпроме и Росатоме -- дело десятое... Поллинг медленный скорей из-за особенностей ПО. Сколь быстрой не будет физическая среда -- драйвер в процессоре по прерыванию свалит пакет в fifo и пока там планировщик (или что там вместо ОСи) дойдёт до обслуживающего процесса и тот соизволит ответить. Десятки миллисекунд. В принципе, на уровне драйвера завязанного на прерывания можно ответить I-кадром с P/F-битом -- мозгов на это много не нужно. И уже заметное ускорение. На МК это ещё куда ни шло, на PC такое сложно сделать. Если нет данных то очередь не должна долго подходить, если без упомянутой задержки. Я имел ввиду другое, что мастер не может опрашивать непрерывно. А будет работать (не Газпром) цикл опроса -- пауза -- цикл опроса... Пауза может быть очень большой. И её бы прервать и начать новый цикл. В принципе, возможен такой алгоритм, что если мастер видит какой-то пакет (а то и просто байты) в канале, то начинает цикл. Но всё равно не хорошо. Хотящие начала цикла слейвы будут портить пакеты от мастера. Здесь попросту напрашивается прерывание по отдельному проводу (а-ля SMBUS). Как доставить сигнал от слейва к мастеру не попротив пакет (возможно) уже идущий в обратном направлении. Думается, например мастер в очередной раз всех опрашивает и видит, что никто ничего передавать не хочет. Тогда посылается спецпакет, мол "жду запроса 1 секунду, например". И слейвы запоминают время, когда приняли такой пакет. И дальше мастер или начинает опрос после истечения длительного таймаута, или после получения любых данных из шины. Слейв тогда если хочет обмена и видит, что до истечения таймаута много времени -- посылает что-то в шину для активации мастера. Или если времени не осталось -- ждёт немного. Вариант или нет?
[ZX]