Qual é a diferença funcional entre um depurador no circuito e um emulador no circuito?

12

Emuladores de circuito (ICE abreviado) ostentam seus incríveis recursos de depuração e também possuem preços altos.

Depuradores no circuito (ICD abreviado) podem fazer a maioria das coisas que um ICE pode fazer, mas geralmente custam muito menos.

Sei que, naquela época, os ICEs removiam o chip com problema do soquete e o substituíam por um cabo emulador, mas pelos modernos pacotes QFN, BGA e TQFP frágeis, parece que a maioria dos produtos se autodenomina "ICE" debuggers estão conectados a um cabeçalho de depuração da mesma maneira que um ICD seria.

Aqui estão alguns exemplos de produtos que usam "ICE" no nome:

Existem também produtos JTAG 'ICE "de vários fornecedores. Observe que não os estou descontando porque eles não estão fisicamente no circuito, mas eu os descartaria se eles não funcionassem como um ICE verdadeiro.

Em que tipo de tarefas de desenvolvimento eu preciso de um ICE e quando devo me contentar com um CDI? Vamos supor que eu queira percorrer meu código e não usar LEDs e instruções printf ().

Quais são alguns exemplos de problemas que você resolveu com um ICE, mas não poderia (realisticamente) resolver sem ele?

Kevin Vermeer
fonte

Respostas:

19

Um ICE (Em-Circuit Emulator) substitui o chip de destino. Ele age como o chip real do restante do circuito, mas possui todos os tipos de ganchos internos para que você possa ver o que está acontecendo, definir pontos de interrupção, carregar novo código, pegar traços, etc. Um ICD (In-Circuit Debugger) usa hardware de depuração especial adicionado ao chip de destino para esse fim e tenta fornecer a você capacidade semelhante ao ICE. Infelizmente, o pessoal de marketing se envolveu e tentou redefinir esses termos de longa data na tentativa de enganar você a pensar que o produto deles é melhor que o próximo. O RealIce da Microchip é um exemplo particularmente flagrante disso. É real, mas a única coisa que não é é um ICE.

Um ICE real (não o RealIce) é o melhor ambiente de depuração no circuito. Infelizmente, eles praticamente desapareceram por causa do alto custo de fazer uma versão especial do chip de destino para uso no ICE, e o fato de as velocidades terem ficado tão altas que tirar qualquer coisa do chip é problemático. Outro problema é que um ICE exige que o chip de destino esteja em um soquete ou requer um adaptador especial montado no lugar do chip de destino para que o ICE possa se conectar às suas linhas.

Hoje, estamos presos aos CDIs. Felizmente, eles fazem a maioria das coisas que você gostaria de fazer com um ICE. Eles ainda têm uma vantagem em que o código está sendo executado no chip de destino real, não em algo que tenta ser como o chip de destino. A desvantagem é que eles exigem recursos no chip, portanto, não são completamente transparentes ao seu código e hardware como um ICE. O ICD precisa acessar linhas de depuração, que geralmente podem ter várias funções. Você não pode usar esses pinos em outras funções durante a depuração. A quantidade de circuitos de depuração incorporada em cada parte deve ser mantida em uma pequena fração do total, caso contrário o custo seria muito alto, portanto, os recursos precisam ser comprometidos. Um recurso interessante que seria muito caro adicionar em todos os chips é a capacidade de rastreamento real, pois isso requer um grande buffer de RAM.

Todo problema pode ser resolvido com uma variedade de ferramentas. Não é se você pode resolvê-lo, mas quanto tempo e quanto esforço é necessário. Quando eu usava ICEs regularmente (Microchip ICE-2000 e ICE-4000), não usava o recurso de rastreamento com frequência, mas quando usava outros meios teria sido significativamente mais caro. Às vezes, você tem um erro em que uma variável repentinamente tem o valor errado. Você percorre o código e está tudo bem, e a rotina que manipula a variável parece fazer tudo certo, mas quando você a executa, eventualmente as coisas são ruins e você encontra essa variável na lixeira. A causa é algum outro código com um ponteiro incorreto, estouro de buffer, incompatibilidade de pilha ou algo semelhante. Com um ICE, você pode definir um ponto de interrupção na variável que está sendo alterada,

Na maioria das vezes, um CDI se sai bem o suficiente. Especialmente com chips grandes, os dois pinos dedicados à depuração não são um grande problema. Atualmente, uso principalmente o RealIce para depuração. É muito mais estável e menos esquisito que o ICD2. Você aprende a viver com isso.

Olin Lathrop
fonte