Extraer números de la cadena en ATMega168

0

Intento separar y analizar dos números de una cadena, uno es un flotante y uno es un int. Así que hago esto ...

char packet_buffer[24];
float dist_float;
uint32_t quality;
uint32_t distance;
strncpy(packet_buffer, ": 2.846m,0089", 24); 
memmove(packet_buffer, packet_buffer+1, strlen(packet_buffer)); //Remove leading colon
sscanf(packet_buffer, "%fm,%d", &dist_float, &quality);
distance = (uint32_t)(dist_float*1000);

Esto devuelve 96 para calidad y 0 para distancia ... pero ejecutarlo con Ideone funciona. ¿Pasé por alto algo en combinación con la ATMega?

Esperaría 89 para calidad y 2846 para distancia.

Editar: después de agregar los parámetros de compilación sugeridos por Filo, la salida se ve así:

    "C:\Program Files (x86)\Atmel\Studio.0\toolchain\avr8\avr8-gnu-toolchain\bin\avr-gcc.exe"  -x c -funsigned-char -funsigned-bitfields -I"C:\Program Files (x86)\Atmel\Studio.0\Packs\atmel\ATmega_DFP.2.150\include"  -O1 -ffunction-sections -fdata-sections -fpack-struct -fshort-enums -g2 -Wall -mmcu=atmega168p -B "C:\Program Files (x86)\Atmel\Studio.0\Packs\atmel\ATmega_DFP.2.150\gcc\dev\atmega168p" -c -gdwarf-2 -std=gnu99 -ffreestanding -fdata-sections  -Wl,-u,vfscanf -lscanf_flt -lm -MD -MP -MF "src/main.d" -MT"src/main.d" -MT"src/main.o"   -o "src/main.o" "../src/main.c" 
    Finished building: ../src/main.c
    
pregunta Humpawumpa

1 respuesta

0

AVR libc tiene funciones stdio en dos versiones, una pequeña (sin flotadores) y otra de tamaño completo con todas las funciones. Vea por ejemplo la descripción de vscanf en libc AVR , Básicamente tienes que construir con:

-Wl,-u,vfscanf -lscanf_flt -lm

Y si desea printf las variables también debe agregar:

-Wl,-u,vfprintf -lprintf_flt -lm
    
respondido por el filo

Lea otras preguntas en las etiquetas