Cómo poner "printf" en la consola Debug QEMU en Eclipse STM32F4

4

Creo un proyecto blinky para probar un simulador de qemu, pero mi printf no se muestra en la consola de depuración. Creo un proyecto como tutorial oficial de GNU MCU Eclipse.

int
main(int argc, char* argv[])
{
  // By customising __initialize_args() it is possible to pass arguments,
  // for example when running tests with semihosting you can pass various
  // options to the test.
  // trace_dump_args(argc, argv);

  // Send a greeting to the trace device (skipped on Release).
  trace_puts("Hello ARM World!");

  // The standard output and the standard error should be forwarded to
  // the trace device. For this to work, a redirection in _write.c is
  // required.
  puts("Standard output message.");
  fprintf(stderr, "Standard error message.\n");

  // At this stage the system clock should have already been configured
  // at high speed.
  trace_printf("System clock: %u Hz\n", SystemCoreClock);

  timer_start();

  blink_led_init();

  uint32_t seconds = 0;

  // Infinite loop
  while (1)
    {
      blink_led_on();
      timer_sleep(seconds == 0 ? TIMER_FREQUENCY_HZ : BLINK_ON_TICKS);

      blink_led_off();
      timer_sleep(BLINK_OFF_TICKS);

      ++seconds;
      // Count seconds on the trace device.

      printf("My printf");

      trace_printf("Second %u\n", seconds);
    }
  // Infinite loop, never return.
}

    
pregunta Augusto

1 respuesta

3

Esta es una característica estándar de la biblioteca C. La salida estándar (y la entrada) se almacena en línea en el búfer de forma predeterminada, por lo tanto, se mantendrá en un búfer (por la biblioteca de destino) hasta / a menos que realice una de las siguientes acciones

  • enviar un carácter de nueva línea a stdout
  • llamar a fflush(stdout)
  • desactiva el almacenamiento en búfer con setbuf() o setvbuf() (haz esto antes de la primera salida)

El error estándar no está en el búfer, a menos que le diga a la biblioteca lo contrario, por lo que verá todos los caracteres inmediatamente, incluso si no hay una nueva línea.

    
respondido por el berendi

Lea otras preguntas en las etiquetas