Os pontos de interrupção são uma ótima maneira de ver como o compilador é executado no seu código. Agora, minha pergunta é: existe a possibilidade de usar pontos de interrupção ao depurar seu código?
Os pontos de interrupção são uma ótima maneira de ver como o compilador é executado no seu código. Agora, minha pergunta é: existe a possibilidade de usar pontos de interrupção ao depurar seu código?
Respostas:
Conforme observado na resposta de Majenko, o Arduino IDE não fornece um mecanismo de ponto de interrupção, mas o Atmel Studio oferece suporte a pontos de interrupção . [*]
No entanto, se você tiver um comutador e um LED, poderá acompanhar o progresso do seu programa de maneira a fornecer alguns dos benefícios dos pontos de interrupção. Você adicionaria uma subrotina, digamos BPReport()
, que através da saída serial ou de um LCD relate valores de variáveis críticas, acenda o LED e aguarde até que o interruptor seja pressionado e liberado, com rejeição. Ligue para sua BPReport()
rotina sempre que quiser um ponto de interrupção incondicional. Para pontos de interrupção condicionais, você pode ter uma rotina BPReportIf(cond)
que chame BPReport()
se cond
for verdadeira. Se você não deseja enviar via serial, use vários LEDs ou um LCD e use vários comutadores se desejar controles de interrupção externos (por exemplo, cond
pode ser um teste de um dos comutadores extras).
[*] Alguns depuradores de hardware modificam o código baixado sempre que os pontos de interrupção são adicionados, alterados ou removidos. Esse uso consumirá a memória flash mais rapidamente do que apenas o download ocasional. Se um chip tiver sido muito usado para essa depuração, não use esse chip em um sistema de produção.
Embora Majenko, sua resposta esteja correta, existem outras opções.
Quanto à depuração real do hardware, conforme declarado por majenko, eu diria:
Uma outra opção de depuração de uma categoria completamente diferente é organizar seu código para que a lógica de decisão (independente do hardware) e a ação (dependente do hardware) sejam completamente separadas.
Em seguida, compile seu esboço como um programa local e depure a "lógica de decisão" em sua máquina local. Este método não permite "depuração de hardware". Este método também permite testes de unidade.
Observe que sua máquina local provavelmente é de 32 ou 64 bits e a maioria dos Arduino são 8 bitters, o que resultará em diferenças nos tipos de dados, o que é um ponto de atenção extra ao usar esse método.
A biblioteca Arduino-Debug fornece um depurador simples no destino para esboços do Arduino. O comando Debug é adicionado diretamente ao esboço. Um shell de comando do depurador é iniciado em pontos de interrupção e asserções.
A captura de tela acima mostra o exemplo de esboço executado em um monitor de saída Arduino Mega com Serial usado pelo aplicativo e Serial1 usado no shell do depurador.
Comandos de depuração de esboço
Comandos de shell de depuração
Todos os comandos do debug shell podem ser abreviados para comandos de caracteres únicos. Por favor, consulte o README para mais detalhes; detalhes da instalação, exemplo de esboço e benchmarking.