¿Es posible redirigir los flujos de impresión al depurador en el sistema Atmel?

¿Es posible configurar stderry/o stdouthacer que cuando se printf()llama a la cadena se muestre en la consola de depuración en Atmel Studio?

Sé que es posible configurar todo para que printf()use el UART o una pantalla LCD o algo más.

He visto indicios de que esto fue posible con los chips AVR32 y los depuradores JTAGICE2, pero eso fue cuando era AVR Studio y AVR32 Studio como IDE separados, cadenas de herramientas, hardware de depuración, etc. En aras de la especificidad, me gustaría hacer esto con un chip AVR de 8 bits y un depurador ATMEL ICE (el sucesor del JTAGICE3). Estoy trabajando con PDI, pero también sería aceptable un protocolo de comunicación alternativo (como JTAG).

Respuestas (1)

Puede enviar mensajes y valores a la ventana de salida con Atmel Studio 7 (podría funcionar con otras versiones, pero estoy ejecutando la versión 7.0.1006 y usando Atmel ICE) haciendo esto:

  1. Cree un punto de interrupción normal donde desee la salida.
  2. Haga clic derecho en el punto de interrupción y seleccione "Acciones".
  3. Se mostrará una ventana debajo de la línea del punto de interrupción, si la casilla de verificación "Acciones" aún no está marcada, márquela haciendo clic en la casilla de verificación, pero debería ser debido al paso 2.
  4. Hay un cuadro de texto con la etiqueta "Registrar un mensaje en la ventana de salida", escriba lo que quiera generar. Esto funciona con texto sin formato si solo desea mostrar algo como "función a ingresada" o simplemente poner el valor que desee entre paréntesis. Un ejemplo de salida de un valor de variable: "El valor de x es {x}", donde x es el nombre de la variable.
  5. Si no desea que la ejecución se detenga, marque "Continuar ejecución" y el programa no se detendrá en el punto de interrupción (como lo haría normalmente).

Además, ¡cuidado con la optimización! Es posible que deba desactivarlo por completo para que su compilación de depuración vea ciertos valores o estados.

Esta solución tiene un inconveniente. Si realiza un solo paso, el depurador establece un punto de interrupción temporal (BP) en la siguiente línea de código e inicia la CPU. Si pasa por alto una llamada de función que pasa el BP preparado, el depurador elimina el BP temporal después de llegar al BP preparado. El efecto es que la ejecución no se detiene en la siguiente línea. Entonces, el paso único ya no es confiable. Lamentablemente no tengo una propuesta mejor.