Компиляторы Си для микроконтроллеров PIC18. Часть 2

Компиляторы Си для микроконтроллеров PIC18. Часть 2

С. Емец, М. Еременко

Компиляторы Си для микроконтроллеров PIC18. Часть 2

Знакомство с компиляторами

Перед установкой можно ознакомиться с так называемыми "баг-листами" - списком обнаруженных и устран╦нных ошибок компилятора. Как правило, все производители сопровождают новую версию компилятора таким списком. По нему видно состояние программы и перспективы е╦ развития.

MICROCHIP MPLAB C18: ошибок много и в компиляторе, и в препроцессоре, и исправление многих достаточно критических ошибок занимает долгое время (если проследить историю развития). Использовать этот компилятор в большом проекте следует с осторожностью. Плохо работал компилятор MPLAB C для PIC16 и доверие к программной продукции Microchip было подорвано. Но следует отметить, что компилятор для PIC18 существенно переделан и имеет новый кодогенератор, отличный от MPLAB C.

HI-TECH PICC-18 COMPILER: очень хорошо зарекомендовал себя компилятор производства HI-TECH для PIC16, поэтому можно предположить, что для PIC18 будет не хуже. Так как отличия от стандарта ANSI в компиляторах HT-SOFT одинаковые, следует ожидать, что программы для PIC16 могут быть перенесены на PIC18 без значительных исправлений. Список ошибок (bugfixes.txt) в директории установки показывает, что ошибки устраняются, а отклонения от стандарта и ограничения не являются критическими. Есть версия, работающая в Linux.

CCS C: список ошибок найти не удалось, но какое-то представление об ограничениях может дать список сравнения компиляторов, привед╦нных на сайте CCS: Следует отметить, что в CCS C отсутствует отдельный ассемблер, линковщик. И единственным очевидным способом использования ассемблера в CCS C проекте мне кажется использование директив #asm/#endasm.

IAR C/EC++ Compiler for Microchip PIC18: данный компилятор не только С, но и урезанный вариант С++ (Embed-ded C++). По нашему мнению, предлагаемый вариант (диалект) С++ позволяет пользоваться более удобным С++ синтаксисом и использовать принципы ООП для разработки приложений для PIC18. В "баг-листе" сообщается, что обнаруженные и неисправленные ошибки отсутствуют.

Следующим важным элементом среды разработки С является наличие библиотек. Желательно иметь (как минимум) LIBC и MATH. Если эти библиотеки отсутствуют или реализованы частично, то такую среду нельзя рассматривать как полнофункциональную, и компилятор не является стандартным. Исходники библиотек существуют в свободном виде, и для нормального компилятора не должно вызывать проблемы собрать библиотеку и, если проект компилятора имеет серь╦зное развитие и поддержку, то написать свою версию библиотеки является следующим шагом, после того как компилятор (генератор кода) заработал.

По этому критерию, у MPLAB C18 отсутствует часть библиотеки вычислений с плавающей точкой и стандартная библиотека libc реализована не полностью. Поэтому при использовании этого компилятора перенос каких-либо алгоритмических вещей или разработка алгоритма, использующего вычисления с плавающей точкой, может вызвать дополнительные трудности. Следует заметить, что присутствуют библиотеки работы с периферией, включая внешний CAN-контроллер MCP2510. Даются исходные коды большинства библиотек.

В HT PICC18 реализована большая часть стандартных библиотек. То есть этот компилятор способен компилировать алгоритмы, использующие стандартные С-функции, с минимальными исправлениями. Для работы с периферийными устройствами в составе HITIDE предлагаются примеры.

Список стандартных функций, реализованных в ССS С, уступает HT-PICC. Имеется большое количество примеров использования и библиотека работы с периферией (так называемые build-in функции). По-видимому эти функции реализованы не как библиотека, а как часть компилятора. Найти библиотеки в CCS C нам не удалось. Учитывая отсутствие линкера, вести разговор о библиотеках в CCS, наверное, вообще не имеет смысла.

В IAR C/EC++ реализована не только libc и математическая библиотека, но и предлагается частичная реализация библиотеки С++. Это конечно не libstdc++ (вообще использование этой библиотеки в простых встраиваемых системах не оправдано), но некоторые полезные свойства в dlib имеются. Из всех рассматриваемых компиляторов в IAR наиболее полный комплект библиотечных функций. Следует заметить, что специальная поддержка периферийных устройств кристалла отсутствует, и только малая часть библиотеки представлена в исходном коде.

Так как с использованием микроконтроллеров Microchip разрабатываются встраиваемые системы, то желательно иметь функциональные библиотеки обслуживания периферийных устройств: RS232, CAN, I2C и подобные, - но это является дополнительным свойством среды разработки. В состав MPLAB C18 входят библиотеки поддержки периферийных устройств кристаллов PIC18. Это да╦т возможность предположить, что если такая библиотека будет работоспособна, то поможет сохранить время при разработке приложения, использующее стандартный протокол. Так как все предлагаемые библиотеки для работы с периферией доступны в виде исходников, то можно будет перенести эти библиотеки под другой компилятор. В CCS C есть набор функций, который позволяет работать с некоторыми периферийными устройствами. В HT-PICC поддержка периферийных устройств отсутствует, зато в HITIDE есть code snippets, которые могут рассматриваться как примеры для работы с периферийными устройствами.

Так как в статье делается обзор компиляторов, то свойства остальных средств разработки (ассемблера, линкера и остальных утилит) не рассматриваются.

Сравнения и тесты

Провед╦м несколько тестов с компиляторами MPLAB C18, IAR PIC18, HT PIC18 и ССS С, оценим их работу и возможности и проверим, насколько верны наши предположения по использованию архитектуры PIC18. Данная статья не претендует на объективное сравнение характеристик различных компиляторов и остальных средств разработки, входящих в состав соответствующих программных пакетов. Предлагаемые для теста примеры являются либо фрагментами реальных проектов, либо специально предназначены для тестирования определ╦нных свойств компиляторов. Полученные результаты по скорости выполнения и размеру исполняемого модуля могут быть улучшены за сч╦т изменения опций оптимизации и переписывания исходного кода. Потребуются практиче-ские эксперименты, так как рассмотрение фирменной документации и таблиц сравнения компиляторов (которые у разных производителей показывают совершенно разный результат) вряд ли является достаточным основанием для выбора средства разработки.

Прежде чем приступить к рассмотрению примеров на С, несколько слов об интеграции программных средств в MPLAB.

Для того, чтобы подключить в среду MPLAB компилятор стороннего производителя (подробные инструкции в файле на сайте или CD-ROM), следует в Project->Install Language Tool указать пути к исполняемым файлам лин-кера, компилятора, ассемблера. Для средств HI-TECH следует указывать во всех случаях picc18.exe (эта программа определяет по типу файла, какое средство следует вызвать). А для сборки проекта, состоящего из нескольких файлов в Project->Edit Project->Node Properties┘ Language Tool, следует указывать линковщик, а потом с помощью кнопки Add Node подключать исходные файлы на С или ассемблере с соответствующим средством и опциями. После выхода среды HITIDE компилятор HT-PICC18 лучше использовать с этой средой.

Для MPLAB C18 требуется включать скрипт линкера, соответствующий выбранному кристаллу (*.lkr), в список узлов (Add Node) проекта и указать пути к библиотекам, h-файлам и скриптам линкера. Также следует помнить, что в составе MPLAB C18 используется другой линковщик (не тот, который входит в MPLAB 5.хх), поэтому следует указать его.

Подключать IAR C компилятор к среде MPLAB не потребуется, так как можно воспользоваться средой IAR, включающей в себя симулятор C-SPY.

Среда CCS во время установки прописывает данные в инициализационный файл MPLAB, и проблем с созданием ССS С проектов для MPLAB не возникает.

Во всех предлагаемых тестах возвращаемый результат будет иметь значение char и для того, чтобы посмотреть его в симуляторе MPLAB, значение выводится в порт, и его можно увидеть в списке SFR. Для проверки правильности вычисляемых значений на ПК вывод в порт следует заменить выдачей на печать (printf). Так как в тестируемых компиляторах подключаемый файл с описанием кристалла имеет разное имя, то в тексте примеров я не буду приводить директиву #include . Для компиляции следует дополнить приводимый текст:

#include для IAR C #include для HT-PICC18 #include для MPLAB-C18 #include

для CCS C также следует заменить строку PORTB=.. на output_b(┘).

Первым провед╦м тест на компиляцию рекуррентного вызова:

Пример 1
long fac(long x)
{
if (x






Рекомендуемый контент




Copyright © 2010-2019 housea.ru. Контакты: info@housea.ru При использовании материалов веб-сайта Домашнее Радио, гиперссылка на источник обязательна.