Особистий блог 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;
}

 

Залишити коментар

Нік
 
E-mail
 
Сайт
 
Текст
 

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