Upload
others
View
3
Download
0
Embed Size (px)
Citation preview
Sistemas EmbebidosProgramación ARM
Sistemas Embebidos
Programación ARM Cortex-M Ángel Perlesr08
Sistemas EmbebidosProgramación ARM
Contenido• Objetivos• Arquitectura• El arranque• Ajustes del proyecto
• stack y heap• optimización C• target• módulos HAL
• Depuración• la sonda• un ejemplo• Cagada: volatile
Sistemas EmbebidosProgramación ARM
Objetivos
• Conocer el ciclo de arranque de un ARM Cortex-M• Saber configurar el entorno de ejecución C• Conocer el sistema de depuración de ARM Cortex-M
• (Rehacer el próximo curso)
Sistemas EmbebidosProgramación ARM
Arquitectura
• Visto básicamente en asignaturas previas
• Un vistazo rápido al mapa de memoria
• ¿Más información sobre laarquitectura?
Sistemas EmbebidosProgramación ARM
El arranque (o “BigBang”)
• En general, un microcontrolador está vació de software• Por tanto, nuestro programa debe responsabilizarse de
• gestionar la operación de “reset”• ajustar las zonas de memoria donde colocar cosas: heap, stack, code
... a estas zonas se las llama segmentos• configurar relojes (osciladores) que marcan el ritmo del sistema• otras milongas ( reguladores, controladores de memoria y bus en
general)• y, por fin, proporcionar la función estándar de C main()
• (es mentira)
Sistemas EmbebidosProgramación ARM
Arranque (o “BigBang”)
• En un ARM Cortex-M, tras un RESET se hace• Ajuste del puntero STACK (la pila) con valor en dir 0x00000000• Ejecución del vector de RESET cuya dir. está en 0x00000004
• La manera fácil de verlo es abrir un proyecto y el archivo startup*.s
Sistemas EmbebidosProgramación ARM
Arranque (o “BigBang”)
• En un ARM Cortex-M, el reset es una petición de interrupción• Por tanto, suponiendo que trabajamos en lenguaje C
• En el handler estará donde empieza todo• Lo primero es SystemInit(), el verdadero comienzo de un programa C• Y después main()
Sistemas EmbebidosProgramación ARM
Arranque (o “BigBang”)
• Lo vemos en directo
Sistemas EmbebidosProgramación ARM
Ajustes del proyecto: stack/heap
• El stack se emplea para almacenar/recuperar el estado de los registros en las llamadas a funciones
• Cuanto más anidadas estén las funciones, más stack se consume• Cuidadín, las interrupciones anidan mucho las funciones• Fuente típica de fallos difíciles e localizar
• SOLUCIÓN: más stack … pero sin pasarse -> necesita más RAM• Ejemplo ajuste en Keil: archivo startup_xxx.s
• Lo vemos en directo …
PopPush
Sistemas EmbebidosProgramación ARM
Ajustes del proyecto: stack/heap
• El heap se emplea para el mecanismo de petición/liberación de memoria dinámica
• En C, por ejemplo, malloc()/free()
• En C++ para la creación dinámica de objetos
Sistemas EmbebidosProgramación ARM
Ajustes del proyecto: optimización C
• El optimizador permite “optimizar el código haciéndolo más rápido y/o pequeño”
• De 0 (no optimiza) … a X (máxima optimización)• En Keil está aquí
Sistemas EmbebidosProgramación ARM
• Qué hace el optimizador … id al manual del compilador
Ajustes del proyecto: optimización C
Sistemas EmbebidosProgramación ARM
Ajustes del proyecto: target
• Ajustes asociados al chip usado … y más
• Microlib -> una reducción de la biblioteca estándar C• Floating point por HW -> hay que habilitar la unidad FPU!
Sistemas EmbebidosProgramación ARM
Ajustes del proyecto: módulos HAL
• En archivo stm32l4xx_hal_conf.h y similares• Configura, por ejemplo, los módulos activos• (Acordarme de meterlo también en el libro un día de estos)
Sistemas EmbebidosProgramación ARM
Depuración
• Diferencia a un juguete (Arduino, p.e.) de algo profesional• Fundamental para localizar errores• ARM Cortex-M es la pera en cuanto a depuración
Sistemas EmbebidosProgramación ARM
Depuración
• Dependiendo del tipo de ARM Cortex-M tendremos más opciones o menos• ARM Cortex-M0 tiene menos opciones• Interfaz JTAG clásico y SW (Serial-Wire) para ahorrar líneas de salida• CoreSight debug: el estado de la CPU y de la memoria puede ser
accedido en vivo (con la CPU funcionando)• 6 breakpoints y 4 watchpoints• ETM (Exxx) para traza de instrucciones y datos basado en DWT• Excepciones (bus fault, memory fault, …) facilitando enormemente la
captura de fallos raros• ITM para emular el “printf()” típico de depuración de código del año de
la pera
Sistemas EmbebidosProgramación ARM
Depuración
• Es real: cómo se conecta físicamente en la placa de prácticas• La “sonda de depuración” es “ST_LINK_V2-1”• NRST: reset del micro• TMS(SWDIO)/TCK(SWCLK): SW bus (PA13 y PA14 se pierden)• SWO: bus ITM para printf() • USART_TX/USART_RX:,puerto serie redirigido al puerto de depuración
No tiene porque estar todo conectado.Recordad placa con pantalla gráfica de II2 y el puente que hicimos.
Sistemas EmbebidosProgramación ARM
Depuración: sonda
• La “sonda de depuración” es crítica• De baratitas incorporadas como la St-Link -> limitada• A “top” que permiten explotar más mecanismos de depuración
• Ejemplo “semi-top” Segger J-Trace• Ejemplo “semi-top” ARM ULINK plus• Echemos un vistazo …
https://store.developer.arm.com/store/debug-probes/ulinkplus-debug-adapter
Sistemas EmbebidosProgramación ARM
Depuración: sonda St-link
• Puesta a punto de la sonda• 1 - Descarga de drivers de St e instalación (siguiendo el libro y ya lo
habéis hecho• 2 – Configuración en el entorno de desarrollo: p.e. Keil
Sistemas EmbebidosProgramación ARM
Depuración: sonda St-link
• Puesta a punto de la sonda: elegir “Settings”• Debug, Trace, Flash download• La sonda tiene que estar conectada (en este caso la placa Nucleo)• Jugamos …
Sistemas EmbebidosProgramación ARM
Depuración: sonda St-link
• Puesta a punto de la sonda: elegir “Settings”• Debug, Trace, Flash download• La sonda se puede encargar también de grabar la flash …
Sistemas EmbebidosProgramación ARM
Depuración: sonda St-link
• Puesta a punto de la sonda: elegir “Settings”• Debug, Trace, Flash download• Qué y cómo se recoge la información de traza … casi ni idea• Cuida “Core Clock”
Sistemas EmbebidosProgramación ARM
Depuración: un ejemplo
• A PARTIR DE HOY NADA DE DARLE AL BOTÓN “RESET”• Veámosla en acción
Sistemas EmbebidosProgramación ARM
Depuración: printf()
• La plantilla está preparada para usar SWO• Redireción del flujo de salida estándar (putc(), printf() …)
https://aperles.blogs.upv.es/2012/06/25/stm32f4-discovery-and-printf-redirection-to-debug-viewer-in-keil/
Sistemas EmbebidosProgramación ARM
Depuración: pifias
• Deberíamos usar siempre nivel optimización 0 durante el desarrollo• O lo sufriremos en la depuración, condiciones de carrera,
funcionamiento extraño …• La herramientas automáticas suelen ponerlo a 3 -> ¡Cámbialo!
• (Nivel de optimización y el “volatile” e ilustrarlo con el examen y el contador de pulsaciones)
-O0 -O3
Sistemas EmbebidosProgramación ARM
Depuración: step-by-step
• Botones de control• Reset, run, step, step-over, run to cursor, step out of the function …
• Command window (ni idea de cómo se usa, pero parece útil)
Sistemas EmbebidosProgramación ARM
Depuración: step-by-step
• Call-stack and locals• De dónde venimos y las variables automáticas creadas• Podemos cambiar la representación entre hexadecimal/decimal/…• ¡Podemos tocar las variables!
Sistemas EmbebidosProgramación ARM
Depuración: step-by-step
• Podemos ojear variables
• O vigilarlas con un “watch”, “memory” y “lógic analyzer”
Sistemas EmbebidosProgramación ARM
Depuración: periféricos
• Estilo “Reference manual” (registros internos)
Sistemas EmbebidosProgramación ARM
Depuración: trazas
• Próximo curso• TO BE CONTINUED …
Sistemas EmbebidosProgramación ARM
Sistemas EmbebidosProgramación ARM
(Cajón de sastre)
• Bip, bip