## page was renamed from HerramientasProgramacion = Herramientas de Programación = Antes de conocer un poco sobre las herramientas de programación que posee los microcontroladores ARM, debemos repasar un par de conceptos importantes. ==== GNU-ARM ==== ''GNU toolchain'' es un término general para nombrar a una colección de herramientas de programación producidas por el proyecto GNU. Estas herramientas utilizadas de manera encadenada (en serie) permiten desarrollar aplicaciones y sistemas operativos. El toolchain de GNU juega un rol vital en el desarrollo del kernel de Linux, BSD y software para sistemas embebidos. Proyectos incluidos en el toolchain de GNU: * GNU make: Automation tool for compilation and build; * GNU Compiler Collection (GCC): Suite of compilers for several programming languages; * GNU Binutils: Suite of tools including linker, assembler and other tools; * GNU Debugger (GDB): Code debugging tool; * GNU build system (autotools): * Autoconf * Autoheader * Automake * Libtool ''GNU ARM toolchain'' Se refiere a la utilización de estas herramientas para generar código ARM. ==== Compilación ==== Un compilador es un programa que traduce un programa escrito en un lenguaje de programación a otro lenguaje de programación. Usualmente este proceso de traducción está dividido en tres estratos, conocidos como Front-End, Middle-End y Back-End. [[WebHome/HerramientasProgramacion/IntroduccionCompiladores|Introducción a Compiladores]] ==== Enlazado ==== El proceso de pasar de un archivo objeto reubicable a un objeto binario absoluto listo para ser cargado en nuestro microcontrolador se denomina enlazado o su nombre en ingles linker. [[WebHome/HerramientasProgramacion/LinkerScript|Introducción a Enlazadores y LinkerScript]] ==== Gestor de Proyecto (MAKE) ==== make es una utilidad que nos permite automatizar el mantenimiento de un proyecto, esto es: * Determinar automáticamente qué bloques de un gran proyecto se tienen que recompilar, y los comandos para realizar esto. * Enlazar el proyecto. * Crear archivos secundarios de soporte. * etc. Desplegar todas las capacidades de ''make'' está más allá del alcance de nuestro curso, por ello, sólamente veremos a continuación los elementos básicos necesarios para la compilación con ''make''; los que por otro lado serán suficientes para nosotros. No obstante para quienes tengan la inquietud de indagar más profundamente sobre las capacidades de ''make'' se recomienda el manual GNU Make o también algunas adaptaciones al castellano como esta. Un escenario genérico de aplicación de la utilidad ''make'' sería: * Un conjunto de archivos relacionados entre sí de alguna manera fija. * Un conjunto de acciones a realizar con los archivos disparadas a partir de la modificación de uno o varios de los mismos que se derraman a partir del modificado a todos aquellos que del primero "dependan". * Un intérprete de comandos donde ejecutar ''make'' y donde ''make'' pueda ejecutar los programas definidos por las acciones a realizar sobre los archivos. * Un archivo llamado convencionalmente ''makefile'' del cual ''make'' lee las relaciones y las acciones a realizar sobre los archivos. . El archivo ''makefile'' está compuesto básicamente por una sucesión de '''reglas''' que tienen la siguiente estructura: {{{ target ... : prerequisites ... command ... ... }}} == Herramientas == Para realizar nuestro proyecto en ARM, necesitaremos una serie de herramientas que nos permitirán compilar, linkear, debuging, manejar nuestro proyecto, etc. Necesitaremos entonces, conocer las posibilidades que tenemos en la elección de estas herramientas. === Herramientas Pagas === Estas herramientas vienen acompañadas de un IDE, el cual integra todas las fases de un proyecto en un solo entorno visual, permitiendo con simples "click" sobre botones, crear compilar y grabar en nuestro micro un proyecto. Ventajas: * Posee una curva de aprendizaje muy alta (en un par de minutos puedo crear un proyecto, realizar un debug linea por linea y grabarlo a un microcontrolador). * En algunos casos posee optimizaciónes en las herramientas de compilación y/o enlazado, que permite optimizar tamaño y tiempo de ejecución de nuestro proyecto. * Poseen soporte técnico, a la hora de tener un proyecto grande y costoso en una empresa es importante poder levantar un teléfono y obtener respuestas sobre algún problema con la herramienta. Desventajas: * Costos, en el caso de una empresa puede no ser significativo, pero para proyecto pequeños o de contar con pocos recursos, antes de gastar U$s4000 o mas se debe pensar bien. * Se ocultan procesos, el echo de ocultar procesos permite esta curva de aprendizaje tan alta, de vuelta a lo que pasaba con los costos, esto generalmente no es importante para una empresa, pero si lo que se necesita es conocer a fondo los distintos procesos en la construcción de un proyecto, como interactua cada parte, de que forma se graban los datos en mi microcontrolador, etc. un IDE comercial no es la mejor opción, A continuación vemos algunos de estos entornos ||'''Nombre''' ||'''Firma''' ||'''IDE''' ||'''Compilador''' ||'''Web Site''' || ||KEIL ||ARM Company ||!RealView Microcontroller Development Kit ||!RealView ||http://www.keil.com/arm/ || ||IAR ||IAR System ||IAR Embedded Workbench for ARM ||Propio ||http://www.iar.com/ewarm || ||!CrossWorks for ARM ||Rowley Associates ||Cross Studio ||GCC ||http://www.rowley.co.uk/arm/index.htm || ||Sourcery G++ ||!CodeSourcery ||Sourcery G++ IDE ||GCC ||http://www.codesourcery.com/sgpp || ||Embest ||EMBEST INFO&TECH CORPORATION ||Embest IDE for ARM ||GCC ||http://www.embedinfo.com/English/Product/idemain.asp || ||ARM Development Tool ||Gao Tek co. ||GAO IDE for ARM Development Tools Suite A/B ||GCC ||http://www.gaotek.com/index.php || ||ARM development tools ||!ImageCraft Creations Inc. ||ARM development tools IDE ||ICCV7 for ARM ||http://www.imagecraft.com/devtools_ARM.html || === Herramientas Libres === Aquí debemos hacer una aclaración en un error muy habitual, confundir herramientas libres con herramientas gratis. Herramientas Gratis, son provista generalmente por las empresas que hacen Herramientas Pagas, la diferencia, es que le sacan algunas características, restringe el tamaño del proyecto o solo permiten usarla para fines académicos, tenemos otra vez un IDE muy lindo con botoncitos que hacen todo por milagro y sin saber que ocurre abajo, pero con el problema que al crecer nuestro proyecto no podemos mas compilarlo por las restricciones que posee o en el momento que un proyecto hecho para una materia en la facultad se puede transferir a una empresa, no lo podemos comercializar sin salir de la ley. Herramientas Libre, en este caso son herramientas que nacieron y/o crecieron en una comunidad de programadores, son herramientas con las cuales somos libre de hacer lo que querramos con nuestro proyecto, esto es así hasta el punto, de que las mayoría de los entornos pagos internamente poseen herramientas libres, muchas veces la herramienta que te están vendiendo es solo el IDE, debido a que el compilador, enlazador, librerías y hasta el gestor de proyector son GNU. Podemos aclarar brevemente las ventajas y desventajas Ventajas * Proyecto sin restricciones ni costos * Total control, conozco perfectamente cada una de las partes que posee mi proyecto y puedo modificarla a mi gusto Desventajas * La pincipal desventaja se puede dar con referencia a algunas de las herramientas pagas ( las mas caras ) y es la optimización, algunas herramientas pagas reescribieron librerías, compiladores y enlazadores, permitiendo crear proyectos mas compactos y rápidos que las GNU. IDE Libres ||YAGARTO IDE basado en GNU-ARM e interfase Eclipse, disponible solo para Windows ||http://www.yagarto.de/ || paginas con pequeños script o tutoriales para compilar el GNU-ARM ||!OpenHardware ||http://openhardware.net/Embedded_ARM/Toolchain/ || ||rod.info ||http://rod.info/ARM7Micro || ||gnu-arm-toolchain-installer ||http://mcuprogramming.com/forum/arm/gnu-arm-toolchain-installer/ || = Entorno de Programación = En la programación del microcontrolador, se utilizará el proyecto GNU-ARM bajo Linux. La descripción del proyecto y la información para instalarlo se encuentra en:[[WebHome/HerramientasProgramacion/HLaunchpad|Herramientas de programación]] Para los alumnos que quieran programar en Windows, podrán hacerlo bajando e instalando el Yagarto, herramienta libre bajo Windows, la catedra no usa esta herramienta por lo tanto no puede dar soporte.