PIC 16F новичок .. разница в синтаксисе программы при использовании разных компиляторов

9

Как я уже упоминал, я только начал программирование pic16f877a. Теперь я могу работать с 7 сегментными дисплеями. В настоящее время я использую компилятор ccs. В этом нет ничего плохого. Но я предпочитаю быть независимым от компилятора программистом. Поэтому я одновременно хочу работать в других компиляторах, таких как IAR или Hitechc. Я хочу знать, будет ли "объявление оператора программы в компиляторах" отличным от ccs? Пожалуйста, объясните мне, как подойти к этой вещи. Я приветствовал бы все формы предложений. Заранее спасибо.

В.В. Рао
источник

Ответы:

9

Это здорово, что вы хотите быть независимым от компилятора! К сожалению, компиляторы 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 выглядит хорошо, но я никогда не использовал его.

smashtastic
источник
Если вы можете работать с pic18 или выше, вам следует взглянуть на компилятор c18. Имеет большое количество поддержки. IAR прекращает поддержку PIC, они больше не будут продавать лицензии с техническим обслуживанием.
Кортук
Насколько я понимаю, архитектура PIC16 / 12/10 не очень хорошо отображается на язык Си. Поэтому компиляторы C должны иметь некоторые необычные и нестандартные структуры, чтобы компенсировать архитектуру PIC. Конечный результат - ни один из компиляторов не взаимодействует.
Коннор Вольф
7

Если бы вы использовали детали PIC18, я бы порекомендовал компилятор C18 от Microchip. Это соответствует гораздо более близко к ANSI C, чем компилятор CCS. Я не уверен насчет компилятора Hi-Tech, так как я не использовал его. Как было сказано ранее, если вам действительно нужно сделать код независимым от компилятора, вам нужно будет использовать множество директив предкомпилятора. Я бы порекомендовал взглянуть на некоторые примеры программ Microchip, которые поддерживают несколько компиляторов, чтобы получить представление о том, как это делается.

mjh2007
источник
c18 для pic18, c30 для pic24 и dspic, c32 для pic32!
Кортук
CCS хорош тем, что некоторые вещи проще выполнять (например, прерывания и таймеры - во всех примерах с микрочипами вы пишете ASM, чтобы заставить прерывания работать правильно в C18), но это ближе к ANSI C.
Дж. Полфер
Вам нужна только одна инструкция по сборке, и это GOTO, который используется для настройки вектора прерывания для указания на процедуру обработки прерывания.
mjh2007
3

К сожалению, вы обнаружите, что очень трудно найти независимую от компилятора программу для микроконтроллера. Есть несколько проблем, вот только две:

  1. Различия в периферийных устройствах, именах SFR и т. Д. (Особенно по сравнению с другими процессорами, но даже с компиляторами из того же семейства), и;

  2. Нестандартные функции в некоторых компиляторах, такие как индивидуальная установка битов или различные структуры для вызова кода сборки.

Серия 16F очень ограничена с точки зрения архитектуры и не предназначена для поддержки компилятора Си. Вот почему нет GCC для этого.

Томас О
источник
3

Посмотрите на SDCC . Он поддерживает многие устройства PIC16 и PIC18. GCC поддерживает PIC24 и dsPIC.

Тоби джеффи
источник
я спрашивал о различиях в выражениях при использовании разных компиляторов ... в любом случае я узнал о еще 1 компиляторе 'sdcc' .. большое спасибо ..
VV Rao
2

Наиболее вероятные аспекты, которые будут зависеть от компилятора:

  • использование отдельных битов (особенно в портах ввода-вывода)
  • размеры целых чисел и тип знака, который подписан или не подписан
  • смешные указатели: C18 различает указатели rom и ram :(
  • предохранители
  • занят ожидания

Мой предпочтительный способ справиться с этим - написать макросы для этих аспектов и заставить компилятор выбрать правильный макрос на основе предопределенных макросов, специфичных для компилятора. Таким образом, я создал библиотеку 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

Воутер ван Оойен
источник