Компиляторы C/C++ для встроенных систем

176-1763940_c-clipart-favicon-c-c-programming-logo

Современная техника от радаров и видеокамер до спутников и подводных лодок оснащена микропроцессорами. В свою очередь, работа микропроцессоров невозможна без специального программного обеспечения (ПО), для создания которого требуются уникальные инструменты: средства разработки.

Компилятор зарегистрирован в реестре Российского ПО(№3368).

Основные сведения
Компания разрабатывает свой компилятор языков программирования C/C++ с 1999 года. К проекту привлекаются исключительно российские специалисты, на разработку потрачено в общей сложности более 170 человеколет. За это время созданы несколько пакетов средств разработки на базе компилятора UCC, которые используются в производственных процессах крупных промышленных компаний.
За счет архитектуры адаптация компилятора к новой платформе занимает около 2 месяцев в зависимости от сложности процессора и методов низкоуровневой оптимизации. Адаптация включает в себя настройку правил кодогенерации, в то время как основной исходный код компилятора остается неизменным.
Сферы применения:
  • оборонно-промышленный комплекс
  • системы безопасности и связи
  • авионика
  • приборо- и станкостроение
  • компьютерная периферия
Принципы работы
Первая фаза компиляции – Frontend позволяет произвести первичное преобразование программы в ее высокоуровневое древовидное представление. Одним из основных предназначений данного этапа компиляции является лексический и синтаксический разбор исходного кода и его абстрагирование от конкретного языка программирования. Компилятор поддерживает два Frontend: C и C++.
На следующем этапе проводится первичная оптимизация промежуточного представления.
Применяются алгоритмы, в целом независящие от целевой платформы, такие как вынесение подвыражений, распространение констант, упрощение циклов, комбинирование, адресная оптимизация и т.п. Впрочем, некоторые высокоуровневые оптимизации могут косвенно зависеть от целевой платформы, поэтому в таких оптимизациях организована обратная связь с кодогенерационной моделью.
В дальнейшем дерево промежуточного представления проходит фазу кодогенерации. На этой фазе применяются правила кодогенерационной модели, и дерево преобразуется к машиннозависимому виду. После этой фазы в узлах дерева остаются только инструкции и атрибуты, совместимые с целевым процессором. Над этим представлением проводятся дополнительные среднеуровневые оптимизации и распределение переменных на регистры/память в зависимости от настроек модели. Следующим этапом дерево промежуточного представления преобразуется в список ассемблерных инструкций целевой платформы, и над этим списком проводится серия низкоуровневых оптимизаций и прогон алгоритмов, заточенных под конкретную платформу.
В финале список ассемблерных инструкций преобразуется в ассемблерный файл, который передается на трансляцию целевому ассемблеру.
Установка Компилятора U
Компилятор U предназначен для использования в составе с другими инструментальными программами: ассемблером и компоновщиком (линкером). Для обеспечения стабильной и бесперебойной работы компилятора персональный компьютер, на котором будет эксплуатироваться Компилятор U, должен отвечать системным требованиям, указанным в сопроводительной документации. Компилятор U не требует отдельной установки. Для начала работы достаточно скопировать все файлы поставки в одну папку на целевом компьютере. Затем необходимо указать в командной строке или графическом интерфейсе IDE параметры для работы компилятора, указанные в сопроводительной документации.
Эксплуатация Компилятора U
Компилятор U предназначен для двух категорий пользователей: Оператор компилятора – пользователь, который отвечает за проведение компиляции по заранее настроенным правилам кодогенерации (CGM). Оператор должен иметь базовые знания программирования на языке C и знания разработки ПО в IDE. Программист компилятора – пользователь, который отвечает за настройку правил кодогенерационной модели (CGM) для адаптации компилятора под конечную платформу. Программист компилятора должен иметь базовые знания программирования на языках C/C++ и знания разработки ПО в IDE. А также базовые знания о принципах построения и структуре компиляторов. Алгоритм настройки компиляции и правил CGM указаны в сопроводительной документации.
Архитектура
Основная идея компилятора UCC — вынос платформо-специфичных настроек и алгоритмов в отдельный модуль. Этот модуль может быть гибко настроен при помощи описания правил кодогенерации на специализированном языке.
Для этого в компилятор введено понятие промежуточного высокоуровневого представления программы, состоящего из узлов: команд и атрибутов «псевдопроцессора». Этот процессор содержит универсальный набор команд, бесконечное количество регистров и памяти.
/
Процесс разработки
/
Лицензирование и стоимость использования Компилятора U
Лицензионный ключ не предусмотрен и не требуется для использования Компилятора U. Поддержание жизненного цикла компилятора осуществляется в рамках договора сопровождения, заключаемого между заказчиком и разработчиком. В рамках договора сопровождения разработчик берёт на себя обязательства по оказанию услуг по информационному обновлению и авторскому сопровождению программного продукта, которые включают в себя в том числе предоставление заказчику неисключительной лицензии на право пользования Компилятора U. Стоимость договора сопровождения определяется сроком его действия и объёмом услуг, предоставляемых разработчиком.
Хранение исходного кода компилятора U
Компилятор U разработан на языке программирования C++.
Для хранения исходного текста и объектного кода используется Microsoft Team Foundation Server 2017 Upd 3.1, работающий под управлением ОС Microsoft Windows Server 2016 Std.
Для компиляции исходного текста в объектный код используется компилятор Microsoft Visual C++ из состава Microsoft Visual Studio 2010. Место нахождения технических средств хранения исходного текста и объектного кода Компилятора U и компиляции исходного текста в объектный код Компилятора U: ООО «МИР», Россия, г. Санкт-Петербург, ул. Гельсингфорсская, д.4, БЦ «Красная Заря», офис 86.
История разработки компилятора
1999 – 2000
Разработка первой версии мультиплатформенного компилятора C.
2000-2001
Разработка C++ Frontend для мультиплатформенного компилятора.
2001-2002
Разработка модели для 32-битного стекового процессора шведской компании.
2002-2003
Полный рефакторинг компилятора – обновление платформы и алгоритмов. Разработка и поддержка.
2004-2005
кодогенерационной модели для узкоспециализированного многоядерного процессора PRIME (задачи печати) для южнокорейской компании.
2006-2010
Разработка и оптимизация модели процессора южнокорейской компании, предназначенного для медиаприложений. Разработка новых специализированных методов высокоуровневой и низкоуровневой оптимизации.
2008-2010
Разработка и оптимизация модели процессора южнокорейской компании, предназначенного для смарт-карт.
2011-2014
Поддержка и постоянные улучшения кодогенерационных моделей вышеуказанных процессоров.
2012-2013
Разработка кодогенерационной модели для узкоспециализированного 32-битного RISC-процессора для контроллеров SSD-дисков крупнейшего в мире производителя чипов.
Настоящее время
Поддержка обновлённых стандартов языка и реализация новых оптимизаций кода.