Задание расписания на точные периоды в Linux или Windows
У меня есть один странный вопрос. Я хотел бы знать, можно ли сделать программу на C/C++, которая будет работать на Linux или Windows и будет подключать обработчик прерываний к системному таймеру, установленному на определенный период (например, 2000 раз в секунду), и я хочу, чтобы это прерывание было с наивысшим приоритетом, то есть оно должно выполняться каждые полмиллисекунды и во время выполнения его нельзя прерывать.
Это мы сделали с MS-DOS с Borland Turbo C 3.1. У нас есть интерфейс карта (наша собственная), которая работает на слоте ISA. Каждые полмиллисекунды наша программа считывает состояние электроники, управляющей промышленным процессом через интерфейс. Это работало для нас в течение последних 15 лет, но у нас заканчиваются материнские платы, которые имеют слот ISA, поэтому мы ищем новые решения.
У нас также есть решение, основанное на микроконтроллерах PIC, но наши горизонты будут расширены с помощью процессора общего назначения.
Я предполагаю, что есть некоторые настроенные Linux ядра для встроенных приложений, поэтому я ищу некоторые источники, с которыми мы можем начать экспериментировать.
3 ответа:
Да, вы можете сделать это в MS-DOS, потому что это не многопользовательская или многозадачная операционная система. Однако то же самое будет Не работать в Windows, потому что это является многопользовательской и многозадачной операционной системой. Это также не в реальном времени, что означает, что нет никакой гарантии, что ваша задача будет выполнена точно, Когда вы попросите ее выполнить. Все заранее запланировано, а это означает, что любое количество других процессов и задач (либо в пользовательском режиме, либо системный уровень) может эффективно "отбросить" ваш процесс вниз по списку приоритетов и заставить его ждать выполнения до тех пор, пока эти другие задачи не будут завершены или сами не будут прерваны, чтобы дать вашему процессу возможность работать некоторое время.
Я не знаю о Linux, но я думаю, что большинство основных дистрибутивов написаны аналогично Windows.
Для этого вам потребуется найти однопользовательскую операционную систему реального времени. Unix-производная, вероятно, лучшее место для начала поиска, но Я не буду человеком, способным предложить его. В качестве альтернативы вы можете продолжить использовать MS-DOS (или альтернативные варианты, такие как FreeDOS), но переключиться на другую технологию интерфейса, которая доступна на более новых платах. Нет никакой причины обновлять что-то, что работает для вас, особенно если обновления контрпродуктивны для вашей цели.
Типичная ОС, такая как стандартная Linux или Windows, не предназначена и не сможет работать с такой степенью точности и доступности в реальном времени.
Мне кажется, что вам нужно исследоватьLinux реального времени или что-то подобное.
RTLinux-это модифицированная версия ядра Linux, предназначенная для работы в реальном времени, особенно для таких приложений, как это.Надеюсь, это поможет.
Персональные и доступные вычисления невероятно увеличили производительность за эти годы, за исключением одной области-низкой задержки. Задержка на самом деле увеличилась во многих случаях использования, когда вы сравниваете 486 и современный настольный процессор.
Тем не менее, взгляните наЭту статью , где авторы приходят к выводу, что субмиллисекундное планирование возможно в Linux на товарном оборудовании.