¡Qué bueno que quieras ser un compilador independiente! Desafortunadamente, los compiladores hitech y CCS para los PIC de gama baja usan muchas declaraciones de preprocesador específicas del compilador, rutinas de acceso de pin específicas del compilador y, en el caso de las rutinas específicas del compilador CCS para funciones centrales de acceso como SPI, I2C, ADC, etc.
No es posible escribir su código para que no sea específico del compilador sin una gran cantidad de preprocesador #define, #ifdef, #ifndef, etc. para obtener acceso a partes específicas de lo que ofrece cada compilador. Esto haría que tu código sea ilegible.
Lo mejor que puede aspirar es ser independiente del IDE y usar algo como eclipse, por lo que al menos está usando el mismo IDE. Esto resultará en la pérdida de los asistentes de CCS para configurar las funciones principales, pero le dará una mayor flexibilidad en el uso del mismo IDE.
Otra cosa a tener en cuenta es que tanto Hitech como CCS no tienen (al menos en el pasado) un verdadero enlazador de compilador de c y requieren que uses "#include myfile.c", lo cual personalmente desprecio ... pero esa es otra historia.
No he comentado sobre el compilador IAR ya que solo he usado CCS y hitech. Ambos funcionaron bien, pero nunca estuve muy contento después de migrar desde la plataforma Motorola (ahora escala libre) y usar el compilador de metroworks que era más avanzado en ese momento. El compilador IAR se ve bien pero nunca lo he usado.
Si usara piezas PIC18, recomendaría el compilador C18 de Microchip. Se ajusta mucho más a ANSI C que el compilador CCS. No estoy seguro sobre el compilador de alta tecnología ya que no lo he usado. Como se dijo anteriormente, si realmente necesita hacer un código independiente del compilador, deberá usar muchas directivas precompiladoras. Recomiendo echar un vistazo a algunos de los programas de ejemplo de Microchip que admiten múltiples compiladores para tener una idea de cómo se hace.
fuente
Desafortunadamente, encontrará que es muy difícil encontrar un programa independiente del compilador para un microcontrolador. Hay varios problemas, aquí hay solo dos:
Diferencias en periféricos, nombres SFR, etc. (especialmente sobre otros procesadores, pero incluso con compiladores de la misma familia), y;
Características no estándar en algunos compiladores, como establecer bits individualmente o diferentes estructuras para invocar código de ensamblaje.
La serie 16F es muy limitada en términos de arquitectura y no está realmente diseñada para admitir un compilador de C. Es por eso que no hay CCG para ello.
fuente
Echa un vistazo a SDCC . Es compatible con muchos de los dispositivos PIC16 y PIC18. GCC es compatible con PIC24 y dsPIC.
fuente
Los aspectos más probables para depender del compilador son:
Mi forma preferida de manejar esto es escribir macros para estos aspectos, y hacer que el compilador seleccione la macro correcta basada en macros predefinidas específicas del compilador. Hice una biblioteca RFM70 y aplicaciones de ejemplo de esta manera que se ejecutan en PIC14 (HiTechC), PIC16 (C18) y ARM (GCC).
(actualización) Mi biblioteca RFM70 ahora está completa. Es compatible con C en PIC 16F (compilador Hitech), C y C ++ en LPC11114 (Cortex) y LPC2148 (ARM7TDMI) (compilador GCC) y Arduino (ATMega128, compilador GCC). Esto se genera (incluida la documentación de doxygen) a partir de la misma fuente haciendo un preprocesamiento en un script de Python. El soporte de Jal está en desarrollo, tal vez ProtonBasic lo seguirá. http://www.voti.nl/rfm70
fuente