Особистий блог Blohher'a

Читай Blohher брат

Реклама Google
Популярність сайта і якісний пошук

Дродобита - це нове жіноче ім'я

 Дродобита

Дродобита - це таке нове ім'я для особи жіночого роду

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

Ціни в АТБ і Хуторку

На грудень 2018 року, ціна на батончик Nestle Lion

АТБ - 7,5 грн

Хуторок - 7,25 грн

Про Сільпо взагалі краще промовчати, там більше 8 грн. Робимо висновки....

Blohher - Блог розробника сайтів