Я использую контроллер AVR atmega328. Мне нужно проверить состояние двух бит. У меня есть два подхода, но не знаю, какой из них наиболее эффективен. В первом случае в приведенном ниже коде я читаю порт с помощью команды PIND дважды (выполняется два раза PIND-доступ). Так это проблема, или мне нужно идти со вторым if-выражением?Эффективная проверка бит во встроенной программе C
#define SW1 2
#define SW2 5
//check if both are high
if((PIND&(1<<SW1))&&(PIND&(1<<SW2)))
//Or
if((PIND&((1<<SW1)|(1<<SW2)))==((1<<SW1)|(1<<SW2)))
Обратите внимание, что память программ одинакова в обоих случаях. Я проверил вывод в Atmel Studio –
, ваш оба препроцессора - 'SW1', он не даст ожидаемого результата. –
О, извините, нужно быть SW2. Не заметил ошибку. Спасибо, что вытащил его. Исправление. –