ПрагмаСофтСтудия 2.1

Общие сведения о генерации программного кода

Для своей работы генератор программного кода (кодогенератор) использует информацию о проекте и тестовых сценариях, которые в данный момент загружены в САПР. Он генерирует набор текстовых файлов *.c, содержащих программный код, созданный с использованием языка программирования C.

Изначально модель кодогенерации разрабатывалась таким образом, чтобы не зависеть от того программного и аппаратного окружения, в котором в последующем придётся работать создаваемому программному обеспечению (ПО). Это может быть, например, персональный компьютер или блок системы индикации. Генерируемые файлы повторяют логику и математику, заложенную в проект САПР, а также могут содержать программный код подыгрыша, созданный по выбранному пользователем тестовому сценарию . При этом они не выполняют прорисовки и не занимаются вычислением многих арифметических и тригонометрических функций. Для этого они лишь вызывают функции, прототипы которых описаны в файле PSSCodeGen.h. Таким образом, генерируемые файлы являются лишь частью от того набора файлов, которые необходимо иметь, чтобы скомпилировать конечное ПО. Вторая часть создаётся вручную и обеспечивает привязку абстрактной первой части к аппаратуре и программной среде. При этом файл PSSCodeGen.h является связующим для двух частей и обеспечивает их совместную компиляцию. Кроме тел функций, описанных в файле PSSCodeGen.h, вторая часть исходников повторяет палитры профиля проекта, создавая для своей работы массивы с аналогичными значениями. Она также производит всю необходимую программно-аппаратную инициализацию и вызывает функции PssOnImitation, PssOnPaint и PssOnExtraction, создаваемые кодогенерацией.

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

В идеале исходники серверной части для данной конкретной аппаратуры создаются один раз и после их тестирования и отладки уже не изменяются. Это означает, что разработчик аппаратуры, зная все нюансы её архитектуры, может создать профиль проекта, ограничивающий пользователя САПР возможностями его аппаратуры, а также набор файлов, необходимых для стыковки с генерируемыми САПР программными файлами. В последующем данный набор файлов и файл профиля проекта поставляется вместе с аппаратурой её покупателю. Тот в свою очередь, используя переданный профиль, разрабатывает в САПР проекты, выполняет кодогенерацию и компилирует полученные файлы с набором файлов сервера, что в итоге даёт нужное аппаратуре ПО. Такая организация полностью или практически полностью избавляет пользователя от необходимости программировать что-либо и позволяет сосредоточиться непосредственно на разработке индикационных кадров.

Генерируемые программные файлы, их взаимосвязь и место в конечном ПО показаны на следующем рисунке.

Описание генерируемых программных файлов приведено в следующей таблице.

PSSInputVar.c

PSSInputVar.h

Файлы содержат объявления переменных, соответствующих входным переменным проекта.

PSSImitation.c

PSSImitation.h

В файлах PSSImitation.h и PSSImitation.c находится объявление и тело функции PssOnImitation. Функция содержит код инициализации входных переменных , объявленных в файле PSSInputVar.h. Если для переменной задан подыгрыш, то его программный код будет вставлен перед функцией.

PSSOutputVar.c

PSSOutputVar.h

Файлы содержат объявления переменных, соответствующих выходным переменным проекта.

PSSExtraction.c

PSSExtraction.h

В файлах PSSExtraction.h и PSSExtraction.c находится объявление и тело функции PssOnExtraction. При необходимости функция может быть вызвана сервером после функции PssOnPaint для сохранения результатов её выполнения в память аппаратуры.

PSSPaint.c

PSSPaint.h

В файлах PSSPaint.h и PSSPaint.c находится объявление и тело функции PssOnPaint. Функция повторяет структуру и содержит всю ту логику и математику, которая заложена в дерево окна Прорисовка. Дополнительно в файл PSSPaint.c может помещаться реализация функций вычисления и прорисовки .

PSSCodeGen.h

Файл содержит типы данных и прототипы функций, которые могут использоваться в программном коде файла PSSPaint.c. Тела этих функций должны быть дополнительно внешне реализованы с учётом возможностей среды, в которой создаваемому программному коду придётся в дальнейшем работать.

Кодогенератор имеет режим, облегчающий создание сервера. Это так называемый режим внешней привязки. Он включается в настройках кодогенератора и приводит к формированию двух дополнительных файлов PSSCodeGenImpl.c и PSSCodeGenImpl.h. Кодогенератор сам создаёт в них тела всех функций, объявленных в файле PSSCodeGen.h, а также нужные для их работы массивы со значениями палитр профиля проекта.

Привязкой режим называется потому, что в зависимости от выбранной в настройках расширения исходной конфигурации, в файлах PSSCodeGenImpl.c и PSSCodeGenImpl.h формируется программный код максимально адаптированный под определённую аппаратно-программную платформу. Графическая прорисовка и вычисление математических функций при этом выполняются средствами доступными и максимально быстрыми для данной платформы. В целом, для прорисовки примитивов используются различные версии библиотеки OpenGL, а математические функции и функции работы со строками реализуются средствами языка C или перенаправляются в функции стандартной библиотеки языка C.

Работа с конфигурациями кодогенератора будет подробна рассмотрена в следующей статье.

Режим привязки изменяет взаимодействие клиента с сервером. Сервер перестаёт ссылаться на файл PSSCodeGen.h и начинает взаимодействовать с файлом PSSCodeGenImpl.h. Это меняет представленную выше структурную схему на следующую.

Основное назначение кодогенерации - это создание трёх функций, которые могут быть вызваны сервером в тот момент, когда ему это необходимо.

Сервер организует цикл внутри себя, на каждой итерации которого, вначале для отработки подыгрыша, может быть вызвана функция PssOnImitation. Далее, он вызывает функцию PssOnPaint. Она производит вычисления и при необходимости выполняет прорисовку графики. В заключение сервер может вызвать функцию PssOnExtraction для сохранения результатов отработки функции PssOnPaint в память аппаратуры.

В следующей статье мы рассмотрим настройку кодогенератора, структуру его интерфейса и управление конфигурациями.

 

 

Авионика и Софт

forum.aviosoft.ru

 

сборка: 706