Hi all, thanks for your responses that helped a lot to solve the problem:
> The truncation is probably happening here--- utoa() takes an unsigned > int, which is 16 bits on this architecture. Try using ultoa() instead > and see if that helps. Compiling with the -Wconversion option turned on > might warn about this kind of situation. The working set of methods: uint32_t getLong_from_serial_rec_buffer() { char char_buffer[10]; int i; for (i = 0 ; i < 10 ; i++) { if (bytes_in_serial_rec_buffer() > 0) { char current = buffer[buffer_tail]; if (current >= '0' && current <= '9') { get_from_serial_rec_buffer(); // we already know the byte :-) char_buffer[i] = current; } else // is a comma or NULL or whatever other character { char_buffer[i] = 0; uint32_t ret = (uint32_t)strtoul(char_buffer, NULL, 0); return ret; } } } return -1; } void putLong_in_serial_trans_buffer(uint32_t value) { char char_buffer[10]; ltoa(value, char_buffer, 10); int i; for (i = 0 ; i < 10 ; i++) { char current = char_buffer[i]; if (current != 0) TxByte (current); else break; } } Thanks, Andreas
_______________________________________________ AVR-GCC-list mailing list AVR-GCC-list@nongnu.org https://lists.nongnu.org/mailman/listinfo/avr-gcc-list