• 单片机硬件和软件延时是啥意思?


    软件延时和硬件延时是啥意思?做项目时他俩有什么区别?

    今天就来讲讲关于硬件延时和软件延时的内容,以及它们的区别。

    硬件和软件延时

    延时的种类很多,先给大家普及一下延时相关概念和分类。

    1.硬件延时

    指利用具有计数功能的硬件进行延时。

    比如:定时器(Timer)、 实时时钟(RTC)、 系统滴答定时器(SysTick)等具有计数功能的硬件。

    2.软件延时

    相对硬件延时而言,软件延时就是写一段软件代码,通过消耗CPU时间进行延时。

    比如软件延时函数:

    void Delay(uint32_t Cnt){  uint32_t i;
      while(Cnt--)  {    for(i=0; i<0x80000; i++);  }}

    阻塞和非阻塞延时

    实际应用中,延时分阻塞和非阻塞延时。

    1.阻塞延时

    指CPU一直停留阻塞,不去做其它事情,直到延时结束结束。

    像上面那个软件延时(Delay)就是一个典型的阻塞延时,一直消耗CPU,直到延时结束。

    2.非阻塞延时

    指在延时期间,没有阻塞CPU,也就是说CPU在延时期间可以执行其它代码。

    比如:利用定时器中断延时,只需要开启定时器,在中断(计数)到来之前,CPU可以执行其它代码。

    3.额外举例

    a.利用定时器也能实现阻塞延时,比如STM32的HAL自带的阻塞延时:

    __weak void HAL_Delay(uint32_t Delay){  uint32_t tickstart = HAL_GetTick();  uint32_t wait = Delay;
      /* Add a freq to guarantee minimum wait */  if (wait < HAL_MAX_DELAY)  {    wait += (uint32_t)(uwTickFreq);  }
      while ((HAL_GetTick() - tickstart) < wait)  {  }}

    b.利用RTOS自带的系统延时实现非阻塞延时,这个实现原理实际是利用了硬件延时(系统滴答定时器)。

    当然,这个延时的原理(延时函数代码)相对比较复杂,对于普通用户只需要知道如何调用以及简单原理即可,感兴趣的老铁可以自行研究一下。

    通常在一些RTOS的(Demo)例子的任务中都有系统延时,比如ucos非阻塞延时:

    OSTimeDly(10);

    再比如FreeRTOS非阻塞延时:

    vTaskDelay(10);

    关于RTOS的延时,这里额外拓展一下关于RTOS中的相对延时和绝对延时的内容,请移步至文章《RTOS中相对延时和绝对延时的区别

    硬件和软件延时区别

    通过以上分析,其实不难得出,硬件延时相对软件延时更普遍。

    1.软件相对硬件延时精度更差;

    2.软件延时为阻塞延时,硬件延时可阻塞,也可非阻赛延时;

    3.硬件延时应用更灵活、更广泛;

    ......

    实际应用中,硬件延时、非阻塞延时相对更普遍。

  • 相关阅读:
    为什么PLC与触摸屏的通信总断开?如何进行远程维护?
    什么是SMTP?它是如何工作的?第1部分
    Flask学习(二):flask模板渲染
    【HAL库】STM32CubeMX开发----STM32F407----ETH+LAN8720A+LWIP----ping通
    CHAPTER 6: DESIGN A KEY-VALUE STORE
    Spring Cloud框架学习-Spring Cloud Sleuth
    实现k8s发布系统的设计和思考
    java毕业设计爱音乐网站Mybatis+系统+数据库+调试部署
    Skywalking流程分析_9(JDK类库中增强流程)
    【linux】【platform[1]】简述device和driver几种匹配方式(包括测试用demo)
  • 原文地址:https://blog.csdn.net/m0_61687959/article/details/128198795