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;
}

1 Star2 Stars3 Stars4 Stars5 Stars (Еще нет оценки, будьте первым)
Loading...
стрілка

Понравилась статья? Подпишись на обновления блога, и получай самую свежую информацию на свой e-mail!

Свежая информация в сфере SEO:

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

Ваша e-mail адреса не оприлюднюватиметься. Обов’язкові поля позначені *