[uquote="Victor_P.",url="/forum/viewtopic.php?p=4061673#p4061673"][uquote="alcxa",url="/forum/viewtopic.php?p=4061633#p4061633"](заодно уберется двойное считывание порта),[/uquote]А где у меня двойное считывание?[/uquote]#define V_SENS (PINB&(1<<PINB6))
Это макрос чтения из порта, первый раз в условии, а второй раз когда сохраняет в переменную - смотри листинг 2 команды чтения in r**,p03
[uquote="Victor_P.",url="/forum/viewtopic.php?p=4061673#p4061673"]или так
Код: Выделить всё
if ((bool)V_SENS != _VSensLS) {или если мне не изменяет память = может прокатить так
Код: Выделить всё
if (!(V_SENS) == _VSensLS)Опять же неясно, как на это посмотрит компилятор и оптимизирует
Тут 2 выхода я вижу:
1. объявить локальную логическую (bool) переменную и в нее считать с порта и с ней работать:
Код: Выделить всё
bool sVRS = 0;
if (PINB.6) sVRS = 1;
if (sVRS != _VSensLS) {
_VSensLS = sVRS;
switch (VSMode) {
***
}
2. считать байт с порта, сделать маску (AND (1<<(6 или 0))) и далее ее сохранять и проверять
Главное: компилятор char преобразовывает к int - как вот это ненужное преобразование убрать
т.е. выше видно что 0 сравнивает с 0, да еще и загрузка в разные регистры, кароч бестолковый мусор кода