PIC 16F principiante ... diferencia en la sintaxis del programa cuando se utilizan diferentes compiladores

9

Como mencioné, acabo de comenzar a programar pic16f877a. Ahora puedo trabajar con pantallas de 7 segmentos. Actualmente estoy usando el compilador ccs. Nada de malo con eso. Pero prefiero ser un programador independiente compilador. Entonces, simultáneamente quiero trabajar en otros compiladores como IAR o Hitechc. ¿Quiero saber si la "declaración de declaración de programa en compiladores" que no sea ccs será diferente? Por favor, guíame cómo abordar esta cosa. Agradecería toda forma de sugerencias. Gracias por adelantado.

VV Rao
fuente

Respuestas:

9

¡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.

aplastante
fuente
Si puede manejar permanecer en pic18 o superior, entonces debería echar un vistazo al compilador c18. Tiene una gran cantidad de soporte. IAR está abandonando el soporte PIC, ya no venderán licencias con mantenimiento.
Kortuk
He entendido que la arquitectura PIC16 / 12/10 no se asigna muy bien al lenguaje C. Por lo tanto, los compiladores de C tienen que tener algunas estructuras inusuales y no estándar para compensar la arquitectura PIC. El resultado final es que ninguno de los compiladores interopera.
Connor Wolf
7

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.

mjh2007
fuente
c18 para pic18, c30 para pic24 y dspic, c32 para pic32!
Kortuk
CCS es bueno porque ciertas cosas son más simples de hacer (interrupciones y temporizadores, por ejemplo, todos los ejemplos de Microchip tienen que escribir ASM para que las interrupciones funcionen correctamente en C18), pero está más cerca de ANSI C.
J. Polfer
Solo necesita una instrucción de ensamblaje y ese es el GOTO que se utiliza para configurar el vector de interrupción para que apunte a la rutina de servicio de interrupción.
mjh2007
3

Desafortunadamente, encontrará que es muy difícil encontrar un programa independiente del compilador para un microcontrolador. Hay varios problemas, aquí hay solo dos:

  1. Diferencias en periféricos, nombres SFR, etc. (especialmente sobre otros procesadores, pero incluso con compiladores de la misma familia), y;

  2. 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.

Thomas O
fuente
3

Echa un vistazo a SDCC . Es compatible con muchos de los dispositivos PIC16 y PIC18. GCC es compatible con PIC24 y dsPIC.

Toby Jaffey
fuente
pregunté sobre las diferencias en las declaraciones al usar diferentes compiladores ... de todos modos, conocí un compilador 'sdcc' más ... muchas gracias ...
VV Rao
2

Los aspectos más probables para depender del compilador son:

  • utilizando bits individuales (especialmente en puertos IO)
  • tamaños de enteros y caracteres que están firmados o sin firmar
  • punteros divertidos: C18 diferencia punteros rom y ram :(
  • fusibles de configuración
  • ocupado esperando

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

Wouter van Ooijen
fuente