Я реализую код, который создает импульсный выход через цифровой ввод-вывод для шагового драйвера. Тем не менее, я замечаю, что когда запущена «чужая» программа (т. Е. Антивирус), вывод (рабочий цикл) станет противоречивым. Можно ли в любом случае назначить этот поток одному ЦП в многоядерных ЦП, чтобы другие программы, даже управляемые Windows, не могли назначить нить этому ЦП? Я использую C # в качестве программирования.
1 ответ
Единственный способ сделать это - перечислить все остальные процессы в системе и установить маску сходства, чтобы исключить процессор, который вы пытаетесь сохранить для своего потока. Вам также придется продолжать это делать, поскольку дополнительные процессы могут быть созданы в любое время.
Лучше всего просто запустить процесс в классе приоритетов "в реальном времени", а затем установить приоритет потока как "критичный ко времени". (Я надеюсь, что это не обязательно должно выполняться на слишком высоком проценте от общего времени.)
Однако обработчики прерываний и процедуры DPC по-прежнему могут мешать вашему потоку.
Ваша настоящая проблема здесь в том, что Windows не предназначена и не подходит для задач с "жесткими" требованиями в реальном времени, и ваш звучит так.
Я предлагаю использовать микроконтроллер, который предназначен для генерации импульсов переменного рабочего цикла, в которых нуждается ваш шаговый двигатель.
В каком диапазоне частоты и рабочего цикла нужен шаговый двигатель? Там может быть другой способ решить вашу проблему.