Здравствуйте.
Огромное спасибо Эдуарду за те знания и время которые он тратит на нас.
При изучении урока 21 возникла следующая проблема.
В бесконечном цикле :
void loop()
{
for (int i = 0; i < 4; i++)
{
for (int j = 0; j < 4; j++)
{
if (disp.flagClick[i][j] == true)
{
disp.flagClick[i][j] = false;
disp.digit[3] = disp.digit[2];
disp.digit[2] = disp.digit[1];
disp.digit[1] = disp.digit[0];
disp.tetradToSegCod(0, codKeys[i][j]);
soundCount = 30;
}
}
}
}
код не работает без строки с комментариями (пример ниже). Либо на месте delay должен быть Serial.print().
void loop()
{
for (int i = 0; i < 4; i++)
{
for (int j = 0; j < 4; j++)
{
delay(1); // Если delay закомментировать код не работает.
if (disp.flagClick[i][j] == true)
{
disp.flagClick[i][j] = false;
disp.digit[3] = disp.digit[2];
disp.digit[2] = disp.digit[1];
disp.digit[1] = disp.digit[0];
disp.tetradToSegCod(0, codKeys[i][j]);
soundCount = 30;
}
}
}
}
Компиляция проходит без ошибок в обоих случаях.
Пробовал компилировать в ARDUINO IDE, и в Visual Studio Code с PlatformIO - результат одинаков.
Не подскажите в чём причина?
Может быть виной оптимизация при компиляции?
Урок 21. Возможна проблема при оптимизации?
Re: Урок 21. Возможна проблема при оптимизации?
Здравствуйте!
Да, так и есть. Попробуйте объявите переменные, которые используются в прерывании по таймеру, с квалификатором volatile.
Да, так и есть. Попробуйте объявите переменные, которые используются в прерывании по таймеру, с квалификатором volatile.
Код: Выделить всё
volatile LedDigitsKeys disp(1, 5,4,3,2, 6,7,8,9,10,11,12,13, 14,15,16,17, 6);
volatile byte soundCount=0; // счетчик звука на нажатие
Кто сейчас на конференции
Сейчас этот форум просматривают: нет зарегистрированных пользователей и 0 гостей