Explicación detallada del artefacto de depuración de chip integrado: J-Link RTT

"  Real Time Transfer (RTT para abreviar) es una herramienta para el monitoreo y la interacción de sistemas integrados lanzada por Segger. Integra SWO (salida de registro de depuración en tecnología de depuración SWD) y otras capacidades, y tiene un rendimiento extremadamente alto. "

Real Time Transfer (RTT para abreviar) es una herramienta para el monitoreo e interacción de sistemas integrados lanzada por Segger. Integra SWO (salida de registro de depuración en tecnología de depuración SWD) y otras capacidades, y tiene un rendimiento extremadamente alto. Las características técnicas de RTT son las siguientes:

  • Capacidad de comunicación bidireccional con aplicación integrada de destino

  • Tasas de transferencia de alta velocidad que no afectan el comportamiento en tiempo real de las aplicaciones integradas

  • Use el canal de depuración para la comunicación (equivalente a no tener que ocupar interfaces periféricas adicionales como GPIO)

  • No requiere hardware ni pines adicionales en el sistema integrado de destino

  • Se admite cualquier modelo de J-Link (la lista de modelos de J-Link y la comparación pueden consultarse en https://www.segger.com/products/debug-probes/j-link/models/model-overview/)

  • Puede ser compatible con chips de la serie ARM Cortex-A/R/M y compatible con RISC-V y Renesas RX

  • Proporcione el código de implementación de RTT completo

01

¿Qué es RTT?

RTT puede habilitar la comunicación bidireccional de alta velocidad sin afectar el comportamiento en tiempo real de las aplicaciones integradas. Puede generar información de depuración y comandos de control relacionados con la entrada desde el exterior. RTT puede admitir múltiples canales en ambas direcciones de transmisión (salida y entrada), y se pueden usar diferentes canales para diferentes propósitos.

Una implementación común es usar un canal por dirección de transferencia, para la E/S de depuración:

Al usar la herramienta J-Link RTT Viewer en la PC, puede haber múltiples terminales virtuales en la herramienta, que se pueden usar para imprimir información diferente (como una ventana para salida estándar, una ventana para salida de mensaje de error y una ventana para la salida de información de depuración).

Es muy fácil usar RTT en la aplicación de destino. El código de implementación se puede descargar gratis y se puede integrar en cualquier aplicación existente.

Con la comunicación RTT, se puede usar cualquier J-Link. Una manera fácil de comunicarse a través de la terminal (canal 0) es usar un cliente Telnet o similar para crear una conexión a localhost:19021 mientras una conexión a J-Link está activa (por ejemplo, a través de una sesión de depuración).

02

Herramientas relacionadas con RTT

La herramienta RTT está incluida en el paquete de software J-Link, y el paquete de instalación correspondiente se puede descargar según las necesidades del sistema (dirección: https://www.segger.com/downloads/jlink/). Tanto Windows como MAC son instalado con una interfaz gráfica Muy simple, aquí hay una descripción complementaria de los detalles de instalación bajo el sistema Linux, tomando como ejemplo el sistema Raspberry Pi:

# Primero descargue el paquete de instalación .tgz y luego descomprímalo de acuerdo con los siguientes pasos 
$ mkdir -p ~/opt/SEGGER 
$ cd ~/opt/SEGGER 
$ tar xf ~/Downloads/JLink_Linux_V684_arm64.tgz 
$ chmod aw ~/opt /SEGGER/ JLink_Linux_V684_arm64 
$ ls -l ~/opt/SEGGER/JLink_Linux_V684_arm64 

# Lo siguiente es la configuración de udev 
$ sudo cp 99-jlink.rules /etc/udev/rules.d/ 

# Reinicie el sistema o escriba manualmente el siguiente comando para activar las nuevas reglas entrarán en vigor 
$ sudo udevadm control -R 
$ sudo udevadm trigger --action=remove --attr-match=idVendor=1366 --subsystem-match=usb 
$ sudo udevadm trigger --action=add --attr- partido=idVendor=1366 - -subsistema-partido=usb

Visor J-Link RTT

J-Link RTT Viewer es la principal aplicación de GUI de Windows para utilizar todas las funciones de depuración de RTT. RTT Viewer se puede usar solo, abrir una conexión a J-Link o usar en paralelo mientras se ejecuta una sesión de depuración. RTT Viewer es compatible con todas las funciones principales de RTT:

  • Terminal de salida del canal 0

  • Entrada para el canal 0

  • Admite hasta 16 terminales virtuales en un canal de destino

  • Salida de caracteres controlable: control de color de fuente, borrado de mensajes de consola

  • Registro de datos del canal 1, etc.

Para obtener instrucciones detalladas sobre J-Link RTT Viewer, consulte el documento de la guía del usuario de J-Link (

https://wiki.segger.com/UM08001_J-Link_/_J-Trace_User_Guide#RTT)。

Con respecto a los múltiples terminales virtuales de J-Link RTT Viewer, la descripción aún es relativamente vaga, y los ejemplos correspondientes se usan aquí para ilustrar.

  1. Primero abra la herramienta J-Link RTT Viewer, y se le pedirá que seleccione el dispositivo correspondiente para conectarse.Después de conectarse, verá el estado conectado de RTT Viewer

  1. Luego se pueden abrir múltiples terminales virtuales en RTT Viewer

  1. Impresión de registro de depuración en el código de la aplicación incrustada

#include "SEGGER_RTT.h" 

int main() 
{ 
    // Inicializa RTT 
    SEGGER_RTT_Init(); 
    
    // Ingresa al ciclo principal 
    while (1) { 
      // Establece el puerto virtual 0 y los registros de salida. Si no se establece, se usará la Terminal 0 por defecto 
      SEGGER_RTT_SetTerminal(0); 
      SEGGER_RTT_printf(0, "Hola, SEGGER RTT Terminal 0!\r\n"); 
      // Establecer el puerto virtual 1 y el registro de salida 
      SEGGER_RTT_SetTerminal(1); 
      SEGGER_RTT_printf(0, "Hola, SEGGER RTT Terminal 1 !\r\n"); 
      // Establecer el puerto virtual 2 y el registro de salida 
      SEGGER_RTT_SetTerminal(2); 
      SEGGER_RTT_printf(0, "Hola, SEGGER RTT Terminal 2!\r\n"); 
      Delay_ms(1000); 
      // Otro Puede generar registros en diferentes colores en RTT Viewer. Para la definición de color, consulte SEGGER_RTT.h 
      // El siguiente es el resultado del registro en fuente roja
      // SEGGER_RTT_printf(0, RTT_CTRL_TEXT_RED"Hola, SEGGER RTT Terminal 0!\r\n"); 
    } 
}

  1. Ejecute en un dispositivo integrado y conéctese a la computadora a través de J-Link, y vea registros de diferentes terminales virtuales a través de la herramienta J-Link RTT Viewer

 

Cliente J-Link RTT

J-Link RTT Client es un cliente Telnet que intentará automáticamente volver a conectarse a la conexión J-Link cuando se cierre la sesión de depuración.J-Link RTT Client es parte del paquete de software J-Link.

Registrador J-Link RTT

Con J-Link RTT Logger, los datos del Up-Channel 1 se pueden leer y grabar en un archivo de registro. Este canal se puede usar para enviar datos de análisis de rendimiento al host. J-Link RTT Logger abre un canal para J-Link dedicado conexión que se puede usar sola sin una sesión de depuración. Esta aplicación también forma parte del paquete de software J-Link. La lista de comandos admitida por J-Link RTT Logger es la siguiente:

03

Cómo funciona RTT

La implementación de RTT utiliza la arquitectura de Control Block, que administra la lectura y escritura de datos a través de la memoria en el sistema integrado de destino.

注:Descriptores de búfer ascendente: Destino -> Host

Descriptores de búfer hacia abajo: Host -> Destino

La parte gris de la figura anterior indica que hay datos

El bloque de control contiene la ID, que es conveniente para que J-Link busque en la memoria.Cada canal disponible (el terminal virtual mencionado anteriormente) adopta la arquitectura Ring Buffer para describir el caché y el estado del canal. Se puede configurar el número máximo de canales disponibles, y también se puede configurar cada Buffer.Los Buffers de enlace ascendente y descendente se procesan por separado. Cada canal se puede configurar como modo de bloqueo o modo sin bloqueo.

En el modo de bloqueo, cuando el búfer está lleno, la aplicación esperará, lo que hará que la aplicación se bloquee, pero asegúrese de que los datos no se pierdan.

En el modo sin bloqueo, solo se escriben los datos que cumplen con el tamaño del búfer, o no se escribe ningún dato, y el resto se descartará. Este método es adecuado para la ejecución de aplicaciones en tiempo real.

Cuando se activa RTT, como al conectarse a una aplicación usando J-Link a través de RTT Viewer, J-Link buscará automáticamente el bloque de control SEGGER RTT en áreas de memoria conocidas del sistema de destino integrado. La aplicación host también puede establecer la dirección específica del área de RAM o del bloque de control para acelerar la detección.

04

Rendimiento de RTT

La siguiente es una comparación de las tasas de RTT, SWO y Semihosting. Los datos se basan en la medición real en STM32F407:

La siguiente es una comparación de tasas de RTT con diferentes modelos de J-Link (la tasa de JTAG es diferente) y el tamaño de la memoria caché del bloque de control asignada a RTT en el sistema integrado:

El búfer del canal ascendente RTT puede ser relativamente pequeño, y el tamaño mínimo requerido del búfer se puede aproximar por la cantidad de datos escritos en un milisegundo y la cantidad máxima de datos escritos en una operación de escritura. Si los datos se envían con poca frecuencia, el búfer debe tener suficiente espacio para contener los datos enviados en una sola escritura. Si los datos se envían con más frecuencia, el tamaño del búfer debería ser suficiente para la cantidad máxima de datos escritos en 1 milisegundo. El siguiente gráfico muestra el tamaño mínimo de búfer requerido al enviar diferentes cantidades de datos, distribuidos uniformemente, cada 100 us y cada 1 ms:

El código de implementación de RTT requiere alrededor de 500 bytes de espacio ROM, y la ocupación de RAM está relacionada con la cantidad de búferes en el bloque de control, ID de 24 bytes + bloque de control de canal único de 24 bytes. Cada canal requiere memoria para algunos búferes. Según la carga de E/S, el tamaño recomendado para el canal ascendente es de 1 kByte y el tamaño recomendado para el canal descendente es de 16 a 32 bytes.

05

Implementación de código RTT

El código SEGGER RTT está escrito en ANSI C para una fácil integración en cualquier aplicación integrada. RTT se puede usar a través de una API simple y fácil de usar. Incluso es posible anular la función estándar printf() para usar RTT. El uso de RTT minimiza el tiempo empleado por printf() y permite que la información de depuración se imprima en la PC host mientras la aplicación realiza tareas críticas en tiempo real.

La implementación de SEGGER RTT incluye una implementación simple de printf() que se puede usar para escribir cadenas formateadas sobre RTT. SEGGER_RTT_Printf() es más pequeño que la mayoría de las implementaciones de printf de la biblioteca estándar y no requiere montón, solo una cantidad configurable de pila. La lectura y la escritura se hacen seguras para subprocesos mediante el uso de Lock() y Unlock(), se puede establecer la cantidad de búferes y el tamaño del búfer del terminal. Las siguientes son las funciones de interfaz proporcionadas por RTT para la integración integrada:

Referencias:

https://www.segger.com/products/debug-probes/j-link/technology/about-real-time-transfer/

https://wiki.segger.com/UM08001_J-Link_/_J-Trace_User_Guide#RTT

https://wiki.segger.com/RTT

Supongo que te gusta

Origin blog.csdn.net/suxiang198/article/details/126534730
Recomendado
Clasificación