Как расширить модель процесса общего адресного пространства для устройств и сервисов - PullRequest
0 голосов
/ 01 июня 2018

Я попытался сгенерировать код для устройства, изменив тип реализации на SharedLibrary и переименовав точку входа в Device_Name.so .Мне удалось сгенерировать и построить, но в main.cpp он сохранил основную функцию, а не make_component для вызова ComponentHost .конструкторы устройств имеют дело с аргументами, которых нет у ComponentHost, например с IOR диспетчера устройств.Я считаю, что это расширение функциональности подразумевает изменение исходного кода ComponenHost.Это часть дорожной карты REDHAWK?Любые комментарии о том, как я могу заставить его работать?

Ответы [ 2 ]

0 голосов
/ 06 июня 2018

Начиная с RH 2.1.2, поведение по умолчанию для устройств / служб / компонентов, пользовательский код которых использует redhawk :: buffer для распределителя памяти данных и потокового API для взаимодействия с портом bulkio, заключается в использовании транспорта совместно используемой памяти междуОбъекты C ++, работающие в разных процессах

0 голосов
/ 02 июня 2018

Итак, вы пытаетесь использовать общее пространство процессов внутри узла для связи между устройствами и службами?Потому что я не верю, что есть специальные инструменты для этого, но я думаю, что есть способ сделать это.Просто чтобы прояснить ситуацию, я не пробовал этого, но, основываясь на тесте, используемом портами bulkio для определения использования локального и удаленного транспорта, думаю, это будет работать.

Если вы посмотрите на шаблон персоны, вы увидите, что есть программируемое устройство, которое отвечает за загрузку устройств Persona.Большинство деталей для этого не обязательно для того, что вы пытаетесь сделать, но шаблон должен быть полезным.Для осуществления связи между устройствами с использованием общей памяти вы можете сгенерировать программируемое устройство, единственной целью которого является пересылка параметров из DeviceManager в Personas.Затем Personas будет действовать как обычные устройства, просто запущенные в том же пространстве процессов, что и другие.

Генераторы кода для программируемых устройств и устройств Persona еще не интегрированы в IDE, поэтомунеобходимо создать новый проект устройства в eclipse для каждого устройства, которое вы хотите (чтобы у вас были файлы spd).Обязательно добавьте соответствующий интерфейс AggregateDevice к вашим устройствам.Это дает платформе понять, что несколько устройств технически могут рассматриваться как одна сущность, но вы также можете индивидуально общаться с каждым.Также убедитесь, что Программируемое устройство является Исполняемым Устройством, так как оно требует запуска Персональных Устройств.Затем из командной строки вы можете запустить redhawk-codegen - - pgdevice </path/to/programmable/spd>, чтобы сгенерировать программируемое устройство, и redhawk-codegen - - persona </path/to/persona/spd>, чтобы сгенерировать ваши устройства (ы) Persona.

Как только все это будет сделано, вы заметитеОсновная функция вашего Программируемого запускает Устройство, как вы описали в своем вопросе.Тем не менее, основная функция для Personas имеет код для запуска устройства как отдельного устройства или просто как объекта в его собственном потоке.

Это должно позволить портам оптовых портов Программируемого и Персона взаимодействовать с каждымдругие через общую память.Очевидно, что это сломается, если вы попытаетесь вытолкнуть данные из процесса, по крайней мере, до тех пор, пока кто-нибудь не добавит разделяемую память между процессами через что-то вроде shm.Не уверен, что это на дорожной карте, но это, безусловно, будет аккуратно.

Обновление. Похоже, что разделяемая память между процессами была добавлена ​​в RH 2.1.2, поэтому вы должны иметь возможность обмениваться данными между совместно расположенными устройствами, службами и компонентами, используя этот механизм.Это делает вышеперечисленное ненужным, но я собираюсь оставить его для более ранних версий RH.

Дайте мне знать, если у вас есть какие-либо вопросы!

...