Компилировать сгенерированный Rhapsody код вне Rhapsody

Я создал несколько моделей рапсодии как часть моего проекта на работе. Мы создали диаграммы классов, диаграммы состояний и панельные диаграммы и протестировали модель с помощью симуляции. После моделирования мы автоматически сгенерировали код C++ из рабочих моделей. Итак, мой вопрос здесь, есть ли способ использовать внешний компилятор для кода, сгенерированного Rhapsody, например: Microsoft Visual Studio?

3 ответа

Rhapsody всегда использует внешний компилятор для компиляции кода (как с симуляцией, так и без), т.е. компилятор Rhapsody не поставляется, он работает с "адаптерами", которые вызывают внешние компиляторы. Уровень адаптера включает свойства, которые сообщают Rhapsody, как генерировать код для конкретного компилятора, например, Visual Studio, VxWorks, Cygwin/gcc. Когда вы генерируете make и запускаете код, Rhapsody создает как основной, так и make-файл, запускает make-файл для компиляции кода, а затем запускает.exe-файл. Ничто не мешает вам запускать компиляцию вне Rhapsody. Ключевым моментом является то, что он свяжет ваш код с кодом инфраструктуры адаптеров OxF для связанной среды сборки (это абстрагирует от таких понятий, как потоки, мьютексы и т. Д.). Посмотрите на вкладку Настройки для конфигурации, которую вы используете для сборки. В раскрывающемся списке Environment должна быть опция MSVC. Это Visual Studio. Примечание: при использовании опции MSVC вам также необходимо установить свойство, чтобы указать, какая версия. CPP_CG::MSVC::IDEVersion, т. Е. В службе Rhapsody разрешает то, что вам нужно, главное, чтобы Rhapsody проще было создавать make-файл, как это делается на этапе генерации кода. Это "стандартный" способ. Существует также интеграция с платформой, где Rhapsody создает файл проекта VS. Будет ли это работать, может зависеть от номеров версий и т. Д. Сначала я попробую стандартный управляемый моделями способ, который по сути является вызовом компилятора из командной строки.

Rhapsody генерирует make-файл для сборки и связывания вашего проекта с фреймворком Rhapsody. Я настоятельно рекомендую вам повторно использовать этот make-файл для внешней сборки проекта, а не пытаться воссоздать его снова в другом месте.

Взяв в качестве примера посудомоечную машину, откройте проект в среде Rhapsody IDE и "сделайте" проект. Обратите внимание, что в окне вывода выводится команда, использованная для построения проекта с использованием сгенерированного make-файла (EXE.mak) и уже существующего сценария (msvcmake.bat) для этой среды. Например:

"" C: \ ProgramData \ IBM \ Rational \ Rhapsody \ 8.4 \ Share "\ etc \ msvcmake.bat EXE.mak build x86 VC10"

Вы можете использовать аналогичную команду для сборки своего проекта в командной строке.

Откройте терминал и перейдите в каталог конфигурации проекта посудомоечной машины (C:\ProgramData\IBM\Rational\Rhapsody\8.4\Samples\CppSamples\Dishwasher\EXE\Host)

Вот модифицированная версия той же команды для перестройки проекта:

C: \ ProgramData \ IBM \ Rational \ Rhapsody \ 8.4 \ Share \ etc \ msvcmake.bat EXE.mak перестроить x86 VC10

Для справки:

Команду сборки проекта для каждой среды можно найти в свойстве:

CPP_CG:[Среда]:InvokeMake

Команда сборки фреймворка указывается в свойстве:

CPP_CG:[Среда]:buildFrameworkCommand

В некоторых случаях вы можете скопировать библиотеки фреймворка из

C:\ProgramData\IBM\Rational\Rhapsody\8.4\Share\LangCpp\lib

Если вы хотите переместить все в новое место, вы должны соблюдать зависимости make-файла и сохранить структуру каталогов в новом месте.

Например, можно скопировать исходные коды Framework и Project вместе с их make-файлами на удаленную цель и построить его там.

Чтобы запустить код Rhapsody для цели, вам также необходимо скомпилировать инфраструктуру для этой цели. Для этого вам нужно написать адаптер для этой цели. В папках Rhapsody есть PDF-файл, в котором описаны все шаги.

Для Visual Studio или Cygwin уже есть готовый фреймворк. Вы можете выбрать его в компоненте.

Если вы просто хотите использовать свой сгенерированный код в Visual Studio, щелкните правой кнопкой мыши на вашей конфигурации и выберите "изменить на xxx ...". Это создает проект Visual Studio или Eclipse для вас со всеми исходниками и Makefile.

Похоже, у вас возникли вопросы об уровне адаптации Rhapsody RTOS. Общие сведения: при создании кода Rhapsody используется модель на основе модели, которая позволяет создавать независимую от платформы модель отдельно от модели, специфичной для платформы (если вы определяете платформу как встроенную цель C++). Если вы используете Rhapsody Developer для генерации кода, такого как конечные автоматы, то очереди событий для событий сохраняются в потоке, и вы можете использовать такие понятия UML2, как порты и интерфейсы, и пометить составной класс как активный (чтобы он работал в потоке). Реализация кода, который обеспечивает такие аспекты, как потоки (и таймеры), обеспечивается на уровне адаптера OxF (Object-eXecution Framework) (набор классов, которые предоставляют специальный код RTOS). Rhapsody имеет набор RTOS, который он поддерживает "из коробки", но клиент может создать новый слой адаптера для новой цели и добавить его в раскрывающийся список "Настройки" (это также включает указание свойств, чтобы сообщить Rhapsody, как построить / сделать для ОСРВ). Уровень адаптера - это библиотека, которая статически связана с кодом приложения, и, следовательно, вам необходимо создать эту библиотеку, а также предоставить код. См. Введение в Rhapsody Framework (OxF) по адресу: https://www.ibm.com/developerworks/community/groups/service/html/communityview?communityUuid=969f1342-9137-406d-81f5-7f082a7c646d. Это предполагает, что вы используете полный OxF. Существуют способы, которые вы можете создать без RTOS (минимальный OxF или использование инструментария Willert), которые могут быть применимы в определенных областях (ограниченные микроконтроллеры и т. Д.), Я не знаю слишком много о вашей среде, чтобы знать, возможно ли это. Первый вопрос заключается в том, поддерживает ли цель полный шаблон RTOS или необходим минимальный подход RTOS. Последнее ограничивает то, как вы моделируете, поэтому вы должны начинать с знания заранее.

Другие вопросы по тегам