首页 > 解决方案 > 非阻塞延迟与阻塞延迟

问题描述

我目前正在为我没有编写的 STM32F3 MCU 的一些代码添加一些代码。产品将做的部分工作是在测试时以 1Hz 的频率闪烁 LED,直到 MCU 确定测试是通过还是失败。

该代码的前任作者实现了两个延迟;一个是基于时钟速率的for循环,另一个是定时器中断。第一个延迟被这样调用

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)”函数通过时钟滴答检查和一些递增来实现此延迟。

我遇到的问题是我之前谈到的 LED 闪烁。为了测试这个功能,在测试的 ISR 中,我调用

Set_Led(1,1); //Turns LED1 ON
Wait(1,1000); //Wait one second 
Set_Led(2,1); //Turns LED2 ON

但是,LED 亮起之间没有一秒的延迟。但是,如果我打电话,

Set_Led(1,1); //Turns LED1 ON
MsDelay(1000); //Wait one second 
Set_Led(2,1); //Turns LED2 ON

有一秒钟的延迟。我不太熟悉阻塞与非阻塞延迟的区别,除了阻塞会占用其他外围设备的所有处理能力。使用非阻塞延迟时,LED 转动之间是否应该有暂停?谢谢你。

标签: cdelaystm32

解决方案


推荐阅读