Argumentos variables a través de STM32 a través de USB

0

Para hacer posible el tipo de depuración de printf, planeé usar argumentos variables para pasar al dispositivo USB como dispositivo serial.

Código para imprimir una cadena de prueba:

Debug::Print("Auto toggle 2 %d %s", 12, "!");

Con implementación:

void Debug::Print(const char* format, ...)
{
    va_list args;
    va_start(args, format);
    char buffer[256];
    vsprintf(buffer, format, args);
    Debug::Print(buffer);
    va_end(args);
}

Yo esperaría:

 Auto toggle 2 12!

Sin embargo, el dispositivo no responde. Cuando uso el OCD, en la línea Debug :: Print, el búfer contiene:

"Auto toggle 2 134229731 !
Debug::Print("Auto toggle 2 %d %s", 12, "!");
§ª2KÖ-çPä(5õ1º= ... (continued with unreadable characters)

Esta es probablemente la razón por la que el dispositivo no responde. Sin embargo, ¿qué debo usar para que el búfer se llene correctamente?

Lo probé como un programa C ++ de la consola de Windows y allí obtengo el resultado correcto. Inicialmente, utilicé un sprintf en lugar de vsprintf y también obtuve un gran número (como e134229731 arriba). Sin embargo, no obtuve la 'basura' adicional.

    
pregunta Michel Keijzers

1 respuesta

2

Eso se ve correcto. Observe el %code% en la cadena:

"Auto toggle 2 134229731 !
"Auto toggle 2 134229731 !%pre%§ª2KÖ-çPä(5õ1º=…"
                          ^^
§ª2KÖ-çPä(5õ1º=…" ^^

El %code% es un terminador. El depurador muestra el resto del contenido (sin inicializar) en el búfer, pero no es parte de la cadena C que se imprimirá.

Cualquier problema que tengas está siendo causado por otra cosa.

    
respondido por el duskwuff

Lea otras preguntas en las etiquetas