Que ótimo que você quer ser independente do compilador! Infelizmente, os compiladores hitech e CCS para os PICs low-end usam muitas declarações específicas de pré-processador, rotinas de acesso de pinos específicas do compilador e, no caso de rotinas específicas do compilador CCS, para acessar funções principais como SPI, I2C, ADC e assim por diante.
Não é possível escrever seu código para ser não específico do compilador sem muito pré-processador #define, #ifdef, #ifndef e assim por diante para obter acesso a partes específicas do que cada compilador tem a oferecer. Isso tornaria seu código ilegível.
A melhor coisa que você poderia procurar é ser independente do IDE e usar algo como eclipse, portanto, pelo menos, você está usando o mesmo IDE. Isso resultará na perda de assistentes do CCS para a configuração das funções principais, mas proporcionará maior flexibilidade no uso do mesmo IDE.
Outra coisa a considerar é que tanto a Hitech quanto a CCS não têm (pelo menos no passado) um vinculador verdadeiro do compilador c e exigiram que você usasse "#include myfile.c", que eu pessoalmente desprezo ... mas isso é outra história.
Eu não comentei no compilador IAR, pois usei apenas o CCS e a hitech. Ambos funcionaram bem, mas eu nunca fiquei muito feliz depois de migrar da plataforma Motorola (agora em escala livre) e usar o compilador metroworks, que era mais avançado na época. O compilador IAR parece bom, mas nunca o usei.
Se você estivesse usando peças PIC18, eu recomendaria o compilador C18 da Microchip. Ele está muito mais próximo do ANSI C do que do compilador CCS. Não tenho certeza sobre o compilador Hi-Tech, pois não o usei. Como foi dito anteriormente, se você realmente precisa criar código independente do compilador, precisará usar muitas diretivas pré-compilador. Eu recomendo dar uma olhada em alguns dos programas de exemplo Microchip que oferecem suporte a vários compiladores para ter uma idéia de como isso é feito.
fonte
Infelizmente, você achará muito difícil encontrar um programa independente do compilador para um microcontrolador. Existem vários problemas, aqui estão apenas dois:
Diferenças em periféricos, nomes de SFR, etc. (especialmente em relação a outros processadores, mas mesmo com compiladores da mesma família) e;
Recursos não padrão em alguns compiladores, como definir bits individualmente ou estruturas diferentes para chamar o código de montagem.
A série 16F é muito limitada em termos de arquitetura e não é realmente projetada para suportar um compilador C. É por isso que não existe um CCG para isso.
fonte
Dê uma olhada no SDCC . Ele suporta muitos dos dispositivos PIC16 e PIC18. O GCC suporta PIC24 e dsPIC.
fonte
Os aspectos mais prováveis de serem dependentes do compilador são:
Minha maneira preferida de lidar com isso é escrever macros para esses aspectos e fazer com que o compilador selecione a macro correta com base nas macros predefinidas específicas do compilador. Criei uma biblioteca RFM70 e aplicativos de exemplo dessa maneira que são executados no PIC14 (HiTechC), PIC16 (C18) e ARM (GCC).
(atualização) Minha biblioteca do RFM70 agora está completa. Ele suporta C no PIC 16F (compilador Hitech), C e C ++ no LPC11114 (Cortex) e LPC2148 (ARM7TDMI) (compilador GCC) e Arduino (ATMega128, compilador GCC). Isso é gerado (incluindo documentação doxygen) a partir da mesma fonte, executando algum pré-processamento em um script Python. O suporte da Jal está em desenvolvimento, talvez o ProtonBasic o siga. http://www.voti.nl/rfm70
fonte