Странное маскирующее поведение keil c51
Я пытаюсь прочитать два контакта с контроллера C8051F040.
Чтение порта работает напрямую, но сохранение того же значения порта в переменной не работает, даже если отладчик показывает правильное значение.
// This works
if((P1 & 0xF0) == 0xa0)
{
YEL_LED = 1; //Turn on
}
else
{
YEL_LED = 0; //Turn off
}
// This does not work even though the debugger
// shows the correct value 0xa0 for the var
ORange = (P1 & 0xF0);
if(ORange == 0xa0)
{
YEL_LED = 1; //Turn on
}
else
{
YEL_LED = 0; //Turn off
}
Это ошибка KEIL c51 или что-то оптимизируется.
1 ответ
Переменная была объявлена как char, которая подписана. Это должно быть без знака.
Я был одурачен отладчиком, который показывал переменную watch как unsigned.