1.4 ARM Keil μVision5 MDK (2)
Depuración de código con Keil μVision5
En esta sección se describe el proceso de depuración de código con Keil μVision5.
¿Qué es la depuración de código?
La depuración es el proceso de identificar y corregir errores en el código fuente de un programa. En el contexto de la programación embebida, la depuración permite observar el comportamiento del microprocesador en tiempo real, facilitando la identificación de problemas y la verificación del funcionamiento correcto del software.
Proceso de depuración:
Para depurar un programa en Keil μVision5, se siguen los siguientes pasos:
Compilación del código: Antes de iniciar la depuración, es necesario compilar el código fuente para generar el archivo ejecutable.
Configuración del depurador: Esto se hace en el menú de opciones del proyecto
, en la pestaña Debug. Asegúrate de seleccionar el
depurador adecuado (CMSIS-DAP en nuestro caso).Iniciar la sesión de depuración.
Observación del comportamiento: Durante la sesión de depuración, se pueden observar variables, registros y memoria del microprocesador. También se pueden establecer puntos de interrupción (breakpoints) para detener la ejecución del programa en líneas específicas de código.
Control de Debug:
La tabla siguiente muestra los controles utilizados en tareas de depuración:
|
|
|
|
|
|
|
|
Debug |
Breakpoint |
Run |
Stop |
Step-Into |
Step-Over |
Step-Out |
Reset |
- Debug:
Inicia o detiene la sesión de depuración.
- Breakpoint:
Inserta o elimina un punto de interrupción en la línea actual del código (línea donde se encuentra el cursor). También es posible insertar un breakpoint haciendo clic en el margen izquierdo del editor de código (zona gris oscuro).
Cuando el programa se detiene en un breakpoint, la instrucción correspondiente todavía no se ha ejecutado.
Cortex M4 permite hasta 6 breakpoints de código.
- Run:
Ejecuta el programa de forma continua hasta encontrar el siguiente punto de interrupción, o hasta que el usuario detenga manualmente la ejecución con el botón
Stop.- Stop:
Detiene inmediatamente la ejecución del programa. El punto exacto donde se ha detenido el programa se marca visualmente con una flecha amarilla, la instrucción correspondiente aparece resaltada.
- Step-Into:
Ejecuta únicamente la instrucción actual, y si esta instrucción es una llamada a función, el depurador entrará dentro del código de dicha función, deteniéndose en su primera línea.
- Step-Over:
Ejecuta la instrucción actual completa, y si la instrucción contiene una llamada a función, ejecuta la función completa sin mostrar su código interno y se detiene en la siguiente instrucción después de la llamada.
- Step-Out:
Cuando estamos dentro de una función, esta acción ejecuta el resto del código de la función actual hasta que finalice y regresa al punto desde donde fue llamada, deteniéndose en la siguiente instrucción después de la llamada.
- Reset:
Reinicia el microprocesador, borrando el estado actual y volviendo al inicio del programa. Es útil para reiniciar el sistema sin necesidad de detener la sesión de depuración.
Depurando la aplicación lab1.0
Para depurar la aplicación lab1.0, sigue estos pasos:
Compila el código fuente: Asegúrate de que el código fuente de la aplicación
lab1.0esté correctamente compilado y no contenga errores. Utiliza el menú para compilar.Conecta el sistema de desarrollo: Asegúrate de que el sistema de desarrollo FM4-176L-S6E2CC-ETH esté conectado a tu ordenador mediante el cable USB.
Inicia la sesión de depuración: Haz clic en el botón de depuración
en la barra de herramientas o utiliza el menú
. Se inicia la sesión como
se muestra en la siguiente imagen:
La flecha amarilla indica la línea actual del código donde se ha detenido el programa. La instrucción resaltada es la que se ejecutará a continuación. Se muestran tanto el código C como el ensamblador correspondiente, nos fijaremos en el código C.
Establece puntos de interrupción:
lab1.0hace parpadear un LED con un periodo de 1 segundo. En las pruebas que se han realizado no se ha observado que el LED parpadease. Para analizar la ejecución del código, estableceremos un punto de interrupción en la línea 68 y otro en la línea 73, donde se llama a la funcióncustom_delay().Ejecuta el programa: Haz clic en el botón de ejecución
para
iniciar la ejecución del programa. El programa se detendrá en el primer
punto de interrupción. Repite esta operación varias
veces y observa el comportamiento del LED.Para tener mas información, puedes medir el tiempo de ejecución entre los dos puntos de interrupción utilizando los temporizadores disponibles en Keil:
Medida de tiempo ejecución:Keil μVision5 permite medir tiempo de ejecución utilizando dos timers, se accede a ellos desde la barra de estado (marcado en azul en la figura anterior):
Pasa el ratón por encima para ver todos los temporizadores disponibles. Haz clic derecho sobre el campo para mostrar o reiniciar un timer.
Los temporizadores se reinician de la siguiente manera:
Elapsed Time (t0):
No se reinicia al hacer RESET.
Se reinicia al comenzar una nueva sesión de depuración.
No puede reiniciarse manualmente.
Esta información es idéntica al campo de registro SEC de la ventana de registros.
Stop Watch (t1, t2):
Se reinicia al hacer RESET de la CPU.
Puede reiniciarse manualmente.
Estos temporizadores pueden usarse para medir el tiempo de ejecución de una porción específica del código.
Depuración de la aplicación lab1.0
Utilizando el debugger encuentra los problemas en el código:
Indica con precisión cuáles son los problemas.
Explica el procedimiento seguido para detectarlos.
Corrige el error en el código:
Modifica el código fuente para corregir los errores detectados.
Comprueba que el led parpadea con un periodo de 1s.
Verifica con el osciloscopio que el periodo de la señal
P7Des de 1s.




