Estoy programando una placa de descubrimiento STM32 Cortex M0 (32F0308DISCOVERY) usando OpenOCD, arm-none-eabi-gcc y gdb. Me preguntaba si hay alguna forma directa de registrar mensajes de depuración a través de SWD. He leído acerca de la opción de semihosting, pero esto parece requerir la incorporación de newlib u otras bibliotecas grandes. (Solo hay una memoria flash de 64k disponible). ¿Hay alguna forma más liviana de registrar texto a través de SWD, o está usando el UART la única opción práctica?
15
Respuestas:
Gracias por los punteros, Markt y Chris-Stratton. La opción de semihosting resultó ser bastante sencilla. Logré encontrar la fuente para un par de rutinas de registro simples que pueden enviar mensajes a la consola OpenOCD. Los publicaré aquí ya que (i) requirieron alguna modificación para funcionar y (ii) creo que esta información no es muy fácil de encontrar para las personas que recién comienzan.
Primero, el código D aquí se adapta fácilmente para proporcionar la siguiente función C:
Ejemplo de llamar a send_command para escribir una cadena en la consola OpenOCD:
Segundo, la función putChar dada en los comentarios aquí funciona bien, excepto que tuve que agregar un '#' antes de 0x03:
Para ver la salida de estas funciones, primero inicio OpenOCD, luego me conecto usando arm-none-eabi-gdb de la siguiente manera:
Tenga en cuenta que los mensajes aparecen en la salida estándar del proceso OpenOCD, no en la consola GDB.
fuente
putchar
tan simple comovoid putchar(char c) { send_command(3,&c); }