<?xml version="1.0" encoding="utf-8"?><!DOCTYPE article  PUBLIC '-//OASIS//DTD DocBook XML V4.4//EN'  'http://www.docbook.org/xml/4.4/docbookx.dtd'><article><articleinfo><title>WebHome/HerramientasProgramacion</title><revhistory><revision><revnumber>32</revnumber><date>2016-08-03 22:31:05</date><authorinitials>GuillermoSteiner</authorinitials></revision><revision><revnumber>31</revnumber><date>2016-08-03 22:18:56</date><authorinitials>GuillermoSteiner</authorinitials></revision><revision><revnumber>30</revnumber><date>2016-08-03 21:54:35</date><authorinitials>GuillermoSteiner</authorinitials></revision><revision><revnumber>29</revnumber><date>2014-07-28 20:36:33</date><authorinitials>GuillermoSteiner</authorinitials></revision><revision><revnumber>28</revnumber><date>2014-07-28 20:35:45</date><authorinitials>GuillermoSteiner</authorinitials></revision><revision><revnumber>27</revnumber><date>2014-05-21 16:51:36</date><authorinitials>GuillermoSteiner</authorinitials></revision><revision><revnumber>26</revnumber><date>2013-09-10 19:41:08</date><authorinitials>GuillermoSteiner</authorinitials></revision><revision><revnumber>25</revnumber><date>2013-09-10 19:39:57</date><authorinitials>GuillermoSteiner</authorinitials></revision><revision><revnumber>24</revnumber><date>2012-11-05 12:31:20</date><authorinitials>GuillermoSteiner</authorinitials></revision><revision><revnumber>23</revnumber><date>2012-11-05 12:29:16</date><authorinitials>GuillermoSteiner</authorinitials></revision><revision><revnumber>22</revnumber><date>2012-10-05 13:25:52</date><authorinitials>GuillermoSteiner</authorinitials></revision><revision><revnumber>21</revnumber><date>2011-05-18 18:27:53</date><authorinitials>GuillermoSteiner</authorinitials></revision><revision><revnumber>20</revnumber><date>2010-12-15 17:45:24</date><authorinitials>GuillermoSteiner</authorinitials></revision><revision><revnumber>19</revnumber><date>2010-10-18 15:20:11</date><authorinitials>TiN</authorinitials></revision><revision><revnumber>18</revnumber><date>2010-09-20 19:31:09</date><authorinitials>GuillermoSteiner</authorinitials></revision><revision><revnumber>17</revnumber><date>2010-09-20 19:30:10</date><authorinitials>GuillermoSteiner</authorinitials></revision><revision><revnumber>16</revnumber><date>2010-09-20 19:29:08</date><authorinitials>GuillermoSteiner</authorinitials></revision><revision><revnumber>15</revnumber><date>2010-09-16 21:14:42</date><authorinitials>SantiagoPerez</authorinitials></revision><revision><revnumber>14</revnumber><date>2010-09-09 14:08:45</date><authorinitials>GuillermoSteiner</authorinitials><revremark>Se cambia nombre desde &quot;HerramientasProgramacion&quot;</revremark></revision><revision><revnumber>13</revnumber><date>2010-09-09 14:08:03</date><authorinitials>GuillermoSteiner</authorinitials></revision><revision><revnumber>12</revnumber><date>2010-09-09 14:06:20</date><authorinitials>GuillermoSteiner</authorinitials></revision><revision><revnumber>11</revnumber><date>2010-09-08 21:08:41</date><authorinitials>GuillermoSteiner</authorinitials></revision><revision><revnumber>10</revnumber><date>2010-09-08 21:08:04</date><authorinitials>GuillermoSteiner</authorinitials></revision><revision><revnumber>9</revnumber><date>2010-09-07 18:06:54</date><authorinitials>GuillermoSteiner</authorinitials></revision><revision><revnumber>8</revnumber><date>2010-09-07 18:04:46</date><authorinitials>GuillermoSteiner</authorinitials></revision><revision><revnumber>7</revnumber><date>2010-06-10 13:16:26</date><authorinitials>TiN</authorinitials></revision><revision><revnumber>6</revnumber><date>2010-06-04 16:40:35</date><authorinitials>GuillermoSteiner</authorinitials></revision><revision><revnumber>5</revnumber><date>2010-06-04 16:39:52</date><authorinitials>GuillermoSteiner</authorinitials></revision><revision><revnumber>4</revnumber><date>2010-06-04 16:38:43</date><authorinitials>GuillermoSteiner</authorinitials></revision><revision><revnumber>3</revnumber><date>2010-06-04 16:36:35</date><authorinitials>GuillermoSteiner</authorinitials></revision><revision><revnumber>2</revnumber><date>2010-06-04 16:35:53</date><authorinitials>GuillermoSteiner</authorinitials></revision></revhistory></articleinfo><section><title>Herramientas de Programación</title><para>Antes de conocer un poco sobre las herramientas de programación que posee los microcontroladores ARM, debemos repasar un par de conceptos importantes. </para><section><title>GNU-ARM</title><para><emphasis>GNU toolchain</emphasis> 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. </para><para>El toolchain de GNU juega un rol vital en el desarrollo del kernel de Linux, BSD y software para sistemas embebidos. </para><para>Proyectos incluidos en el toolchain de GNU: </para><itemizedlist><listitem><para>GNU make: Automation tool for compilation and build; </para></listitem><listitem><para>GNU Compiler Collection (GCC): Suite of compilers for several programming languages; </para></listitem><listitem><para>GNU Binutils: Suite of tools including linker, assembler and other tools; </para></listitem><listitem><para>GNU Debugger (GDB): Code debugging tool; </para></listitem><listitem><para>GNU build system (autotools): </para><itemizedlist><listitem><para>Autoconf </para></listitem><listitem><para>Autoheader </para></listitem><listitem><para>Automake </para></listitem><listitem><para>Libtool </para></listitem></itemizedlist></listitem></itemizedlist><para><emphasis>GNU ARM toolchain</emphasis>  Se refiere a la utilización de estas herramientas para generar código ARM. </para></section><section><title>Compilación</title><para>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. </para><para><ulink url="https://ciii.frc.utn.edu.ar/TecnicasDigitalesII/WebHome/HerramientasProgramacion/TecnicasDigitalesII/WebHome/HerramientasProgramacion/IntroduccionCompiladores#">Introducción a Compiladores</ulink> </para></section><section><title>Enlazado</title><para>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. </para><para><ulink url="https://ciii.frc.utn.edu.ar/TecnicasDigitalesII/WebHome/HerramientasProgramacion/TecnicasDigitalesII/WebHome/HerramientasProgramacion/LinkerScript#">Introducción a Enlazadores y LinkerScript</ulink> </para></section><section><title>Gestor de Proyecto (MAKE)</title><para>make es una utilidad que nos permite automatizar el mantenimiento de un proyecto, esto es: </para><itemizedlist><listitem><para>Determinar automáticamente qué bloques de un gran proyecto se tienen que recompilar, y los comandos para realizar esto. </para></listitem><listitem><para>Enlazar el proyecto. </para></listitem><listitem><para>Crear archivos secundarios de soporte. </para></listitem><listitem><para>etc. </para></listitem></itemizedlist><para>Desplegar todas las capacidades de <emphasis>make</emphasis> 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 <emphasis>make</emphasis>; 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 <emphasis>make</emphasis> 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 <emphasis>make</emphasis> sería: </para><itemizedlist><listitem><para>Un conjunto de archivos relacionados entre sí de alguna manera fija. </para></listitem><listitem><para>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 &quot;dependan&quot;. </para></listitem><listitem><para>Un intérprete de comandos donde ejecutar <emphasis>make</emphasis> y donde <emphasis>make</emphasis> pueda ejecutar los programas definidos por las acciones a realizar sobre los archivos. </para></listitem><listitem><para>Un archivo llamado convencionalmente <emphasis>makefile</emphasis> del cual <emphasis>make</emphasis> lee las relaciones y las acciones a realizar sobre los archivos. </para></listitem><listitem override="none"><para>El archivo <emphasis>makefile</emphasis> está compuesto básicamente por una sucesión de <emphasis role="strong">reglas</emphasis> que tienen la siguiente estructura: </para></listitem></itemizedlist><screen><![CDATA[target ... : prerequisites ...
        command
        ...
        ...]]></screen></section></section><section><title>Herramientas</title><para>Para realizar nuestro proyecto en ARM, necesitaremos una serie de herramientas que nos permitirán compilar, linkear, debuging, manejar nuestro proyecto, etc. </para><para>Necesitaremos entonces, conocer las posibilidades que tenemos en la elección de estas herramientas. </para><section><title>Herramientas Pagas</title><para>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 &quot;click&quot; sobre botones, crear compilar y grabar en nuestro micro un proyecto. Ventajas: </para><itemizedlist><listitem><para>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). </para></listitem><listitem><para>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. </para></listitem><listitem><para>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. </para></listitem></itemizedlist><para>Desventajas: </para><itemizedlist><listitem><para>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. </para></listitem><listitem><para>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, </para></listitem></itemizedlist><para>A continuación vemos algunos de estos entornos </para><informaltable><tgroup cols="5"><colspec colname="col_0"/><colspec colname="col_1"/><colspec colname="col_2"/><colspec colname="col_3"/><colspec colname="col_4"/><tbody><row rowsep="1"><entry colsep="1" rowsep="1"><para><emphasis role="strong">Nombre</emphasis> </para></entry><entry colsep="1" rowsep="1"><para><emphasis role="strong">Firma</emphasis> </para></entry><entry colsep="1" rowsep="1"><para><emphasis role="strong">IDE</emphasis> </para></entry><entry colsep="1" rowsep="1"><para><emphasis role="strong">Compilador</emphasis> </para></entry><entry colsep="1" rowsep="1"><para><emphasis role="strong">Web Site</emphasis> </para></entry></row><row rowsep="1"><entry colsep="1" rowsep="1"><para>KEIL </para></entry><entry colsep="1" rowsep="1"><para>ARM Company </para></entry><entry colsep="1" rowsep="1"><para>RealView Microcontroller Development Kit </para></entry><entry colsep="1" rowsep="1"><para>RealView </para></entry><entry colsep="1" rowsep="1"><para><ulink url="http://www.keil.com/arm/"/> </para></entry></row><row rowsep="1"><entry colsep="1" rowsep="1"><para>IAR </para></entry><entry colsep="1" rowsep="1"><para>IAR System </para></entry><entry colsep="1" rowsep="1"><para>IAR Embedded Workbench for ARM </para></entry><entry colsep="1" rowsep="1"><para>Propio </para></entry><entry colsep="1" rowsep="1"><para><ulink url="http://www.iar.com/ewarm"/> </para></entry></row><row rowsep="1"><entry colsep="1" rowsep="1"><para>CrossWorks for ARM </para></entry><entry colsep="1" rowsep="1"><para>Rowley Associates </para></entry><entry colsep="1" rowsep="1"><para>Cross Studio </para></entry><entry colsep="1" rowsep="1"><para>GCC </para></entry><entry colsep="1" rowsep="1"><para><ulink url="http://www.rowley.co.uk/arm/index.htm"/> </para></entry></row><row rowsep="1"><entry colsep="1" rowsep="1"><para>Sourcery G++ </para></entry><entry colsep="1" rowsep="1"><para>CodeSourcery </para></entry><entry colsep="1" rowsep="1"><para>Sourcery G++ IDE </para></entry><entry colsep="1" rowsep="1"><para>GCC </para></entry><entry colsep="1" rowsep="1"><para><ulink url="http://www.codesourcery.com/sgpp"/> </para></entry></row><row rowsep="1"><entry colsep="1" rowsep="1"><para>Embest </para></entry><entry colsep="1" rowsep="1"><para>EMBEST INFO&amp;TECH CORPORATION </para></entry><entry colsep="1" rowsep="1"><para>Embest IDE for ARM </para></entry><entry colsep="1" rowsep="1"><para>GCC </para></entry><entry colsep="1" rowsep="1"><para><ulink url="http://www.embedinfo.com/English/Product/idemain.asp"/> </para></entry></row><row rowsep="1"><entry colsep="1" rowsep="1"><para>ARM Development Tool </para></entry><entry colsep="1" rowsep="1"><para>Gao Tek co. </para></entry><entry colsep="1" rowsep="1"><para>GAO IDE for ARM Development Tools Suite A/B </para></entry><entry colsep="1" rowsep="1"><para>GCC </para></entry><entry colsep="1" rowsep="1"><para><ulink url="http://www.gaotek.com/index.php"/> </para></entry></row><row rowsep="1"><entry colsep="1" rowsep="1"><para>ARM development tools </para></entry><entry colsep="1" rowsep="1"><para>ImageCraft Creations Inc. </para></entry><entry colsep="1" rowsep="1"><para>ARM development tools IDE </para></entry><entry colsep="1" rowsep="1"><para>ICCV7 for ARM </para></entry><entry colsep="1" rowsep="1"><para><ulink url="http://www.imagecraft.com/devtools_ARM.html"/> </para></entry></row></tbody></tgroup></informaltable></section><section><title>Herramientas Libres</title><para>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. </para><para>Podemos aclarar brevemente las ventajas y desventajas  Ventajas </para><itemizedlist><listitem><para>Proyecto sin restricciones ni costos </para></listitem><listitem><para>Total control, conozco perfectamente cada una de las partes que posee mi proyecto y puedo modificarla a mi gusto </para></listitem></itemizedlist><para>Desventajas </para><itemizedlist><listitem><para>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. </para></listitem></itemizedlist><para>IDE Libres </para><informaltable><tgroup cols="2"><colspec colname="col_0"/><colspec colname="col_1"/><tbody><row rowsep="1"><entry colsep="1" rowsep="1"><para>YAGARTO IDE basado en GNU-ARM e interfase Eclipse, disponible solo para Windows </para></entry><entry colsep="1" rowsep="1"><para><ulink url="http://www.yagarto.de/"/> </para></entry></row></tbody></tgroup></informaltable><para>paginas con pequeños script o tutoriales para compilar el GNU-ARM </para><informaltable><tgroup cols="2"><colspec colname="col_0"/><colspec colname="col_1"/><tbody><row rowsep="1"><entry colsep="1" rowsep="1"><para>OpenHardware </para></entry><entry colsep="1" rowsep="1"><para><ulink url="http://openhardware.net/Embedded_ARM/Toolchain/"/> </para></entry></row><row rowsep="1"><entry colsep="1" rowsep="1"><para>rod.info </para></entry><entry colsep="1" rowsep="1"><para><ulink url="http://rod.info/ARM7Micro"/> </para></entry></row><row rowsep="1"><entry colsep="1" rowsep="1"><para>gnu-arm-toolchain-installer </para></entry><entry colsep="1" rowsep="1"><para><ulink url="http://mcuprogramming.com/forum/arm/gnu-arm-toolchain-installer/"/> </para></entry></row></tbody></tgroup></informaltable></section></section><section><title>Entorno de Programación</title><para>En la programación del microcontrolador, se utilizará el proyecto GNU-ARM bajo Linux.  </para><para>La descripción del proyecto y la información para instalarlo se encuentra en:<ulink url="https://ciii.frc.utn.edu.ar/TecnicasDigitalesII/WebHome/HerramientasProgramacion/TecnicasDigitalesII/WebHome/HerramientasProgramacion/HLaunchpad#">Herramientas de programación</ulink> </para><para>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. </para></section></article>