Que método simples posso usar para depurar um processador incorporado sem porta serial ou vídeo?

StackOverflow https://stackoverflow.com/questions/69492

  •  09-06-2019
  •  | 
  •  

Pergunta

Temos um pequeno sistema embarcado sem nenhuma porta serial ou de vídeo (ou seja,não podemos gerar texto via printf).
Gostaríamos de acompanhar o progresso do nosso código através da sequência de inicialização.
Existem algumas coisas simples que podemos fazer para ajudar com isso.
Ele não executa nenhum sistema operacional e a plataforma de hardware é um tanto personalizável.

Foi útil?

Solução

A solução mais simples e escalável são os LEDs de estado.Alterne os LEDs com base nas ações, seja em formato binário ou quando determinadas ações ocorrem, se você puder restringir seu foco.

O mais poderoso será um dispositivo JTAG de hardware.Você nem precisa definir pontos de interrupção - simplesmente poder parar o aplicativo e inspecionar o estado da memória pode ser suficiente.Observe que algumas plataformas de hardware não suportam opções "sofisticadas", como relógios de memória ou pontos de interrupção de hardware.O primeiro geralmente é contornado com a parada constante do processador e da leitura da memória (transforma seu sistema de 10 MHz em um sistema de 1 kHz), enquanto o último às vezes é executado usando substituição de código (substitua a instrução alvo por um salto diferente), o que às vezes mascara outros problemas .Esteja ciente desses problemas e a quais processadores embarcados eles se aplicam.

Outras dicas

Existem algumas estratégias que você pode empregar para ajudar na depuração:

Se você tiver pinos de saída disponíveis, poderá conectá-los a LEDs (ou a um osciloscópio) e alternar os pinos de saída para alto/baixo para indicar que determinados pontos foram alcançados no código.
Por exemplo, 1 piscada pode ser o programa carregado, 2 piscadas são inicializadas pelo foozbar, 3 piscadas estão aceitando entradas...

Se você tiver várias linhas de saída disponíveis, poderá usar um LED de 7 segmentos para transmitir mais informações (números/letras em vez de piscar).

Se você tiver recursos para ler a memória e tiver alguma RAM disponível, poderá usar a função sprint para fazer uma depuração semelhante ao printf, mas em vez de ir para uma tela/porta serial, ela será gravada na memória.

Depende do tipo de depuração que você está tentando fazer - especialmente se você está procurando um método temporário de rastreamento ou se está tentando fornecer uma ferramenta que possa ser usada como uma indicação de status durante a vida do projeto (ou produto).

Por um lado, rastreamento detalhado da fonte e depuração de um depurador no circuito (por exemplo.jtag) pode ser muito útil.No entanto, eles são mais úteis quando a depuração requer a configuração de pontos de interrupção e a investigação de memória e registros - o que traz poucos benefícios quando você está lidando com problemas críticos de tempo.

Onde você precisar determinar o estado do programa sem ter um impacto significativo na execução do seu sistema, o uso de LEDs conectados a pinos de E/S sobressalentes será útil.Eles também podem ser usados ​​como entrada para um osciloscópio de armazenamento digital (DSO) ou analisador lógico.Esta técnica pode ser tornada mais poderosa selecionando padrões únicos de pulsos que serão identificáveis ​​no DSO.

Porém, para uma ferramenta de depuração mais versátil, uma porta serial é uma boa solução.Para economizar custos e espaço na PCB, você pode achar útil usar um módulo plug-in que contém os conversores RS232.

Se você está tentando fornecer uma indicação de status de longo prazo como parte da operação normal do seu produto, os LEDs são novamente um método simples e barato.Entretanto, nesta situação, é melhor escolher padrões de pulsos que sejam lentos o suficiente para serem facilmente identificados pela inspeção visual.Com isso, você aprenderá com o tempo um padrão específico que representa o comportamento "normal".

Você pode emular facilmente comunicações seriais (UARTs) usando bit banging dos pinos IO do sistema.Prenda-o em um dos pinos da placa e conecte-o a um conversor RS232 (conversores TTL para RS232 são fáceis de comprar ou construir), que vai para a porta serial do seu PC.

Um depurador JTAG também é uma opção, embora seja complicado de configurar.

Se você não possui JTAG, os LEDs sugeridos pelos outros são uma ótima idéia - embora você tenda a acabar em um ciclo de teste/reconstrução para tentar rastrear o problema.

Se você tiver mais tempo, pinos de hardware sobressalentes e memória de sobra, poderá sempre fazer um bit-bash em uma interface serial de baixa velocidade.Achei isso muito útil no passado.

Outros sugeriram algumas idéias muito boas usando pinos de saída, então não vou sugerir isso, embora possa ser uma solução muito boa e muito econômica.Se o seu orçamento e processador alvo suportarem, um sistema de rastreamento de hardware (seja um emulador antigo ou um BDM sofisticado com suporte para rastreamento de rastreamento de barramento) pode ser ótimo para esse tipo de coisa.É muito caro.

A idéia de usar um software UART bit-banged é boa, mas é necessário algum esforço para escrever um e você também precisa de alguns temporizadores e interrupções livres.Se o seu hardware possuir qualquer outra interface serial não utilizada (SPI, I2C, ..), usá-la seria mais fácil.Com um pequeno microcontrolador você pode converter a interface para RS-232.

Se você precisar fazer uma batida de bits, criar uma serial síncrona pode ser uma alternativa mais simples, pois não seria crítico para o tempo.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top