J'ai un émulateur USB Keil ULINK2 attaché au connecteur JTAG de ma carte, qui fonctionne bien avec le Cortex- M3 CPU embarqué (série TI/Stellaris/LuminaryMicro LM3S). Il semble que les deux ports JTAG et SWJ-DP partagent les mêmes broches (et donc le connecteur sur votre carte) sur ces processeurs. L'un ne semble pas avoir la capacité ITM (printf), l'autre le fait. Les précédents utilisateurs de firmware ont toujours utilisé stdio sur UART (port série), mais j'ai besoin que le port série soit libéré pour que les messages de débogage n'interfèrent pas avec les autres données envoyées/reçues vers/depuis le port série, donc je besoin pour les messages de suivi d'aller ailleurs. Malheureusement, je n'ai qu'un seul port série sur ce forum. Je pensais que la fonctionnalité ITM (Trace) dans cette CPU signifiait que je pouvais envoyer des messages de débogage printf directement à mon débogueur/IDE (Keil uVision). La documentation de la CPU TI/Stellaris appelle cette fonction 'Port de Debug JTAG Serial Wire (SWJ-DP)', support pour lequel j'ai lu, est définitivement une fonctionnalité implémentée dans l'IDE de Keil uVision. L'ajout d'un message printf à mon code provoque le blocage de mon code lorsque je lance le débogage. Le blocage semble être ici dans les bibliothèques RTL qui sont liés à ma demande, dans la fonction _sys_open, à l'instruction BKPT:Sortie du débogage via printf sur une CPU Cortex-M3, blocage à l'instruction BKPT + confusion sur les ports JTAG et sw
_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}
Ce qui précède semble faire partie du code appelé par __rt_lib_init_stdio_1
.
Que se passe-t-il? Je ne sais pas ce que fait BKPT. Je suppose qu'il soulève un point d'arrêt logiciel qui devrait ensuite être géré par le débogueur? Le logiciel et le matériel Keil/ARM ULINK2 ne doivent-ils pas déjà être configurés pour cela? Y a-t-il un truc pour faire fonctionner debug printf avec les ports Keil JTAG/sw? Je ne sais pas quelle est la différence entre un port sw et JTAG. sw signifie quoi exactement, je crois qu'il se réfère à l'un des deux modes possibles pour le connecteur physique JTAG sur une carte, où JTAG est un mode classique mais plus limité sans support de trace, et le mode sw ajoute le support de trace sans ajouter de pins au JTAG disposition du connecteur? Mais ce sont des systèmes embarqués, où être cryptique est la norme. Je suis nouveau au développement Cortex-M3, et beaucoup de ces choses sont nouvelles pour moi depuis les vieux jours ARM7TDMI. Mais le Keil uVision imprime ce message: "ITM ne fonctionne qu'avec le port SW, pas avec JTAG". SW est-il un port physique différent que vous devez concevoir sur votre carte? (J'utilise une carte d'application conçue sur mesure, pas une carte de démarrage de développement.)
[recherche sur Google me laisse autour de sur le fait que _sys_open
et certains pragma __use_no_semihosting_swi
et quelque chose d'autre sont intimement impliqués dans ce casse-tête, des instructions BRKPT en ROM Cela peut être une variante ARM de l'instruction ARM SWI ('software-interruption').]
Oui. C'est ce que signifie semi-hébergement! Printf-redirigé-à travers JTAG. –