El formato de impresión Atmel no funciona, ningún formato funciona

Estamos ejecutando un chip Atmel AVR32 en nuestra placa y recientemente descubrimos que printfcon los especificadores de formato/conversión no funciona. Un regular printffunciona.

Por ejemplo,

printf("hello\n"); // works just fine
printf("number: %d\n", 12); // returns -1, nothing prints.

Ningún especificador de formato parece tener ningún efecto, printf simplemente devuelve -1.

Hemos intentado vincular en diferentes versiones de la vfprintffamilia de funciones, por ejemplo, agregando -Wl,-u,vfprintf -lprintf_flt -lmpara agregar capacidades de formato de punto flotante (documentado aquí ), pero sin éxito.

Tenga en cuenta que NO estamos buscando capacidades de punto flotante, solo estamos tratando de obtener CUALQUIER formato para un decimal regular (int, uint_8, etc.).

Cualquier ayuda muy apreciada.

No sé mucho sobre AVR, pero sé que printf es un poco voluminoso, y recuerdo que hay un tinyprintf que una vez vi recomendado para sistemas integrados: github.com/cjlano/tinyprintf
¿Quizás está incompleto? ¿Tal vez intente solo el %d y el número por sí mismo?
No es obvio cuál es el problema de inmediato, pero ¿qué tal una prueba para obtener más información? Ejecute estos a través de sprintf para ver si el formato es lo que está fallando. Podría ser algo que ver con el flujo de salida.
¿ Funciona %icomo se esperaba?
No se permite la publicación cruzada dentro de la red SE, puede solicitar esto en EESE o SO, pero no en ambos . Debe eliminar esto o stackoverflow.com/questions/28651671/… (FWIW, mantengo que la separación de sitios es un diseño roto: todos los sitios de tecnología deben estar unificados, con especialidades potencialmente superpuestas manejadas por etiquetas y filtros de etiquetas)
@ChrisStratton Ok, eliminé el otro.

Respuestas (1)

¿Ha intentado crear un búfer de caracteres, formatearlo y luego imprimirlo?

   char buffer [50];
   int A = 12;
   i = sprintf (buffer, "A: %d \n", A);

   printf(buffer);

Además, intente inicializar la variable primero, luego inclúyala dentro de printf.

   int A = 12; 
   printf("number: %d \n", A);
En segundo lugar, uso sprintf primero en un búfer de caracteres, no puedes equivocarte con eso.
Si el código de formato se ha recortado para hacer que printf encaje (lo cual casi seguro que sí), entonces también faltará para sprintf.