Russian Language English Language

4 Модели и методы для обоснования выбора состава аппаратных средств ВС

4.1 Генерация промежуточного кода при компиляции по для встраиваемых систем


Экспресс информация

Редколлегия журнала

Подписка на новости

Гостевая книга

Предоставление материалов

Письмо в редакцию

На начало


2004, Номер1 ( 4)



Place for sale
А

Генерация промежуточного кода при компиляции ПО для встраиваемых систем

 

 

А.А. Белых, асп.; рук. Ю.В. Готовский, к. т. н., проф.

 

 

(МЭИ (Технический университет) г. Москва Россия)

 

 

 

 

 

   В настоящее время все чаще во встраиваемых системах применяются микроконтроллеры для решения огромного ряда задач. В то время как применение микроконтроллеров позволяет перенести основные затраты на разработку из аппаратной в программную область, сами микроконтроллеры (МК) различаются по своей функциональности. То есть, для решения разных задач (даже одной компании-разработчика или одного отдела) могут выбираться (использоваться) разные микроконтроллеры (одного или разных производителей, одного или разных семейств). Сами МК могут быть одной архитектуры, но с различной периферией; разной организацией памяти; и наконец, различной архитектурой процессора.

В то же время, в рамках одного отдела или компании важно повторное использование однажды реализованного программного кода. Для разрешения этих, в принципе, противоречащих друг другу требований было принято решение использовать единую систему команд («универсальный ассемблер» – ASU) для рассматриваемой группы МК. Сами компоненты должны быть реализованы (или перекомпилированы) на этом «универсальном» языке.

Возникает вопрос предварительной компиляции программы, реализованной на ASU на язык ASM. Вообще, на начальной стадии компиляции исходная программа транслируется в промежуточное представление, из которого на заключительной стадии генерируется целевой код. В нашем случае, при компиляции asuasm, необходимы две стадии компиляции – 1) транслирование набора инструкций «универсального ассемблера» в набор инструкций целевого ассемблера (выбранного для реализации на конкретном МК); 2) компиляция сформированного кода программы на языке ассемблер i поставляемым производителем компилятором в машинный код. Заметим, преимущество генерации промежуточного кода при компиляции .asu заключено в самом языке ASU – упрощение переноса на другие целевые машины. Отметим, что все макросы языка должны быть разрешены (подставлены) перед компиляцией. Кроме того, должна быть построена таблица символьных имен (переменных) и распределение их в памяти МК. В виду того, что распределение памяти в МК может различаться существенных образом, в ASU необходимо ввести типы переменных:

·        int8 – 8-бит целое значение (размещается в памяти данных МК);

·        int16 – 16-бит целое значение (размещается в памяти данных МК)

·        float – вещественное значение (размещается в памяти данных МК)

·        REG int8/int16/float – соответствующее значение (при возможности размещается в регистровой памяти МК или, если регистровая память исчерпана/отсутствует, помещается в память данных).

При трансляции каждая инструкция (asu) ищется в БД языков и заменяется на набор инструкций (asm) целевого языка. Таким образом, роль промежуточного языка играет сам универсальный язык  ASU.