AVR Studio GCC itoa and utoa

При программуванні ATmega8 я намагаюсь читати EEPROM. При завантаженні нової прошивки, мікроконтроллер стирається повністю і вся його память становить FFFFFFFFFFFF….

Тому мало б читатись число 65535, що відповідає unsigned short

Проте при передачі цього числа на UART я отримую -1 !!!

Виявилось, що функція itoa , яка по опису перетворює int в символи, насправді працює з таким діапазоном -32,768 to 32,767 – що відповідає в gcc типу short (short int).

Тупо і дивно, чи не так?

Ну вирішив проблему, використавши функцію utoa

Як описано, вона працює з unsigned int що відповідає unsigned short в коді програми!

Non-standard (i.e. non-ISO C) functions.
char * ltoa (long val, char *s, int radix)

char * utoa (unsigned int val, char *s, int radix)

char * ultoa (unsigned long val, char *s, int radix)

long random (void)

void srandom (unsigned long __seed)

long random_r (unsigned long *__ctx)

char * itoa (int val, char *s, int radix)

#define RANDOM_MAX 0x7FFFFFFF

Ну а тепер шматочки коду

void uart_sendint (unsigned short f)
{
char buffer [30]; // was [7]
char *p;
utoa(f,buffer,10);
p = buffer;
uart_puts( p );
}

uint16_t WordOfData ;
WordOfData = eeprom_read_word (( uint16_t *) 46) ; // 46 is the address
RAMWatFlowLimit = (unsigned short) WordOfData;
if (RAMWatFlowLimit == 65535) { // 65535 comes from clean FFFF eeprom
//RAMWatFlowLimit = 11;
}

Залишити відповідь

Ваша e-mail адреса не оприлюднюватиметься.

Я spam бот