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
Vous devez vous connecter pour publier un commentaire.
Celui-ci a été un échec de ma part pour comprendre que stdio n'est pas mis en œuvre, mais plutôt que vous devez fournir votre propre mise en œuvre, généralement réalisée à l'intérieur d'un fichier appelé "reciblage.c". Le nom de fichier est pure convention, mais il est bien documenté (il s'avère que l') à l'intérieur de Keil du uVision/RTLIB documentation
OriginalL'auteur Warren P
Je l'ai fait avec l'EIE, POUAH BRAS de la chaîne, mais le terme semihosting m'amène à croire que la Keil approche est similaire. Il devrait y avoir une option lors de la spécification de la bibliothèque standard de lien pour l'utilisation de semihosting. Qui va compiler/lien dans une autre bibliothèque qui redirige printf /putc à travers le port JTAG pour le débogueur.
Donc d'examiner les options pour le projet dans le Uvision IDE ou dans les scripts. Dans l'EIE de l'éditeur de liens de ligne de commande c'est "--semihosting", mais qui est probablement différente pour les Keil outils.
BKPT est l'instruction des outils insérer dans la source pour déclencher le débogueur. C'est comment les IDE vous permet d'ajouter des points d'arrêt pour le code lorsque le débogueur ne prend pas en charge HW points d'arrêt (ou que vous avez utilisé votre complément d'entre eux déjà).
OriginalL'auteur sbass
SW est un des deux fils de l'interface qui permet d'accéder au débogage des ports sur l'appareil.
Bras ont une .pdf sur le sujet ici:
http://www.arm.com/files/pdf/Low_Pin-Count_Debug_Interfaces_for_Multi-device_Systems.pdf
OriginalL'auteur Captain NedD
De traiter ce problème dans Keil uVision juste aller pour les options de projet. Dans l'onglet Cible/Génération de Code de vérification de l'Utilisation MicroLIB case.
OriginalL'auteur skozbial