Compiladores C para PIC

Los microcontroladores PIC son ampliamente utilizados en el campo de la electrónica y la programación de sistemas embebidos. Para desarrollar aplicaciones eficientes y de alta calidad para estos dispositivos, es fundamental contar con un compilador de C adecuado. En este artículo, exploraremos los diferentes tipos de compiladores de C disponibles para los microcontroladores PIC y los compararemos con el ensamblador y otros compiladores disponibles en el mercado.

Biblioman

3/12/20097 min read

Antes de empezar con los ejemplos prácticos vamos a comentar algunas cosas sobre los diferentes compiladores de que disponemos para programar los PIC. Compiladores para programar Microcontroladores PIC hay muchos en el mercado. Los hay que compilan código en lenguaje ensamblador, en C, en Basic, en Pascal etc., pero ¿Cuál utilizar?, si no tienes experiencia en la programación de estos dispositivos, este articulo te puede ayudar a tomar una decisión acertada de acuerdo a tus propósitos.

Primeramente voy hacer algunas definiciones y consideraciones sobre las ventajas e inconvenientes que tiene el uso de lenguajes de alto nivel como el C frente al uso de otros compiladores que utilizan el lenguaje ensamblador. Si nos decidimos a utilizar el lenguaje C, ¿Qué compilador elijo de entre los que trabajan en C?, también hay una amplia variedad y opiniones al respecto seguro que encontráis muchas en los foros de la red, por tanto expondré algunos que bajo mi punto de vista son los más importantes a tener en cuenta. Por último voy a exponer algunas características del compilador que yo he elegido para la realización de estos tutoriales: el PCW de la casa CCS, si tú decides utilizar otro ten en cuenta que el código de los ejemplos del curso programación PIC en C te valdrá prácticamente todo solo tendrás que adaptar la parte del código especifico al compilador que vayas a utilizar como funciones precompiladas y directivas del procesador. Espero que te sea útil el contenido de este artículo.

Programación en lenguajes de bajo nivel

En el principio de los tiempos de los Microprocesadores la única forma que había de programarlos era utilizando el Código Máquina en el cual la unidad central de proceso o CPU procesaba instrucciones que venían definidas por un conjunto de unos y ceros de 8, 16, 32 o más bits. Cada combinación diferente de bits, tiene para el micro un significado distinto, y le indicará a éste que realice una tarea determinada.
Sin embargo, este tipo de programación resultaba poco inteligible para el ser humano, porque se tenían que manejar constantemente conjuntos de ‘unos’ y ‘ceros’ sin ningún significado aparente.
Por este motivo se desarrollo el lenguaje Ensamblador (Assembler), que consistía en asignar a cada combinación de bits un conjunto de pocas letras (denominado mnemónico) que representaba mejor el significado de la operación o instrucción que se le indica al microprocesador.
Cuando se compila un programa en Ensamblador, el compilador de Ensamblador realiza automáticamente la traducción de los mnemónicos a Código Máquina (conjunto de bits), que es el único lenguaje que entiende la CPU.
Durante mucho tiempo el ensamblador ha sido el lenguaje utilizado de manera casi mayoritaria para programar microcontroladores. Sin embargo, este lenguaje implementa el conjunto de instrucciones que cada microcontrolador en concreto entiende, por lo que es totalmente dependiente del hardware, sin que pueda hacerse transportable a otros microcontroladores de una manera fácil.
Esto quiere decir que el Ensamblador no constituye realmente un lenguaje de programación estándar, capaz de permitir el transportar un programa diseñado para un microcontrolador a otro que tenga un conjunto de instrucciones diferente.

Programación en lenguajes de alto nivel

La programación en lenguaje de alto nivel permite la creación de programas independientemente de la plataforma utilizada, ya estemos hablando de microprocesadores o microcontroladores. Además hay que tener en cuentan que los microcontroladores evolucionaron a partir de los microprocesadores y no al revés, los microcontroladores aparecieron en la industria por la necesidad de tener sistemas programados embebidos, es decir que tanto CPU, memoria y periféricos estuvieran integrados dentro de un mismo circuito integrado.

Algunos de estos lenguajes de alto nivel son el BASIC, FORTRAN, PASCAL y C.
Este último además de permitir la programación desde un nivel cercano al programador (alto nivel), también brinda la posibilidad de controlar aspectos más cercanos al hardware (bajo nivel), como la manipulación directa de bits y bytes, por lo que se considera que es un lenguaje de nivel medio, más que de alto nivel, esta ya sería una razón para decantarse por compiladores de C y no de otros lenguajes de alto nivel como el Basic ó Pascal.

Ventajas del lenguaje C frente al Ensamblador

  • Mayor facilidad de programación. El lenguaje C dispone de un conjunto de operadores, datos y comandos que le confieren, al mismo tiempo, potencia y facilidad de programación, lo que permite un tiempo de desarrollo de programas mucho menor que con el lenguaje Ensamblador.

  • Portabilidad entre sistemas. Con el lenguaje C se asegura la portabilidad entre diferentes plataformas hardware o software, lo que quiere decir, por ejemplo, que un algoritmo implementado en C en una plataforma con Linux puede ser adaptado, prácticamente sin modificaciones, a un PIC. Esto permite el aprovechamiento de numerosos algoritmos que se encuentran ya disponibles para otras plataformas diferentes a los PIC. El Ensamblador, por el contrario, ya se ha indicado que es fuertemente dependiente del hardware, por lo que no permite su adaptación de una plataforma a otra distinta.

  • Desarrollo de programas estructurados. El lenguaje C permite desarrollar programas estructurados en funciones, bloques o procedimientos, lo que proporciona una compartimentación del código. Por el contrario, el Ensamblador no es un lenguaje estructurado, lo que lleva a que los programas desarrollados en ensamblador sean lineales, con el inconveniente que esto implica en lo que se refiere a claridad del código escrito.

  • Fácil mantenimiento de los programas. Por ser un lenguaje de compresión relativamente fácil.

A pesar de todas las ventajas indicadas para el lenguaje C, no se puede prescindir totalmente del Ensamblador. Éste, al estar más cercano al nivel del hardware que se programa, permite generar código más compacto (menor número de instrucciones para realizar una misma tarea), lo que lleva a una mayor velocidad de ejecución.

Aunque el desarrollo de programas para microcontroladores es posible realizarlo totalmente en Ensamblador, la utilización del lenguaje C supone una alternativa muy interesante por su rapidez, facilidad, y portabilidad, sin que esto signifique que este nuevo enfoque venga a sustituir definitivamente al Ensamblador, en casos en los que se necesita crear partes de código sujetas a determinadas restricciones ( reducido número de instrucciones, alta velocidad de ejecución,…) se puede implementar esa parte de código directamente en Ensamblador dentro de un programa en C, consiguiendo de este modo un código mucho más eficiente. Esta ventaja no la tienen otros compiladores de Basic ó Pascal.

Compiladores de C para PIC

La oferta de compiladores de C para PIC es muy numerosa, a la hora de elegir entre uno u otro es necesario tener en cuenta los siguientes factores:

  • Optimización del código generado.

  • Dispositivos para los que el compilador es capaz de generar código.

  • Biblioteca de funciones precompiladas y directivas de las que disponen, un compilador que disponga ya de muchas funciones listas para usarse ahorra mucho trabajo al programador.

  • Posibilidades adicionales, como inserción de código Ensamblador, depuración, etc.

  • Precio.

Los principales son los siguientes:

  • MPLAB-C18 (Microchip). Compilador de la casa Microchip el mismo fabricante que fabrica los PIC. Este concretamente es para los PIC de 8 bits, puedes obtener más información en ingles desde aquí.

  • MPLAB-C24 (Microchip) como el anterior pero para microcontroladores de 16 bit incluyendo los dsPIC con capacidad de procesamiento de señales digitales, puedes obtener más información aquí.

  • MPLAB-C32 (Microchip) para programar Microcontroladores de 32 bits la gama más alta de Microchip. Puedes ampliar la información aquí.


Los que producen un código más optimizado son estos tres últimos para eso los desarrolladores de los compiladores son los que fabrican los PIC, además en las gamas altas aumenta el Set de instrucciones específicas para C que se le añaden a la CPU y los primeros en aprovechar los recursos Hardware son ellos, sin embargo bajo mi punto de vista no son compiladores populares para el que empieza en la programación de estos dispositivos. Además hay que tener un compilador para cada gama de Microcontroladores y el C18 aunque es un compilador para dispositivos de 8 bits no acepta los de gama más baja incluido el famoso 16F84.

  • PICC (Hi-Tech). Sin duda el mejor compilador (profesionalmente hablando) hecho por terceros, está disponible para las plataformas Windows, Linux y MAC incluye soporte para la gama de 24 y 32 bits y su código es muy portable, ya que cumple prácticamente con el estándar ANSI C, además admite perfectamente la integración de código ensamblador dentro del C. Pero, como todas las cosas buenas hay que pagarlas la versión profesional completa vale más de 1000$ aunque existe una versión Lite gratis para las tres plataformas que puedes conseguir tras regístrate. Otro inconveniente que le veo es que al ser un producto enfocado al desarrollo profesional no he vistos muchos Kit de aprendizaje, es decir, conjunto de tarjetas preparadas para probar los ejemplos del compilador, hasta para bajarte los manuales de la página del fabricante te tienes que registrar. Puedes obtener más información desde aquí.

  • PCW Compiler (Custom Computer Services). El compilador que vamos a utilizar en el curso por lo que hablaremos en profundidad de el más adelante, puedes acceder a la página del fabricante desde aquí

  • mikroC un buen compilador de C para aprender a programar los PIC, de la página del fabricante http://www.mikroe.com/en/ se puede bajar abundante documentación así como una versión demo del mismo, el fabricante también ofrece compiladores para otros lenguaje como el Basic y Pascal, así como abundantes ejemplos y kit de desarrollo. Sin duda un compilador muy a tener en cuenta a la hora de empezar a programar PIC en C.

  • MPC (Byte Graft). Otro compilador para PIC en C aunque menos conocido. También permite incluir código ensamblador y se integra con el MPLAP pero ni punto de comparación en cuanto documentación y ejemplos a los dos anteriores, puedes obtener más documentación de este compilador aquí.

  • CC5X (B. Knudsen). Puedes encontrar más información desde aquí

  • SDCC Compiler es un pequeño compilador de software libre para las plataformas Linux, Windows y MAC en el que podemos desarrollar aplicaciones para dispositivos como Intel 8051, Maxim 80DS390, Zilog Z80 y el Motorola 68HC08 actualmente está en fase de desarrollo el poder soportar los PIC de 16 y 18 bits

De entre todos éstos (bajo mi punto de vista) PCW Compiler y mikroC son los que tienen una mejor relación prestaciones/precio y además disponen de abundante documentación y ejemplos en la red, lo que los hace ideales para empezar a programar PIC en C.

Bueno, ahora vendría la explicación detallada del compilador PCW, pero para no hacer muy largo este lo voy a dejar para un próximo artículo.

Conclusión

En resumen, los compiladores de C son una opción popular para programar microcontroladores PIC debido a su sintaxis sencilla, desarrollo rápido y funciones de alto nivel. Aunque el ensamblador ofrece un control más preciso del hardware, programar en ensamblador puede ser más complejo y requerir más tiempo. La elección del compilador dependerá de las necesidades y preferencias individuales del programador. En última instancia, lo más importante es seleccionar un compilador que permita desarrollar aplicaciones eficientes y de alta calidad para los microcontroladores PIC.