Está en la página 1de 10

Microcontroladores y Laboratorio Docente: Ing. Roger Guachalla Narváez - xoroger@yahoo.

es

G02: Compilador GNU GCC – Procesadores STMicroelectronics


2.0 Objetivos
 Entender el concepto de Software Libre
 Revisar las características del compilador GNU
 Conocer las familias y series de procesadores de STMicroelectronics

2.1 ¿Qué es software libre?


Software libre (free software) es un programa informático donde el usuario propietario del programa tiene la
libertad de copiarlo, modificarlo, redistribuirlo y distribuirlo para el beneficio de una comunidad.
Software libre no significa que sea gratuito, aunque también pueden serlo. Software libre viene de libertad o
‘libertad de expresión’ y conlleva 4 libertades fundamentales para considerarse un software libre:
 libertad de ejecutar el programa no importando el propósito que se tenga.
 libertad de acceso al código fuente: esto significa la posibilidad de estudiar y modificar el programa.
 libertad de redistribuir el programa
 libertad de distribuir copias de versiones modificadas.
Los softwares libres son asociados generalmente a la gratuidad, pero la comercialización de softwares libres también
es común y cumple un rol importante en la mejora sistematizada de programas.
Los softwares libres también se caracterizan o se conocen porque pueden ser descargadas, generalmente
gratuitamente, a través de Internet. Algunos ejemplos de software libres son:
 LINUX: sistema operativo
 Libre Office: análogo a los programas Office de Windows que es software propietario.
 Gimp: editor de imágenes
 Ubuntu: sistema operativo
 VLC: reproductor multimedia
Las ventajas de un software libre es su bajo costo y su flexibilidad de personalización y modificación si existe algún
error. La desventaja de un software libre es precisamente la modificación, ya que para una persona que no tenga
conocimientos mínimos de programación no sabría qué hacer si un error aparece.
Video: Entrevista en español con Richard Stallman "Software Libre"
https://www.youtube.com/watch?v=onrIApj3Cjs
2.2 Compilador GNU GCC
GCC es un compilador para GNU considerado estándar para los Sistemas Operativos derivados de UNIX, de Código
abierto o también de Sistemas Operativos propietarios, como Mac OS X.
La sigla GCC significa GNU Compiler Collection (Colección de compiladores GNU). Como su nombre indica es una
colección de compiladores y admite diversos lenguajes: C, C++, Objetive C, Fortran, Ada y Java.
El compilador se distribuye bajo la licencia GPL (General Public License) lo que lo hace de libre distribución: se
pueden hacer copias de él y regalarlas o venderlas siempre que se incluya el Código fuente (o se indique cómo
conseguirlo) y se mantenga la licencia.
Existen versiones para prácticamente todos los sistemas operativos. En el desarrollo de este compilador participan
cientos de voluntarios de todo el mundo.

2.2.1 Historia
El autor original del Compilador de C de GNU (GCC) es Richard Stallman, el fundador del Proyecto GNU.
El Proyecto GNU fue iniciado en 1984 para crear un sistema operativo basado en software libre similar a UNIX y, así
promover la libertad y la cooperación entre usuarios de ordenadores y programadores. Cualquier sistema operativo
basado en UNIX necesita un compilador de C, y no había compiladores libres en ese momento, el Proyecto GNU
debía desarrollar uno desde cero. Este trabajo fue financiado por donaciones de individuos y compañías a través de
la Free Software Foundation, una organización sin ánimo de lucro destinada a dar soporte al Proyecto GNU.
La primera entrega de GCC fue hecha en 1987. Siendo el primer compilador portable para optimizar ANSI C liberado
como software libre. Desde este momento GCC ha llegado a ser uno de las más importantes herramientas en el
desarrollo de software libre. Un avance importante en el compilador llega con la serie 2.0 en1992, que añade la
capacidad de compilar C++. En 1997, se creó una rama experimental del compilador (EGCS) para mejorar la
optimización y el soporte de C++. Después de este trabajo, EGCS fue adoptado como la principal línea de desarrollo
de GCC y, estas funcionalidades llegaron a estar ampliamente disponibles en la versión3.0 de GCC en 2001.
A través del tiempo GCC ha sido extendido para dar soporte a muchos lenguajes adicionales, incluyendo Fortran,
ADA, Java y Objective-C. El acrónimo GCC es ahora usado para referir al “GNU Compiler Collection” (Colección de
Compiladores de GNU). Su desarrollo está guiado por el GCC Steering Committee, un grupo compuesto de
representantes de las comunidades de usuarios de GCC en la industria, la investigación y la academia.

2.2.2 Características importantes de GCC


 Ante todo, GCC es un compilador portable —se ejecuta en la mayoría de las plataformas disponibles hoy, y
puede producir salidas para muchos tipos de procesadores. Además de procesadores usados en
ordenadores personales, también soporta microcontroladores, DSPs y CPUs de 64 bits.
 GCC no es solo un compilador nativo —también es un compilador cruzado produciendo archivos ejecutables
para un sistema diferente desde el que GCC está siendo usado. Esto permite compilar software para
sistemas embebidos que no son capaces de ejecutar un compilador. GCC está escrito en C con un fuerte
enfoque hacia la portabilidad, y puede compilarse a sí mismo, así puede ser adaptado a nuevos sistemas
fácilmente.
 GCC tiene múltiples frontends, para realizar ‘parsing’ (análisis de sintaxis) en diferentes lenguajes. Los
programas en cada lenguaje pueden ser compilados de manera cruzada, para cualquier arquitectura. Por
ejemplo, un programa en ADA puede ser compilado para un microcontrolador, o un programa en C para un
supercomputador.
 GCC tiene un diseño modular, permitiendo que el soporte para nuevos lenguajes y arquitecturas sea añadido
fácilmente. Añadir un nuevo frontend a GCC habilita el uso de este lenguaje en cualquier arquitectura y
proporciona que estén disponibles facilidades (tales como librerías) en tiempo de ejecución. De manera
similar, si se añade soporte para una nueva arquitectura ́este se vuelve disponible para todos los lenguajes.
 Finalmente, y de manera más importante, GCC es software libre, distribuido bajo la GNU General Public
License (GNU GPL). Esto significa que se tiene la libertad para usar y modificar GCC, como con todo el
software de GNU. Si se necesita soporte para un nuevo tipo de CPU, un nuevo lenguaje, o una nueva
funcionalidad es posible añadirla uno mismo o contratar a alguien para mejorar GCC de manera
personalizada.
Más aún, hay libertad para compartir cualquier mejora hecha a GCC. Como resultado de esta libertad, se pueden
usar las mejoras hechas a GCC por otras personas. Las muchas funcionalidades ofrecidas por GCC hoy muestran
cómo esta libertad de cooperar funciona en nuestro beneficio, y en el de cualquiera que use GCC.
2.2.3 Proceso de compilación
Para pasar de un Programa fuente escrito por un humano a un Archivo ejecutable es necesario realizar cuatro etapas
en forma sucesiva: Preprocesado, Compilación, Ensamblado y Enlazado.

Ejemplo de compilación
Código fuente
Como ejemplo, se usará un código fuente dentro de un archivo llamado "main.c", donde ".c" es la extensión que
significa que el archivo está escrito en C.

En color rosa se encuentra la directiva del preprocesador #include que le dice al compilador que incluya el archivo de
encabezado stdio.h
En azul están los comentarios sobre el código, estos son útiles para recordar lo que el código realmente hace.
Realmente no se lo necesita en un programa tan pequeño, pero es una buena práctica incluirlos.
Luego se tiene el punto de entrada, la función main (). Significa que el programa comenzará ejecutando las
declaraciones que están dentro del bloque de esta función, es decir, entre las llaves. Aquí, solo hay dos
declaraciones: una que imprimirá el mensaje "Hola, mundo", y otra que le dice al programa que "devuelva" 0 si salió
o terminó correctamente. Entonces, una vez compilado, al ejecutar e programa, se verá la frase “Hello, World”.
Para que el código main.c sea ejecutable, se necesita ingresar el comando ‘gcc main.c’, y el proceso de compilación
pasará por los cuatro pasos que contiene.
1) Preprocesado
El preprocesador (Pre-Processor) tiene varias funciones:
 elimina todos los comentarios en el (los) archivo (s) fuente
 incluye el código de los archivos de encabezado, (archivos con extensión .h) que contienen las declaraciones
de funciones y definiciones de macros en C.
 reemplaza las macros (fragmentos de código a los que se les ha dado un nombre) por sus valores
La salida de este paso se almacenará en un archivo con extensión ‘.i, por lo que aquí estará en main.i
Para generar este archivo se usa la opción “-E” con el comando gcc seguido del archivo fuente:

El resultado es el archivo main.i

2) Compilación
El Compilador (Compiler) transforma el Código C en el Lenguaje ensamblador propio del Procesador de nuestra
máquina.
El compilador tomará el archivo preprocesado y generará código IR (Representación intermedia), por lo que esto
producirá un archivo ".s". El resultado es el código ensamblador en este paso de compilación.

Para generar este archivo se usa la opción “-S” con el comando gcc seguido del archivo fuente:

El resultado es el archivo main.s


3) Ensamblado
El Ensamblador (Assembler) transforma el programa escrito en Lenguaje ensamblador a Código objeto, un Archivo
binario en Lenguaje de máquina ejecutable por el Procesador. Esto producirá un archivo con la extensión ‘.o’
Para generar este archivo se usa la opción “-c” con el comando gcc seguido del archivo fuente:

El resultado es el archivo main.o (no es observable en un editor ASCII)

4) Enlazado
El vinculador (Linker) crea el archivo ejecutable final, en binario (.bin), y puede desempeñar dos funciones:
 vincular todos los archivos de origen juntos, es decir, todos los demás códigos de objeto del proyecto. Por
ejemplo, si se desea compilar main.c con otro archivo llamado secundario.c y convertirlos en un solo
programa.
 vincular llamadas a funciones con sus definiciones. El enlazador sabe dónde buscar las definiciones de
funciones en las librerías.

2.3 Familias y Series de procesadores STMicroelectronics


STMicroelectronics ofrece una increíble variedad de microcontroladores (MCU) y microprocesadores (MPU). El lugar
más útil para comenzar es en su página de Microcontroladores y Microprocesadores.

https://www.st.com/en/microcontrollers-microprocessors.html
Como se puede observar, STMicroelectronics tiene unidades de microcontroladores de 8 bits (MCU), unidades de
microprocesadores de 32 bits (MPU), MCU de 32 bits y MCU de 32 bits diseñadas para uso automotriz.

La amplia gama de productos de microcontroladores de ST abarca desde MCU robustas y económicas de 8 bits hasta
microcontroladores Cortex®-M basados en Arm® de 32 bits con una amplia selección de periféricos. Su amplitud
garantiza que los ingenieros de diseño encuentren la combinación de rendimiento, eficiencia energética y seguridad
que requiere su aplicación.

En esta asignatura, nos centraremos en las MCU de 32 bits.

2.3.1 Familias de Microcontroladores


La familia STM32 de microcontroladores de 32 bits basados en el procesador Arm® Cortex®-M está diseñada para
ofrecer nuevos grados de libertad a los usuarios de MCU.
Ofrece productos que combinan un rendimiento muy alto, capacidades en tiempo real, procesamiento de señal
digital, operación de baja potencia / bajo voltaje y conectividad, al tiempo que mantiene la integración total y la
facilidad de desarrollo. Esta gama de microcontroladores STM32, basada en un núcleo estándar de la industria, viene
con una amplia variedad de herramientas y software para apoyar el desarrollo de proyectos, lo que hace que esta
familia de productos sea ideal tanto para proyectos pequeños como para plataformas de extremo a extremo.

2.3.2 Series de la familia Mainstream


La familia de microcontroladores de 32 bits se divide, a su vez, en 4 categorías:
 High-performance (Alto Rendimiento)
 Mainstream (Grupo principal)
 Ultra-low-power (Consumo de energía ultra-bajo)
 Wireless (Inalámbrico)
Esto nos ayuda a determinar qué microcontrolador se debe usar según la aplicación requerida.
Dentro de la categoría Mainstream, se tienen varias opciones. Se puede elegir entre:
 Serie STM32F0: Basado en la arquitectura ARM Cortex-M0. Dispositivos muy económicos y un buen lugar
para comenzar si se viene del mundo de los microcontroladores de 8 y 16 bits.
Esta serie es una atractiva alternativa de MCU de 32 bits a los microcontroladores de 8 y 16 bits para los
ingenieros que buscan preparar su plataforma de productos a prueba de futuro y estandarizar su desarrollo
en torno a los núcleos Arm Cortex-M0 estándar de la industria.
 Serie STM32GO: Basado en ARM Cortex-M0 +, funciona de manera similar a M0, pero tiene algunas
características adicionales para permitir la operación de baja potencia.
Es una nueva generación de microcontroladores eficientes basados en núcleos Arm Cortex-M0 + que ofrecen
una actualización en reducción de costos, rendimiento, consumo e integración de la lista de materiales.
Dispone de una cartera más amplia de paquetes y memorias, a la vez que presenta los elementos esenciales
de la familia STM32 y es particularmente adecuada para aplicaciones sensibles al costo.
 Serie STM32F1: Basado en ARM Cortex-M3. Estos microcontroladores generalmente tienen más velocidad,
memoria y periféricos que sus primos Cortex-M0.
Esta seria, pionera de la familia STM32 de MCU Arm® Cortex de 32 bits, ofrece un alto rendimiento con
periféricos de primera clase combinados con un alto nivel de integración a precios accesibles con una
arquitectura simple y herramientas fáciles de usar.
 Serie STM32F3: Basado en ARM Cortex-M4. La arquitectura M4 es muy similar a la arquitectura M3 con
funciones adicionales de procesamiento de señal digital (DSP), como una unidad de punto flotante de
hardware (FPU) e instrucciones en ensamblador especializadas (por ejemplo, MAC acumulación múltiple).
Esta seria, con su amplia selección de periféricos analógicos avanzados, permite el control en tiempo real
más exigente para aplicaciones industriales y de consumo.
 Serie STM32G4: Basado en ARM Cortex-M4. Similar al F3 con aún más potencia: hasta 170 MHz. El puerto
USB Type-C también está disponible en muchas de las series G4.
Esta serie sirve a todas las aplicaciones donde se requiere un conjunto periférico analógico avanzado y/o
combinado con CPU de alto rendimiento.

STMicroelectronics ha trabajado para que la transición entre su línea sea lo más fluida posible. Los
microcontroladores que vienen en el mismo paquete a menudo son compatibles pin por pin. Si se está trabajando
con un STM32F0 y se descubre que se está quedando sin recursos en el controlador, se puede (en la mayoría de los
casos) utilizar una serie F1 con el mismo tipo de empaquetadura en su lugar, y simplemente funcionará.
2.4 Entorno de desarrollo TrueStudio for STM32
TrueSTUDIO es utilizado por grandes corporaciones, pequeñas y medianas empresas, desarrolladores
independientes, investigadores, estudiantes y aficionados alrededor del mundo.

 Gratis para descargar y usar incluso para proyectos comerciales


 Sin sistema de licencias, sin artículos molestos ni pancartas comerciales
 Amplia compatibilidad con placa y dispositivo STM32
 Tutoriales en video, documentación y foros de discusión disponibles

Características principales:

 IDE centrado en STM32: Compatible con dispositivos STM32 y placas de desarrollo.


 Estándares abiertos: Basado en Eclipse, CDT, GCC y GDB. Fácil de ampliar.
 Compilar y construir: compilador, ensamblador, enlazador y C / C ++ altamente optimizado.
 Editor: Edición de código, navegación, estilo, visualización de estructura y más.
 Analizador de compilación / memoria: Vea la utilización de la memoria RAM y FLASH de su última compilación
 Vea el tamaño total, memoria usada y libre.
 Analizador de Stack (pila): Calcula el uso de la pila en función del programa compilado y vinculado, y presenta
información sobre el uso de la pila para ayudarlo a encontrar problemas.
 Depuración de uno y varios núcleos: Admite sondas de depuración populares como ST-Link, SEGGER, P&E micro.
 Gestión de proyectos: Asistente de proyectos, importadores, herramientas de configuración y más.
 Análisis de fallas: Encuentre rápidamente el por qué, el qué y el dónde de las fallas graves. Vea por qué ocurrió la
falla y vaya directamente al código infractor y a los registros afectados.
 Depuración: Lleve la depuración de STM32 a un nuevo nivel con estas herramientas de visualización en tiempo
real. Rastree datos, eventos, excepciones, historial de memoria y más.
 Depuración compatible con RTOS: vea el estado de los objetos RTOS como semáforos durante la depuración.
Soporte para FreeRTOS.
2.5 Herramienta STM32 CubeMX
Usaremos la aplicación CubeMX GUI para instalar y configurar el hardware y los periféricos de bajo nivel. También
permite configurar el árbol de reloj del microcontrolador para decidir las distintas velocidades de reloj del sistema,
los buses y los periféricos.
Al final del proceso de configuración, genera la carpeta del proyecto en el directorio especificado. Luego, haciendo
un clic es código es autogenerado en el IDE y se puede comenzar a desarrollar el proyecto de inmediato.

2.6 Entorno de desarrollo Todo-en-Uno STM32CubeIDE


En diciembre del 2017 la empresa ST compró el IDE (Entorno de Desarrollo Integrado) de la empresa Atollic, el
TrueSTUDIO que estaba basado en Eclipse y lo hizo gratuito para todos los usuarios.
El 2 de mayo de 2019 no habiendo pasado ni año y medio desde la compra de Atollic, ST anuncia la descontinuación
del IDE de Atollic y la creación del primer IDE oficial de ST, el STM32CubeIDE
Este nuevo IDE constituye la unificación del CubeMX, que es un generador de código base de ST, con TrueSTUDIO.
Programar en STM32CubeIDE es como usar CubeMX y TrueSTUDIO, pero en un entorno de programación donde se
han unificado: un editor de código, un compilador y un depurador (debug) todo ello bajo una misma interfaz gráfica.
STM32CubeIDE es una plataforma de desarrollo C/C ++ avanzada que permite la configuración de periféricos, la
generación del código, compilación del código y depuración (Debug) para microcontroladores y microprocesadores
STM32.

Características principales:
1) Integra las características de STM32CubeMX
o Admite la selección de microcontroladores y microprocesadores STM32
o Configuración de pin, reloj, periférico y middleware
o Creación de proyecto y generación de código de inicialización.
2) Basado en ECLIPSE / CDT, con la ayuda de la función de complemento ECLIPSE, proporciona el compilador
GNU C / C ++ para la cadena de herramientas ARM incluyendo el soporte del depurador GDB
3) Otras funciones avanzadas de depuración:
o Núcleo de CPU, registros periféricos y ventana de memoria
o Ventana de monitoreo variable en tiempo real
o Análisis del sistema y seguimiento en tiempo real.
o Herramienta de análisis de errores de CPU
4) Soporta depurador ST-Link y J-Link
5) Apoya proyectos de Atollic TrueStudio
6) Admite múltiples sistemas operativos, incluidos Windows, Linux y MacOS, solo funciona en 64 bits

2.7 Informe escrito individual


A. Realizar un RESUMEN, de un mínimo de 3 páginas y escrito a mano, del video “¿Entrevista en
español con Richard Stallman "Software Libre"
https://www.youtube.com/watch?v=onrIApj3Cjs
o Incluir Carátula
o Incluir fotografías de cada página e insertarlas en el informe.
o Usar
 Letra legible
 Espaciado ‘normal’ (No letra de “KINDER”)
Fecha de Entrega: jueves 17 de septiembre de 2020

También podría gustarte