Привет всем!
Давно замечаю неадекватности при работе с инлайнами типа
Код
#define SomePin 5
static inline void pin_out(const uint8_t val) __attribute__((always_inline));
void pin_out(const uint8_t val)
{
if(val) PORTB |=(1<<SomePin); else PORTB &=~(1<<SomePin);
}
static inline uint8_t pin_in(void) __attribute__((always_inline));
uint8_t pin_in(void)
{
return (PINB & (1<<SomePin))? 1:0;
}
Если с первой функцией все однозначно и красиво переводится, то со второй время от времени происходят чудеса. Сейчас пишу - pin_in() транслируется в sbis PINB,SomePin. Недавно - выдал какую-то чушь с чтением, наложением маски и проверкой на нуль и еще чего-то mov. Не могу понять, какие настройки его сводят с ума. Если кто сталкивается с подобным - отпишитесь в эту тему для сбора инфы. Спасибо.