Sortie de débogage via printf sur un CPU Cortex-M3, stands BKPT instruction + de confusion à propos de JTAG et sw ports

J'ai un Keil ULINK2 émulateur USB box attaché à la JTAG connecteur sur mon conseil, qui fonctionne bien avec la CPU Cortex-M3 de bord (TI/Stellaris/LuminaryMicro LM3S de la série). Il semble que les deux JTAG et une SWJ-DP port partagent les mêmes broches (et donc le connecteur de votre conseil d'administration) sur ces Processeurs. L'un ne semble pas avoir l'IMT (printf) de la capacité, de l'autre.

Le précédent firmware gens ont toujours utilisé stdio à UART (port série), mais j'ai besoin de le port série libérées, de sorte que les messages de débogage ne pas interférer avec d'autres données envoyées/reçues vers/depuis le port série, donc j'ai besoin de messages de trace d'aller voir ailleurs. Malheureusement, je n'ai qu'un port série sur ce forum. J'ai pensé que l'IMT (Trace), la fonctionnalité de ce CPU signifiait que je pouvais envoyer debug printf messages directement à mon debugger/IDE (Keil uVision). Le TI/Stellaris CPU documentation de l'appel de cette fonction 'câble Série JTAG Debug Port (SWJ-DP)', qui, je l'ai lu, c'est certainement une fonctionnalité implémentée dans la Keil uVision IDE.

L'ajout d'un printf message à mon code de mon code pour verrouiller en place quand j'ai démarrer le débogage. Le blocage semble être ici le RTL bibliothèques sont liés dans mon application, dans la fonction _sys_open, à la BKPT instruction:

                 _sys_open:
  0x00009D7A B50E      PUSH     {r1-r3,lr}
  0x00009D7C E9CD0100  STRD     r0,r1,[sp,#0]
  0x00009D80 F7FFFC0F  BL.W     strlen (0x000095A2)
  0x00009D84 9002      STR      r0,[sp,#0x08]
  0x00009D86 4669      MOV      r1,sp
  0x00009D88 2001      MOVS     r0,#0x01
>>0x00009D8A BEAB      BKPT     0xAB
  0x00009D8C BD0E      POP      {r1-r3,pc}

Ci-dessus semble être une partie de code appelé par __rt_lib_init_stdio_1.

Ce qui se passe? Je ne sais pas ce BKPT. Je suppose qu'il soulève un point d'arrêt logiciel qui devrait ensuite être traitées par le débogueur? Ne pas le Keil/BRAS ULINK2 de logiciels et de matériel déjà être configuré pour cela? Est-il une astuce pour rendre debug printf travailler avec Keil JTAG/sw ports?

Je ne suis pas certain que la différence entre une ds et port JTAG. sw signifie quoi exactement, je crois qu'il fait référence à l'un des deux modes possibles pour le JTAG connecteur physique sur un conseil d'administration, où JTAG est un classique, mais plus limitée en mode sans laisser de traces, de soutien, et sw mode ajoute trace soutien sans ajouter de broches pour le connecteur JTAG mise en page? Mais c'est des systèmes embarqués, où le fait d'être cryptique est la norme. Je suis nouveau sur le Cortex-M3 de développement, et beaucoup de ce genre de choses est nouveau pour moi, depuis le vieux ARM7TDMI jours. Mais la Keil uVision affiche le message suivant: "l'IMT ne fonctionne qu'avec port SW, pas avec JTAG". Est SW un autre port physique que vous avez la conception de votre conseil d'administration? (Je suis en utilisant une conception personnalisée d'application générale, et non pas un développement starter conseil d'administration.)

[Googler autour me laisse sur le fait que _sys_open et certains pragma __use_no_semihosting_swi et quelque chose d'autre sont intimement impliqués dans ce puzzle, BRKPT instructions dans la mémoire ROM peut-être des BRAS variante sur le SWI ("logiciel d'interruption') BRAS d'instruction.]

OriginalL'auteur Warren P | 2010-07-11