Quelle est la différence fonctionnelle entre un débogueur en circuit et un émulateur en circuit?

12

Les émulateurs en circuit (abrégé ICE) se vantent de leurs fonctionnalités de débogage impressionnantes, et proposent également des étiquettes de prix élevées.

Les débogueurs en circuit (abrégé ICD) peuvent faire la plupart des choses qu'un ICE peut faire, mais coûtent souvent beaucoup moins.

Je sais que de cette manière dans le temps, les ICE retiraient la puce problématique de la prise et la remplaçaient par un câble émulateur, mais avec les packages QFN, BGA et TQFP fragiles modernes, il semble que la plupart des produits s'appellent eux-mêmes débogueurs "ICE" sont connectés à un en-tête de débogage de la même manière qu'un ICD.

Voici quelques exemples de produits qui utilisent "ICE" dans le nom:

Il existe également des produits JTAG 'ICE "de plusieurs fournisseurs. Notez que je ne les remets pas car ils ne sont pas physiquement en circuit, mais je les escompterais s'ils ne fonctionnent pas comme un véritable ICE.

Dans quel type de tâches de développement ai-je besoin d'un ICE, et quand dois-je me contenter d'un ICD? Supposons que je veuille parcourir mon code et ne pas utiliser de LED et d'instructions printf ().

Quels sont quelques exemples de problèmes que vous avez résolus avec un ICE mais que vous n'auriez pas pu (de façon réaliste) résoudre sans lui?

Kevin Vermeer
la source

Réponses:

19

Un ICE (In-Circuit Emulator) remplace la puce cible. Il agit comme la vraie puce du reste du circuit, mais contient toutes sortes de crochets pour que vous puissiez voir ce qui se passe, définir des points de rupture, charger un nouveau code, saisir des traces, etc. Un ICD (In-Circuit Debugger) utilise un matériel de débogage spécial a été ajouté à la puce cible à cet effet et essaie de vous offrir une capacité de type ICE. Malheureusement, les gens du marketing ont commencé à s'impliquer et ont essayé de redéfinir ces termes de longue date dans leur tentative de vous tromper en leur faisant croire que leur produit est meilleur que le suivant. RealIce de Microchip en est un exemple particulièrement flagrant. C'est réel, mais la seule chose qui ne l'est pas, c'est une glace.

Un vrai ICE (pas le RealIce) est le meilleur environnement de débogage en circuit. Malheureusement, ceux-ci ont à peu près disparu en raison du coût élevé de la fabrication d'une version spéciale de liaison de la puce cible pour une utilisation dans l'ICE, et du fait que les vitesses sont devenues si élevées que le retrait de la puce est problématique. Un autre problème est qu'un ICE nécessite que la puce cible soit dans un socket, ou nécessite un adaptateur spécial monté à la place de la puce cible pour que l'ICE puisse se connecter à ses lignes.

Aujourd'hui, nous sommes donc coincés avec des DCI. Heureusement, ils font la plupart des choses que vous voudriez faire avec un ICE. Ils ont même un avantage en ce sens que le code s'exécute sur la puce cible réelle, et non quelque chose essayant de ressembler à la puce cible. L'inconvénient est qu'ils nécessitent des ressources sur puce et ne sont donc pas complètement transparents pour votre code et votre matériel comme le sont les ICE. L'ICD doit avoir accès aux lignes de débogage, qui peuvent souvent avoir plusieurs rôles. Vous ne pouvez pas utiliser ces broches dans d'autres rôles lors du débogage. La quantité de circuits de débogage intégrés dans chaque partie doit être limitée à une petite fraction du total, sinon le coût serait trop élevé, de sorte que les fonctionnalités doivent être compromises. Une fonctionnalité intéressante qui serait trop coûteuse à ajouter sur chaque puce est la véritable capacité de trace, car cela nécessite un grand tampon RAM.

Chaque problème peut être finalement résolu avec une variété d'outils. Ce n'est pas si vous pouvez le résoudre, mais combien de temps et combien d'efforts cela prend. Lorsque j'utilisais régulièrement des ICE (Microchip ICE-2000 et ICE-4000), je n'utilisais pas souvent la fonction de trace, mais lorsque j'utilisais d'autres moyens, cela aurait été beaucoup plus coûteux. Parfois, vous avez un bug où une variable a soudainement la mauvaise valeur. Vous passez par le code et tout va bien et la routine qui manipule la variable semble tout faire correctement, mais lorsque vous l'exécutez, les choses se compliquent et vous trouvez cette variable mise à la poubelle. La cause est un autre code avec un mauvais pointeur, un dépassement de tampon, une incompatibilité de pile ou similaire. Avec un ICE, vous pouvez définir un point d'arrêt sur la variable en cours de modification,

La plupart du temps, un ICD fera assez bien l'affaire. Surtout avec de grosses puces, les quelques broches dédiées au débogage ne sont pas vraiment un problème. De nos jours, j'utilise principalement RealIce pour le débogage. Il est beaucoup plus stable et moins feuilleté que l'ICD2. Vous apprenez à vivre avec.

Olin Lathrop
la source