Estou programando uma placa de descoberta STM32 Cortex M0 (32F0308DISCOVERY) usando OpenOCD, arm-none-eabi-gcc e gdb. Eu queria saber se existe alguma maneira simples de registrar mensagens de depuração por SWD. Eu li sobre a opção de semi-hospedagem, mas isso parece exigir a inclusão de newlib ou outras grandes bibliotecas. (Existe apenas um flash de 64k disponível.) Existe alguma maneira mais leve de registrar texto por SWD ou usar o UART como única opção prática?
15
Respostas:
Obrigado pelas indicações, markt e chris-stratton. A opção de semi-hospedagem acabou sendo bastante direta. Consegui encontrar a fonte para algumas rotinas simples de log que podem enviar mensagens para o console do OpenOCD. Vou publicá-los aqui, pois (i) eles precisaram de alguma modificação para funcionar e (ii) acho que essa informação não é super fácil de encontrar para pessoas que estão apenas começando.
Primeiro, o código D aqui é facilmente adaptado para fornecer a seguinte função C:
Exemplo de chamada do send_command para gravar uma sequência no console do OpenOCD:
Segundo, a função putChar dada nos comentários aqui funciona bem, exceto que eu tive que adicionar um '#' antes de 0x03:
Para observar a saída dessas funções, inicio o OpenOCD e, em seguida, conecto usando arm-none-eabi-gdb da seguinte maneira:
Observe que as mensagens aparecem no stdout do processo OpenOCD, não no console do GDB.
fonte
putchar
tão simples quantovoid putchar(char c) { send_command(3,&c); }