Я пытаюсь создать портативную робототехническую библиотеку для любителей (Windows и Linux), которая обладает жесткими возможностями в реальном времени. Он должен иметь возможность подключаться по стандартному Ethernet к микроконтроллеру, загружать микропрограмму на это устройство, подключаться к другим устройствам по полевой шине и загружать микропрограмму в те другие микроконтроллеры, которые используют выделенные контроллеры. Сетевые адаптеры будут теми, которые поддерживаются RTnet, если требуется жесткий режим реального времени. Я буду хотеть типичные частоты сервопривода по крайней мере 1 кГц, но предпочтительно 2 кГц или выше. Он будет использовать полностью собственный протокол (не TCP или UDP по IP), так что издержки будут минимальными, а высокоскоростная полевая шина может быть насыщена, не получая или не передавая кадры. Полезная нагрузка в кадре Ethernet затем может быть интерпретирована или отправлена на подключенные устройства.
1) Я предпочитаю хранить протокол в C ++, но знаю, что использование ключевого слова «new» не будет работать для программирования в реальном времени. С какими еще ограничениями я столкнусь, если я решу использовать язык C ++ вместо преобразования проекта в C? Люди рекомендуют книги или веб-сайты, которые учат, как использовать C ++ и соблюдать жесткие сроки в реальном времени? Я полагаю, что это возможно, и я надеюсь, что смогу использовать C ++, потому что проект Orocos использует C ++ в реальном времени. Я бы предпочел не использовать C-код.
2) Чтобы сохранить универсальную библиотеку переносимых протоколов, как программа должна обрабатывать протокол, работающий одновременно как на адаптере Ethernet не в реальном времени, так и на адаптере RTnet Ethernet?
У меня есть конкретный вопрос, скажем, о переносном классе Mutex, который может использовать буст или мьютекс Xenomai.
Решение 1 проблемы 2 может быть следующим: если приложение также было скомпилировано с библиотеками Xenomai, тогда может быть создан мьютекс с логическим флагом, чтобы указать, какие методы (boost или Xenomai) будут обернуты во время выполнения для блокировки и разблокировки. , Он может содержать буст-мьютекс и мьютекс Xenomai, если библиотека была скомпилирована для Xenomai. Мне не нравится это решение, потому что, если проект скомпилирован для Xenomai, то он будет содержать закрытые переменные мьютекса для boost и Xenomai, который кажется менее элегантным способом, чем просто наличие мьютекса, который нужен.
Решение 2 для проблемы 2 может быть следующим: записать 2 различных производных класса из абстрактного класса чисто виртуальных методов интерфейса в мьютекс, один для boost и один для Xenomai. Мне нравится этот способ лучше, но тогда говорить, какой класс использовать во время выполнения, громоздко. Возможно, мне понадобятся пулы повышения и мьютексов Xenomai. Это то, как наиболее сложные программы C ++ в реальном времени решают проблему?
У меня есть проблема не только с мьютексом, но я хотел бы получить обратную связь, так как я не хочу с самого начала копировать плохие шаблоны проектирования.
3) Я считаю, что TwinCAT от Beckoff запускает EtherCAT в режиме реального времени под Windows 7. Будет ли что-то, что не выйдет из-под контроля любителя, который поддерживает по крайней мере один сетевой адаптер с жестким режимом реального времени под Windows 7 или потом? Может быть, есть проект с открытым исходным кодом Hypervisor.
4) Кроме того, как люди загружают систему, чтобы их четырехъядерные компьютеры использовали 100% каждого из ядер, чтобы они могли определить, не работает ли их система в режиме реального времени?
Одна деталь: если вам нужен цикл обновления 1 кГц для сервоприводов, почему вы используете жесткий режим реального времени? Мягкий режим реального времени (т. Е. Запуск от имени пользователя root, но чистое пространство пользователя, но для политики этого процесса установлен уровень FIFO для этого процесса, блокировка всего в памяти, отключение пространства подкачки …), и вы легко получите 1 кГц, не пропустив ни одного сообщение за весь год работы.
На данный момент, просто используйте необработанный сокет для вашего протокола Ethernet и назовите его день.
Что касается несвязанного вопроса, то Ethernet / CD в наши дни реализованы аппаратно. Просто игнорируй их.
Других решений пока нет …