En esta segunda parte me gustaría orientar un poco sobre las distintas opciones que tenemos a la hora de compilar código para la familia STM32 de STMicroelectronics, de la que ya se ha hablado en la anterior entrada del blog.
![]()
Al llegar aquí encontramos muchos IDEs distintos, muchos compiladores, JTAGs, depuradores, emuladores y cientos de cosas más. Esto al principio puede confundir, así que este artículo solo pretende poner un poco de orden a las cosas y así saber qué es lo que más nos interesa.
En primer lugar nos detendremos en los compiladores. Estos microcontroladores están pensados para ser programados en C, por lo que el ensamblador lo descartaremos salvo que necesitemos un control muy preciso de los tiempos en la aplicación. En cualquier caso la mayoría (por no decir todos) de compiladores de C admiten la inserción de código en ensamblador en el código a compilar, por lo que no será un problema.
Empezaremos por el conjunto de herramientas que STMicroelectronics ofrece con su kit Primer 2, se trata de la suite de Raisonnace compuesta por el IDE Ride7 y el RKit-ARM, que no es más que el compilador GCC de GNU. El IDE lo ofrecen de forma totalmente gratuita y sin ningún tipo de limitación en cuanto a tamaño de código u optimizaciones. En cualquier caso, tendremo que adquirir un adaptador RLink en caso de querer depurar el código en flash o en RAM. La versión estandar del RLink cuesta 99€ y solo permite depurar un máximo de 32KB. La versión profesional, sin limitaciones, cuesta 750€, una cantidad muy elevada. Podemos añadir al entorno las librerías ofrecidas por STMicroelectronics.
Otra opción muy usada, sobre todo por gente aficioanda, es CrossWorks for ARM de Rowley Associates. Podemos descargar gratuitamente una versión de prueba de 30 días, y si luego nos gusta, podemos adquirir por 150$ una licencia de uso personal. La ventaja de este IDE es que podemos usar muchos adaptadores distintos para depurar y programar el código en nuestros microcontroladores, por lo que no estaremos atados a un costoso adaptador para poder depurar todo el código, aunque si queremos podemos adquirir junto a la licencia un adaptador de la propia empresa, el CrossConnect Lite for ARM (60$) o la versión Classic (200$) que tiene mayor velocidad. Al igual que el Ride7, este IDE usa el compilador libre de GNU, GCC. También se le pueden incorporar fácilmente las librerías de STMicroelectronics. También incluye una librería propia de multitarea, pero esto es motivo de otra entrada en el blog.
![]()
Una opción que es totalmente libre, sería usar GCC con nuestro editor favorito, como Emacs, VIM, Kate o gedit, pero la realidad es que se echan en falta algunas opciones. Esto es fácil de solucionar si usamos como IDE a Eclipse y como depurador al proyecto OpenOCD. Eclipse podemos descargarlo gratuitamente desde su web, posteriormente habrá que instalarle algún añadido para que tenga soporte de C/C++. También necesitaríamos tener los archivos que se usan durante el proceso de linkado, por lo que tendremos que buscarlos o escribirlos nosotros mismos. Afortunadamente, ya hay soluciones que te instalan todo esto mucho más fácilmente y son las que a continuación comentaré.
La primera sería la que proporciona CodeSourcery. Esta empresa es la que más aporta al proyecto GCC para la arquitectura ARM. Al aportar código para GCC lo hacen bajo una licencia GNU, lo cual nos permite disponer del código fuente (por eso los anteriores usaban también este compilador, pero con su propia interfaz). De forma totalmente gratuita podemos descargar el compilador, así como las herramientas básicas para poder compilar código desde la línea de comandos. Normalmente lo encontraremos con el nombre de Sourcery G++ Lite Edition. Si queremos disponer de algo más, podemos adquirir una de las distintas licencias que tienen, y que van desde 99$ para la versión académica, hasta 2799$ para la Professional. Estas versiones incluyen además de lo anterior, el IDE Eclipse preparado para depurar y compilar código para Cortex-M3. Además incluyen librerías para iniciar los dispositivos, herramientas para disminuir el tamaño del código generado, facilidades para depurar, librerías para run-time optimizadas, etc. Además, podremos usar muchos JTAGs distintos.
![]()
Otra opción sería usar Yagarto. Yagarto cosiste un toolchain que integra de forma sencilla Eclipse, GCC y OpenOCD. Está disponible de forma totalmente gratuita para Windows y MacOS X. También podemos usar casi cualquier JTAG para depurar y bajar código a nuestro dispositivo mediante OpenOCD. El gran problema, es que no trae ni ficheros Makefile ni los scripts de linkado, así que hay que buscarlos de otros proyectos o escribirlos nosotros.
Por suerte, hace poco surgió un nuevo proyecto llamado CooCox. Al igual que los anteriores usa como compilador GCC, pero usa su propio IDE basado en eclipse al que han nombrado como CoBuilder. Para depurar usan CoDebugger, que soporta varios JTAGs basados en el integrado FT2232. También ofrecen en forma de harware libre un adaptador para depurar código llamado CoLink, que también podemos adquirir por 19$ y que también podemos usar con la utilidad CoFlash (también tienen plugins para poder usarlo con otros entornos de pago), esta utilidad permite grabar código tanto en la flash de los Cortex-M3, como en la de otros dispositivos flash, ya que podemos personalizar el algoritmo de grabado. Complementariamente ofrecen un sistema operativo en tiempo real y con capacidad de multitarea bajo una licencia BSD, por lo que se trata de software libre, pero esto es parte de otro post al igual que ya comenté en el caso de CrossWorks.
Cabría destacar de este proyecto la facilidad de uso, ya que trae integradas las librerías de periféricos que ofrecen Atmel, STMicroelectronics, Luminary y NXP, además podemos ver ejemplos de los módulos, la documentación de las funciones, etc. También vienen ya integrados los scripts de linkado y la compilación se hace automáticamente sin tener que escribir un makefile. Además todo esto de forma totalmente gratuita y sin limitaciones.
![]()
Hasta aquí los entornos que usan GCC, ahora comentaré un par más de opciones que usan un compilador propio. El primero de ellos se trata del famoso IAR Embedded Workbench® for ARM, conocido como EWARM. Trae un compilador de C/C++ propio totalmente integrado con su respectivo IDE, soporta miles de dispositivos, trae más de 1700 ejemplos para placas de desarrollo de distintos fabricantes, librerías, scripts de linkado, etc. Todo lo que cabría esperar de un producto de IAR. Destacar que trae compatibilidad con un muchos JTAGs distintos, cosa de agradecer, y también soporta multitud de los RTOS existentes. Otra cosa que llama la atención es el plugin que ofrecen para integrar su compilador con Eclipse.
Podemos desacar una demo sin limitaciones de 30 días si nos registramos. Si queremos posteriormente adquirirla, he encontrado 2 versiones, la baseline por 2540€ y la estandar por 4484€ (precios de mouser), da miedo enh. Por suerte, existe una versión gratuita llamada KickStart, cuya limitación es que solo podemos hacer aplicaciones con menos de 32KB.
Para el final he dejado las herramientas que ofrece ARM bajo la firma Keil y que podríamos llamarlas como "las herramientas oficiales". Básicamente es más de lo mismo aunque destacaría el rendimiento de su librería microlib, que es muy superior a otras. Además de RealView, que son las herramientas de compilación, linkado y ensamblado, ofrecen un IDE llamado µVision. Ofrecen un paquete que trae todo lo necesario llamado MDK con dos versiones, estandar, sin limitaciones, y basic, limitada en debug y programación a 256KB. También hay versiones de prueba de 30 días. No he encontrado precios ni he investigado mucho más, ya que seguramente se trate de una herramienta tan cara como la del caso anterior.
![]()
Estos entornos solo son los más populares, pero creo que bastará para que cualquiera pueda hacerse una idea de la gran cantidad de software disponible, sus limitaciones y sus virtudes. De momento yo, como novato, me quedo con el proyecto CooCox aunque no se si compraré el CoLink u otro JTAG compatible, ya que los gastos de envío son un poco elevados.
Enviar un comentario nuevo