Это здорово, что вы хотите быть независимым от компилятора! К сожалению, компиляторы hitech и CCS для PIC нижнего уровня используют множество объявлений препроцессора, специфичных для компилятора, процедур доступа к выводам, специфичных для компилятора, и в случае процедур, специфичных для компилятора CCS, для функций ядра доступа, таких как SPI, I2C, ADC и т.
Невозможно написать свой код, который бы не относился к конкретному компилятору без большого количества препроцессора #define, #ifdef, #ifndef и т. Д., Чтобы получить доступ к определенным частям того, что предлагает каждый компилятор. Это сделает ваш код нечитаемым.
Лучшее, к чему вы можете стремиться - это быть независимым от IDE и использовать что-то вроде eclipse, так что, по крайней мере, вы используете ту же IDE. Это приведет к потере мастеров CCS для настройки основных функций, но даст вам большую гибкость при использовании той же IDE.
Еще одна вещь, которую следует учитывать, это то, что и hitech, и CCS не имеют (по крайней мере, в прошлом) настоящего компоновщика компилятора c и требуют от вас использования "#include myfile.c", который я лично презираю ... но это другая история.
Я не прокомментировал компилятор IAR, поскольку я использовал только CCS и hitech. Оба работали нормально, но я никогда не был доволен ни после миграции с платформы Motorola (теперь это freescale), ни с использованием более современного на тот момент компилятора metroworks. Компилятор IAR выглядит хорошо, но я никогда не использовал его.
Если бы вы использовали детали PIC18, я бы порекомендовал компилятор C18 от Microchip. Это соответствует гораздо более близко к ANSI C, чем компилятор CCS. Я не уверен насчет компилятора Hi-Tech, так как я не использовал его. Как было сказано ранее, если вам действительно нужно сделать код независимым от компилятора, вам нужно будет использовать множество директив предкомпилятора. Я бы порекомендовал взглянуть на некоторые примеры программ Microchip, которые поддерживают несколько компиляторов, чтобы получить представление о том, как это делается.
источник
К сожалению, вы обнаружите, что очень трудно найти независимую от компилятора программу для микроконтроллера. Есть несколько проблем, вот только две:
Различия в периферийных устройствах, именах SFR и т. Д. (Особенно по сравнению с другими процессорами, но даже с компиляторами из того же семейства), и;
Нестандартные функции в некоторых компиляторах, такие как индивидуальная установка битов или различные структуры для вызова кода сборки.
Серия 16F очень ограничена с точки зрения архитектуры и не предназначена для поддержки компилятора Си. Вот почему нет GCC для этого.
источник
Посмотрите на SDCC . Он поддерживает многие устройства PIC16 и PIC18. GCC поддерживает PIC24 и dsPIC.
источник
Наиболее вероятные аспекты, которые будут зависеть от компилятора:
Мой предпочтительный способ справиться с этим - написать макросы для этих аспектов и заставить компилятор выбрать правильный макрос на основе предопределенных макросов, специфичных для компилятора. Таким образом, я создал библиотеку RFM70 и примеры приложений, которые работают на PIC14 (HiTechC), PIC16 (C18) и ARM (GCC).
(обновление) Моя библиотека RFM70 завершена. Он поддерживает C на PIC 16F (компилятор Hitech), C и C ++ на LPC11114 (Cortex) и LPC2148 (компилятор GCC) и Arduino (ATMega128, компилятор GCC). Это генерируется (включая документацию по Doxygen) из того же источника, выполняя некоторую предварительную обработку в скрипте Python. Поддержка Jal находится в стадии разработки, возможно ProtonBasic последует. http://www.voti.nl/rfm70
источник