В настоящее время я делаю некоторые дополнения к коду для микроконтроллера STM32F3, который я не написал.Часть того, что будет делать продукт, это мигать светодиодами с частотой 1 Гц во время тестирования, пока MCU не определит, пройден ли тест или нет.
Предыдущий разработчик этого кода реализовал две задержки;один для цикла, основанного на тактовой частоте, другой от прерывания по таймеру.Первая задержка вызывается следующим образом:
MsDelay(1000); //Provides approx a one second delay via a for loop
Другая такая:
Wait(x,y); //x indicates the timer channel, y is delay in milliseconds
Функция "wait (x, y)" проходит проверку тактов и некоторое увеличение для реализации.эта задержка.
Проблема в том, что у меня мигает светодиод, о котором я говорил ранее.Чтобы проверить эту функцию, в ISR для теста я вызываю
Set_Led(1,1); //Turns LED1 ON
Wait(1,1000); //Wait one second
Set_Led(2,1); //Turns LED2 ON
Однако между включением светодиодов не возникает ни одной задержки.Однако, если я позвоню,
Set_Led(1,1); //Turns LED1 ON
MsDelay(1000); //Wait one second
Set_Led(2,1); //Turns LED2 ON
Будет задержка в одну секунду.Я не очень хорошо знаком с различиями блокирования и неблокирующих задержек, кроме того, что блокировка отнимает всю вычислительную мощность у других периферийных устройств.Не должна ли быть пауза между светодиодами, поворачивающимися при использовании неблокирующей задержки?Благодарю вас.