LINUX.ORG.RU

Сколько мкс можно выжать из пингвина


0

0

Такая задача.

Имеется: древняя 486 стендовая машина, которая будет использоваться в качестве программного эмулятора древнего Совкового девайса, для чего к Lpt порту оной подрубается хитрая платка.

Машина должна считывать инфу из файла, её преобразовывать и слать по Lpt, при этом нужно держать повремёнку в 1 мс по передаваемым данным и в 1 мкс по управляющим сигналам.

Использованием функций записи в 80-й порт (из IO port programming howto) смог добиться 2 мкс максиму (смотрел осцилографом), и то при переключении между консолями картинка на осцилографе моргает

Вопрос в следующем, можно ли обработкой напильником ядра и/или использованием каких либо системных вызовов добиться требуемого начальством реал-тайм эффекта от Linux или такое возможно только под Qnx ?

Во-первых, нужно использовать дисциплину планирования SCHED_FIFO. Во-вторых, можно попробовать патчи серии -rt. В-третьих, достичь точности 1мкс на 486-м - несколько сомнительно.

Судя по IO port programming howto, твоя прога работает в userspace? Может, из-за этого у тебя и не получается сделать 1мкс - попробуй написать модуль ядра.

tailgunner ★★★★★
()

1 мкс это очень мало, учитываю частоту шины и т.д. в 486. Тут только модуль ядра поможет --- на время формирования управляющего сигнала полная блокировка прерываний.

mky ★★★★★
()
Ответ на: комментарий от mky

За дельные советы спасибо. Унылая картина прямоугольников на экране осцилографа навивала мысли о том, как бы вбить всё это дело поближе к ядру.

Токма ссылок бы, на предмет откуда брать (rt) / как прикручивать (rt && модуль) (цвет и размер бубна . . .)

marsijanin ★★
() автор топика

Дяденька, вы маньяк - мечтать о таком разрешении и точности при программной генерации.

Я бы порекомендовал (основано на личном неоднократном опыте) сделать так - на LPT (или COM, или USB, в зависимости от предпочтений и требований задачи) лепится простейший контроллер на, скажем, AVR (10-15 деталек), который берёт на себя базовую функциональность по генерации необходимых времянок с необходимой точностью. А в него уже из компутера забрасываются данные на передачу, и с него же снимаются принимаемые данные.

Таким образом, мы разбрасываем функции на две подсистемы. Выделенный контроллер отвечает за точные времянки, а компутер - за сложную обработку данных. В результате малой ценой можно получить весьма нехилую по возможностям систему сбора и обработки данных.

anonymous
()
Ответ на: комментарий от anonymous

> Дяденька, вы маньяк - мечтать о таком разрешении и точности при программной генерации.

Тем не менее, он почти добился своего :) Если убрать оверхэд системного вызова, у него вполне может получиться.

> лепится простейший контроллер на, скажем, AVR (10-15 деталек)

хорошее решение, но если потребуется модификация программы в AVR - не будет ли хлопотнее?

tailgunner ★★★★★
()
Ответ на: комментарий от tailgunner

>хорошее решение, но если потребуется модификация программы в AVR - не будет ли хлопотнее?

AVR втыкается в панельку, если надо --- снимается и перешивается.

dn2010 ★★★★★
()
Ответ на: комментарий от dn2010

> снимается и перешивается.

Об этом и речь: если для обновления программы нужен только ssh/telnet/ на компьютер, то для обновления AVR - руки и аппаратура. Это не всегда есть.

tailgunner ★★★★★
()
Ответ на: комментарий от tailgunner

> Тем не менее, он почти добился своего :) Если убрать оверхэд системного вызова, у него вполне может получиться.

Хм... По хорошему, нужно смотреть на техзадание. Так всё весьма неконкретно. Если нужно получить только скорость - может и выйдет. Если ещё и точность - сомневаюсь. Всё-таки для 486 1мкс - это порядка десятков тактов. Плюс влияние кэша, состояния шины, и т.д. Не могу сказать, что гуру в подобных вещах именно на PC, но о трудностях подобных решений слышал не раз.

> хорошее решение, но если потребуется модификация программы в AVR - не будет ли хлопотнее?

Опять же, стоит взглянуть на техзадание. Может статься, такое решение будет единственно работающим.

И потом, в описании вопроса есть ссылка на некую хитрую платку, которая цепляется к порту для эмуляции "древнего девайса". Почему бы сразу не сделать эту платку с мозгами - плюс 10 деталек, плюс 100 рублей стоимости наверное критичными ни для кого не будут. Если речь идёт об AVR или PIC - шьются они прямо на плате программатором из пяти проводков, так что проблем с перепрошивкой не будет.

Опыт показывает, что прошивки для подобных решений весьма просты, пишутся за пару дней максимум (обычно за пару часов). А уж в точности любой PC врядли переплюнет контроллер, тактируемый кварцем и считающий времянки потактово. Просто в силу своей большей сложности и недетерминированности.

Автору темы. Если нужно - обращайтесь. Опыт подобных решений есть, подскажу, что и как можно сделать. И даже денег за консультацию не возьму (ну, разве, пиво) :). Пишите на "c - h <at> m a i l . r u" - решение найдём.

cache ★★
()
Ответ на: комментарий от tailgunner

> Об этом и речь: если для обновления программы нужен только ssh/telnet/ на компьютер, то для обновления AVR - руки и аппаратура. Это не всегда есть.

Хм... Если уж очень необходимо _дистанционное_ обновление - это тоже реализуется элементарно. На второй LPT вешается тот самый программатор (пять проводков), который при необходимости и прошивает контроллер. Операция секунд на десять. Программа для прошивки консольная, так что хоть по SSH, хоть локально.

cache ★★
()
Ответ на: комментарий от cache

> Если уж очень необходимо _дистанционное_ обновление

Не столько дистанционное, сколько чисто программное - чтобы ничего не надо было разбирать, и не нужно было никакой дополнительной (== не являющейся частью устройства) аппаратуры.

> На второй LPT вешается тот самый программатор (пять проводков), который при необходимости и прошивает контроллер.

А на тот же самый LPT можно повесить? А то мало компьютеров с двумя LPT :)

tailgunner ★★★★★
()
Ответ на: комментарий от tailgunner

> А на тот же самый LPT можно повесить? А то мало компьютеров с двумя LPT :)

Для начала уточню, в этом примере я говорил про AVR и программатор FBPRG (hard)/AVReal (soft). Насколько я знаю, там из всего порта используется 5 линий - 4 выхода, 1 вход. Последние версии позволяют определять, какие именно это линии. Так что - думаю, возможно.

Альтернатива - простейшая карта расширения ISA с LPT (200-300 рублей на Савёле), или использование для обмена последовательного порта. Уж один-то последовательный порт на 486 всяко есть.

cache ★★
()
Ответ на: комментарий от cache

Спасибо

Доберусь в понедельник до работы, буду добивать стабильность по мс, а для мкс припасено решение на жёсткой логике - придётся слегка попаять

marsijanin ★★
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.