Компиляторы
для микроконтроллеров PIC
В этой статье будет
рассказано о тех компиляторах с языка С, которые используются для
создания исполняемого кода, применяемого в микроконтроллерах фирмы
Microchip. Здесь будут рассмотрены их характеристики, возможности и
способность интегрирования в среду разработки MPLAB IDE. Кратко будут
описаны их характерные особенности.
Перед тем, как рассказать о компиляторах хотелось бы немного прояснить
ситуацию по поводу стандартов на язык С, т.к. далее по тексту часто
будет встречаться словосочетание ANSI/ISO. Сам язык С был создан
Дэнисом Ритчи в начале 1970 года. В 1989 году Американским национальным
институтом стандартов (ANSI) был принят стандарт на язык С. Кроме
этого, этот стандарт был принят и Международной организацией стандартов
(ISO). Эта версия языка называется С89. В 1999 году была предпринята
вторая попытка по стандартизации языка С, он называется С99. Этот новый
стандарт имеет ряд усовершенствований и нескольких новых средств,
заимствованных из языка С++. В данной статье если говорится о поддержке
компилятором стандарта ANSI/ISO подразумевается первый стандарт,
принятый в 1989 г.
В стандарте С89 определены пять основных типов данных:
- Char
- символьный;
- Int
- целочисленный;
- Float
- с плавающей запятой;
- Double
- с плавающей запятой двойной точности;
- Void
- пустой.
Если с типом данных char все
просто - он одинаков во всех компиляторах и занимает размер в один
байт, то со следующими типами данных int, float, double возникают
некоторые трудности. В зависимости от компилятора, размер памяти,
занимаемый этими типами, сильно зависит от самого компилятора и его
настроек. Это, с одной стороны позволяет гибко настраивать размер
переменных, экономя память данных и программ, с другой стороны, при
компиляции программы на другом компиляторе могут возникнуть некоторые
трудности.
При разработке программы часто требуются переменные, значение которых
может принимать значение либо 0, либо 1, поэтому было бы
расточительно использовать для них тип данных char. Поэтому практически
все современные компиляторы поддерживают новый тип данных bit. Этот тип
занимает всего один бит в байте, т.е. в одном байте можно будет
сохранять значение 8-ми переменных, что значительно будет экономить
память, если таких переменных будет более одной.
В комплект поставки среды разработки MPLAB IDE входит бесплатный
компилятор с языка ассемблера в машинный код микроконтроллера MPASM.
Это дает возможность сразу после установки MPLAB IDE разрабатывать
программы на ассемблере, компилировать и отлаживать их в единой среде
разработки, а потом при наличии программатора, поддерживаемого средой,
сразу и запрограммировать микроконтроллер.
Ассемблер имеет смысл использовать, если программа должна быть
маленького размера или необходимо обеспечить максимально возможное
быстродействие. Единая среда разработки позволяет значительно ускорить
разработку программ, но применение ассемблера значительно увеличивает
время, требуемое на разработку, поэтому применение языков высокого
уровня позволяет значительно ускорить время разработки, а если язык
программирования поддерживается средой разработки, то имеется
возможность применять такие средства разработки как отладка, симуляция
и программирование. Все это ведет к ускорению разработки и что более
важно удобству работы в единой среде. Далее будут рассмотрены наиболее
часто используемые компиляторы, найденные в интернете для
микроконтроллеров фирмы Microchip.
IAR
C Compiler
Этот коммерческий компилятор производит впечатление громадного монстра.
Один только список поддерживаемых микроконтроллеров вызывает уважение:
Atmel, Freescale Semiconductor, Maxim/Dallas, Microchip, National
Semiconductor, NEC, Renesas Technology, Samsung, Texas Instruments,
Zilog. Для микроконтроллеров фирмы Microchip компилятор доступен для
серии PIC18. Подробности о поддерживаемых микроконтроллерах можно
узнать на официальном сайте фирмы [1].
Эта фирма производит среду разработки IAR Embedded Workbench,
позволяющую производить написание программ на С, С++ и ассемблере. В
состав среды разработки входит также линкер, менеджер управления
библиотекой подпрограмм, менеджер управления проектами и C-SPY
отладчик. Компилятор имеет средства для оптимизации выходного кода по
скорости выполнения и по размеру сгенерированного кода. Среда
разработки предназначена для работы в Windows 98SE/ME/NT4/2000/XP. Если
есть необходимость применения компилятора совместно с MPLAB IDE, на
сайте [1]
можно найти для нее плагин. Компилятор поддерживает стандарт ISO/ANSI
C/C++. Для С++ компилятора поддерживается стандартная библиотека
шаблонов STL. В среде разработки можно создавать несколько проектов под
единое рабочее место, как в Visual C++. Список поддерживаемых типов
данных можно посмотреть в таблице 1.
Тип
данных
|
Размер
бит
|
bool
|
8
|
char
|
8
|
short
|
16
|
int
|
16
|
long
|
32
|
float
|
32
|
double
|
32
|
long double
|
32
|
Демонстрационную
версию среды разработки можно скачать с официального сайта [1],
она будет работать в течении 30 дней, после этого потребуется ввести
регистрационный ключ для продолжения работы. Работа компилятора имеет
некоторые ограничения: в выходной код нельзя включить библиотеку
времени выполнения, не поддерживает работу MISRA C, а также нельзя
обновить до полной версии. И разумеется нельзя пользоваться официальной
технической поддержкой.
Hi-Tech
PICC Compiler
Следующий рассматриваемый компилятор - это Hi-Tech PICC [2].
Также как и IAR, он может компилировать код под микроконтроллеры разных
фирм производителей. Список поддерживаемых микроконтроллеров можно
узнать на официальном сайте [2].
Компилятор выпускается под несколько операционных систем, кроме Windows
есть компиляторы под Linux и Mac OS X. Также как и компилятор от IAR,
это коммерческий компилятор, но есть и облегченная версия доступная для
скачивания с сайта [3]
- HI-TECH PICC Lite. Компилятор имеет свою среду разработки HPDPIC
работающую под MS-DOS. Среда разработки позволяет писать, компилировать
и отлаживать программы. Имеется несколько дополнительных утилит:
калькулятор - конвертер чисел, таблица символов ASCII. Сам
компилятор поддерживает несколько видов оптимизаций: глобальная,
ассемблерная и локальная. При использовании глобальной оптимизации
можно выставить ее уровень от 1 до 9 в порядке ее увеличения.
Сгенерированный код можно сохранить в виде нескольких форматов:
Motorola S, Intel HEX, бинарном виде, UBROF, Tektronix HEX, Intel
OMF-51, американский тип HEX, Bytecraft COD, расширенный OMF-51, либо в
виде библиотеки.
Для интегрирования в среду разработки MPLAB IDE требуется специальный
плагин, который можно найти на сайте фирмы Microchip [4].
Вместе с самим компилятором поставляется несколько примеров для работы
со встроенным АЦП, есть пример bootloader`a для PIC16F87x, работа с
I2C, прерываниями, LCD, несколько простых примеров типа метронома,
демонстрационная программа для PICDEM 2 PLUS DEMO BOARD, работа с USART
и т.д. Компилятор поддерживает классические функции С. Список
поддерживаемых типов данных можно посмотреть в таблице 2.
Тип
данных
|
Размер
бит
|
bit
|
1
|
char
|
8
|
short
|
16
|
int
|
16
|
long
|
32
|
float
|
24
|
double
|
24 - 32
|
На момент написания статьи
доступна бесплатная версия Hi-Tech PICC Lite v.9.50PL2, поддерживающая
следующие микроконтроллеры: PIC16C84, PIC16F84, PIC16F84A, PIC16F627,
PIC16F627A, PIC12F629, PIC12F675, PIC16F684, PIC16F877, PIC16F877A,
PIC16F690. Бесплатная версия имеет некоторые ограничения: память
программ используется не полностью, не предоставляются исходные тексты
библиотек, не поддерживается работа с переменными типа float и 32-х
битных переменных типа long. Техническая поддержка осуществляется, но
ее приоритет будет самым низким.
CCS C Compiler
Следующий рассматриваемый компилятор для микроконтроллеров Microchip
это CCS C Compiler [5].
Это также коммерческий компилятор, имеющий свою среду разработки CCS
IDE. Он поддерживает большое количество микроконтроллеров серии
PICmicro, а также микроконтроллеры фирмы Scenix. Компилятор состоит из
нескольких модулей, поддерживающих свои семейства микроконтроллеров:
для 12 - разрядных микроконтроллеров используется PCB, для 14 -
разрядных - PCM, для 16 и 18 - разрядных - PCH. Выбор соответствующего
компилятора происходит при компиляции, указанием соответствующих
параметров для файла CCSC.exe. Интеграция в среду разработки MPLAB IDE
происходит при использовании специального плагина, доступного на
официальном сайте фирмы [5].
Кроме коммерческого компилятора доступна для скачивания демо-версия,
имеющая ограничения на работу в течение 30 дней. Она поддерживает
работу с несколькими микроконтроллерами: PIC16F877, PIC16C544 и
PIC18F458. Размер получаемого кода ограничен в 2 Кб. Кроме этого не
работают некоторые функции: нельзя воспользоваться просмотром
Datasheets из программы, нет возможности редактировать базу данных
микроконтроллеров, hex - преобразователь работает при использовании
отладчика, монитор RS-232 не работает.
Немного остановлюсь на самой среде разработки т.к. она заслуживает
небольшого описания. Сама среда разработки поддерживает, как и
положено, подсветку синтаксиса С и ассемблера, кроме этого имеется
несколько интересных возможностей самой среды разработки. Очень хорошо
реализован мастер настройки проекта PIC Wizard. При его использовании
можно досконально настроить параметры выбранного микроконтроллера и
подключить необходимые файлы: кроме указания частоты, на которой будет
он работать, можно настроить использование всех модулей, имеющихся в
нем: USART, I2C, SPI, работу всех таймеров, в том числе и сторожевого
WDT, CCP, кроме этого можно сконфигурировать каждую ногу
микроконтроллера, настроить обработчики используемых прерываний, есть
возможность использовать стандартные драйвера для доступа к некоторым
внешним микросхемам и интерфейсам: DS1302, LTC1298, NJU6355, PCF8570,
2401, 2402, 2404, 2408, 2416, 2432, 2465, 9346, 9356, 9366, LCD, X10
интерфейс, обслуживание клавиатуры 3*4 и т.д.. Всего 148 файлов
драйверов! В этой среде имеется возможность настроить многие мелкие, но
удобные функции: вызов Datasheets на микроконтроллер, с которым сейчас
работаешь; настраивать любой из поддерживаемых компилятором
микроконтроллеров; hex - преобразователь, позволяет производить
взаимные преобразования между следующими числами: unsigned, signed,
hex, float; сравнивать файлы; есть монитор RS-232, позволяющий
отправлять и принимать данные по последовательному интерфейсу, а также
анализировать состояние интерфейсных сигналов: DSR, DCD, CTS, TXD, RXD,
RTS, DTR; есть довольно неплохой дизассемблер. Имеется большое
количество примеров (105 файлов!) для использования в своих проектах.
Программного симулятора нет, есть только поддержка нескольких типов
внутрисхемных отладчиков: ICD-S, ICD-S3V, ICD-20, ICD-S40, ICD-U,
ICD-U40. Отсутствие программного симулятора очень сильно портит
впечатление о этом компиляторе, но неплохим решением в данном случае
может быть использование среды разработки CCS IDE для создания проекта
и настройки всех необходимых для работы модулей и подключения файлов,
используемых в проекте. После этого, используя MPLAB IDE,
создаем проект и включаем в него, сохраненные до этого файлы, в новый
проект. Не стоит забывать, что в проекте надо выбрать в качестве
компилятора CCS C Compiler. После этого можно спокойно работать над
проектом дальше как обычно. Это конечно не самый оптимальный вариант,
но думаю, что использование встроенного мастера проектов оправдывает
все эти сложности. Из всего вышесказанного можно сделать вывод, что
разработчики подходили с умом к разработке компилятора.
Кроме стандартных для С функций есть много специфичных для данного
компилятора: это поддержка RS-232, I2C, работа с АЦП, управление
состоянием портов ввода/вывода, работа с CCP, несколько видов задержек,
управления состоянием микроконтроллера и т.д. Список поддерживаемых
типов данных можно посмотреть в таблице 3.
Тип
данных
|
Размер
бит
|
int1
|
1
|
int8
|
8
|
int16
|
16
|
int32
|
32
|
char
|
8
|
float
|
32
|
short
|
1
|
Int
|
8
|
long
|
16
|
double
|
Не
поддерживается
|
Здесь стоит отметить на
богатый выбор переменных, хранящих целые числа - их целых 4 типа, тип
shot занимает размер в один бит. Стоит отметить, что тип данных с
плавающей точкой double не поддерживается компилятором.
CC5X
С compiler
Следующий рассматриваемый компилятор создан в Германии - это CC5x [7].
Как и все предыдущие компиляторы он является платным. Собственной среды
разработки он не имеет, интегрируется очень просто в MPLAB IDE, для
работы с ним необходимо указать путь расположения файла компилятора.
Доступ к настройкам параметров компиляции осуществляется с помощью
командной строки, поддерживает следующие версии Windows:
98SE/ME/NT4/2000/XP. Для работы в Linux придется использовать эмулятор
dosemu, запускать MS-DOS и после этого использовать компилятор как
обычно. Поддерживает 12, 14, 16 битные версии микроконтроллеров PIC,
есть возможно компилировать программы для 24-битных микроконтроллеров
dsPIC. Кроме микроконтроллеров Microchip, поддерживает микроконтроллеры
Scenix SX и Holtek HT.
Кроме коммерческой версии есть бесплатная версия с некоторыми
ограничениями: поддерживаются только 1024 инструкции в любом модуле С,
некоторые модули нельзя будет использовать при компиляции программы,
размер переменных типа signed, unsigned ограничен 16 битами,
переменными типа float 24 битами, при генерации генерируется компактный
код, но полная оптимизация не поддерживается. Кроме этого
соответственно никакая техническая поддержка не осуществляется.
С самим компилятором поставляются несколько файлов для работы с
интерфейсами I2C, USART, пример для работы с прерываниями, пример
деления 16 битной переменной на 8 битную выполняющуюся за 97 мкс, при
частоте работы микроконтроллера в 4 МГц. Единственным плюсом этого
компилятора является хорошая поддержка операций с плавающей запятой.
Список поддерживаемых типов данных коммерческого компилятора можно
посмотреть в таблице 4.
Тип
данных
|
Размер
бит
|
bit
|
1
|
char
|
8
|
int
|
8
|
Int16
|
16
|
Int24
|
24
|
Int32
|
32
|
Float16
|
16
|
float, float24
|
24
|
double, float32
|
32
|
Также как и CCS C Compiler
здесь доступен богатый выбор целых переменных и переменных с плавающей
точкой.
CC8E
C Compiler
Этот компилятор [8]
той же фирмы, что и CC5x, но предназначен для использования совместно с
микроконтроллерами PIC18. Также как и предыдущий компилятор имеет две
версии: коммерческую и бесплатную. Бесплатная версия имеет следующие
ограничения: поддерживаются только 1024 инструкции в любом модуле С,
размер используемых переменных может быть 1, 8, 16 и 24 бита,
поддерживается полная оптимизация кода. Техническая поддержка не
осуществляется.
Установка в MPLAB IDE осуществляется также как и CC5x. С самим
компилятором поставляется несколько демонстрационных файлов. Из
возможностей компилятора стоит отметить полную поддержку всех
инструкций микроконтроллеров старшего семейства, поддержку таблиц и
структур более 256 байт, поддержку до 16 банков RAM, генерирует
компактный код, поддерживает оптимизацию. Список поддерживаемых типов
данных можно посмотреть в таблице 5.
Тип
данных
|
Размер
бит
|
bit
|
1
|
char
|
8
|
int
|
8
|
Int16
|
16
|
Int24
|
24
|
Int32
|
32
|
Float16
|
16
|
float, float24
|
24
|
double, float32
|
32
|
MPC
C Compiler
Следующий коммерческий компилятор - это MPC C Compiler [9]
фирмы Byte Craft Limited. Этот компилятор поддерживает несколько типов
микроконтроллеров: MC68HC08, MC68HC05, Scenix, National COP8, Cypress
M8, Freescale eTPU, Microchip PIC12/14/16/17. Компилятор имеет свою
среду разработки Byte Craft IDE. Среда разработки имеет классический
интерфейс, возможность подсветки синтаксиса и компиляции, но не имеет
своего симулятора, но есть возможность использовать сторонние
эмуляторы: Microchip PICMASTER, ICE 2000, Advanced Transdata,
Tech-Tools Mathias Clearview. Для интеграции в MPLAB IDE используется
специальный плагин [10],
при компиляции из-под MPLAB появляется возможность использовать штатный
отладчик MPLAB SIM.
Кроме коммерческой версии компилятора существует демонстрационная
версия, имеющая некоторые ограничения в работе: размер генерируемого
кода ограничен в 2 Кб, библиотечные С файлы не включаются в проект,
генерируется только ассемблерный листинг. Компилятор поддерживает
классический стандарт языка ISO/ANSI C. Также он поддерживает
оптимизацию кода, при умножении двух 16 - ти битных числа включается
поддержка 32 битного результата. Из дополнительных возможностей стоит
отметить поддержку сжатия 7-ми битных символов ASCII, позволяющее
уменьшить размер потребляемой памяти. Сам компилятор при помощи
директив LOCAL и SPECIAL поддерживает расширенное управление памятью
для микроконтроллеров старшего семейства. Директива LOCAL позволяет
максимально использовать память данных RAM для распределения локальных
переменных, дающее возможность повторно использовать имеющуюся память
RAM. Директива SPECIAL дает возможность распределять переменные в любом
виде памяти, внешней или внутренней. Список поддерживаемых типов данных
можно посмотреть в таблице 6.
Тип
данных
|
Размер
бит
|
_Bol
|
1
|
bits
|
8
|
char
|
8
|
int
|
8
|
int8
|
8
|
int16
|
16
|
int24
|
24
|
int32
|
32
|
short
|
8
|
long
|
16
|
float
|
32
|
float24
|
24
|
float32
|
32
|
При использовании в программе
переменной типа int можно определить ее размер от 8 или 32 бит. Хорошо
поддерживаются числа с плавающей точкой - их размер можно выбрать от 24
до 32 бит.
Microchip
C17, C18, C30
Следующие рассматриваемые компиляторы разработаны самим разработчиком
микроконтроллеров фирмой Microchip [4].
Компиляторы MPLAB C17, С18, С30 разработаны с поддержкой стандарта
ISO/ANSI C. Компилятор С17 предназначен для создания программ для
микроконтроллеров семейства PIC17CXXX. Компилятор С18 - для PIC18CXXX,
С30 - для dsPIC. Каждый из этих компиляторов легко интегрируются в
среду разработки Microchip MPLAB IDE, поддерживают отладку при помощи
MPLAB SIM и MPLAB ICE. Библиотека, включенная в состав компилятора С17
и С18, содержит код для работы со всеми имеющимися на борту
микроконтроллера модулями: АЦП, SPI, I2C, USART, CCP, LCD, таймерами,
прерываниями, управление памятью и строками и т.д. Компиляторы С17, С18
запускаются с командной строки, поддерживаемые операционные системы:
MS-DOS, Windows 95, Windows NT. О возможности работы компиляторов под
другими операционными системами информации нет, скорее всего, эти
компиляторы могут работать там, где может работать сама среда
разработки MPLAB IDE. Компилятор С30 позволяет эффективно использовать
основные регистры, поддерживает сложные способы адресации, есть
поддержка много разрядных сдвиговых операций и эффективное
использование сравнения для signed/unsigned переменных.
Демонстрационные версии компиляторов доступны на официальном сайте
фирмы [4],
время работы ограничено 60-ю днями. Список поддерживаемых типов данных
компилятора С17 и С18 можно посмотреть в таблицах.
Microchip
C17 C Compiler
Тип
данных
|
Размер
бит
|
char
|
8
|
short
|
16
|
int
|
16
|
long
|
32
|
Float
|
40
|
Microchip
C18 C Compiler
Тип
данных
|
Размер
бит
|
char
|
8
|
short
|
16
|
int
|
16
|
long
|
32
|
short long
|
24
|
float
|
32
|
double
|
32
|
SourceBoost
Следующий рассматриваемый компилятор или лучше сказать, группа
компиляторов, разработана одним из наших соотечественников Павлом
Барановым [11].
Эта программа представляет собой коммерческую среду разработки для
нескольких языков программирования: С, С++, Pascal, Basic и Ассемблер.
Данная среда позволяет разрабатывать код для микроконтроллеров фирмы
Microchip PIC и Ubicom Scenix. Все это разнообразие языков
программирования объединяется при помощи единой среды разработки,
позволяющей выбирать язык программирования, писать программу и
отлаживать ее. Для программирования микроконтроллера можно подключить
внешний программатор, расположение которого задается в настройках.
Интерфейс программы оформлен в современном виде, есть подсветка
синтаксиса, позволяющая настроить выделение элементов под себя, есть
неплохая программа, позволяющая связываться по интерфейсу RS-232. Среда
разработки поддерживает плагины, что я считаю немаловажным. Думаю, все
знают среду разработки MPLAB IDE, и думаю, у многих программистов
возникало желание исправить или добавить что-то свое в среду
разработки. В данном случае это можно сделать своими руками, т.к.
примеры плагинов представлены в папке SourceBoost\plugin_examples\.
Имеется возможность использовать компилятор BoostC C со средой
разработки MPLAB IDE. Для этого в папке SourceBoost\mplab\ находится
описание и необходимые файлы для интеграции со средой. Список
поддерживаемых типов данных можно посмотреть в таблице 9.
Тип
данных
|
Размер
бит
|
Bit
|
1
|
Bool
|
1
|
char
|
8
|
short
|
16
|
int
|
16
|
long
|
32
|
Кроме коммерческой версии
программы есть и демонстрационная, имеющая некоторые ограничения: время
работы ограничено 15 днями, размер генерируемого кода ограничен в 2 Кб,
в памяти данных будет использоваться только 2 банка RAM, поддерживаются
всего несколько микроконтроллеров: PIC16F628, PIC16F84, PIC16F877,
PIC18F242.
SDCC
Следующий компилятор в рассматриваемом обзоре распространяется с
открытым исходным текстом, т.е. это бесплатный компилятор. Найти его
можно по адресу [12].
Данный компилятор разработан для 8-ми битных микроконтроллеров. Список
поддерживаемых микроконтроллеров достаточно велик для бесплатного
проекта: микроконтроллеры на основе ядра MSC51, DS80C390, HC08, Z80,
Microchip PIC, Atmel AVR. Огорчает только то, что микроконтроллеры PIC
не поддерживаются в полном объеме: при компиляции генерируется
ассемблерный листинг, который можно дальше компилировать при помощи
стандартного ассемблера MPLAB MPASM.exe. Будем надеяться, что в
дальнейшем разработчики доведут до ума свой компилятор и добавят
полноценную генерацию исходного текста на С в выходной код PIC
микроконтроллера. На официальном сайте [12] можно найти документацию по
компилятору и скачать либо готовый файл установки, либо исходный текст
компилятора, который в дальнейшем можно откомпилировать под нужную
операционную систему. Таким образом, этот компилятор является кросс
платформенным средством разработки для 8-ми битных микроконтроллеров,
он также поддерживает работу с 14 и 16 разрядными
PIC-микроконтроллерами среднего и старшего семейства. Своей среды
разработки он не имеет, поэтому компиляция происходит из-под командной
строки. Компилятор также имеет возможность оптимизировать генерируемый
код.
Список поддерживаемых микроконтроллеров, рассмотренных здесь, можно
увидеть в таблице.
Литература:
1.
Web сайт IAR C Compiler www.iar.com.
2.
Web сайт Hi-Tech PICC Compiler http://www.htsoft.com/
3.
Демо версия Hi-Tech PICC Compiler http://www.htsoft.com/downloads/demos.php
4. Web
сайт Microchip www.microchip.com
5. Web
сайт CCS C Compiler http://www.ccsinfo.com/
6. Здесь
можно скачать CCS C Compiler http://www.ccsinfo.com/downloads.php
7. Здесь
можно скачать CC5x C Compiler http://www.bknd.com/cc5x/index.shtml
8. Здесь
можно скачать CC8е C Compiler http://www.bknd.com/cc8e/download.shtml
9. Web
сайт MPC C Compiler http://www.bytecraft.com/mpccaps.html
10. Плагин
для интегрирования в MPLAB IDE MPC C Compiler http://www.bytecraft.com/mplabconfnotes.html
11. Web
сайт SourceBoost http://www.sourceboost.com/
12. Web
сайт SDCC http://sdcc.sourceforge.net/
LEX_X