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