zoukankan      html  css  js  c++  java
  • HAL无阻塞延时

    //实现间隔time_interval时间点亮红灯(此时间间隔并不是绝对的,是大于等于的关系)
    //用于系统要求无延时且延时时间粗略的场合,比如间隔一段时间采样数据,间隔一段时间点亮状态灯等
    //HAL_GetTick()是系统ms级别滴答时间
    //轮询一遍此函数的时间显然要小于设置的时间间隔time_interval,否则每次都会触发也就起不到间隔的目的
    uint32_t time_interval = 500;
    void Light_SetStatus(void) {
      
    if(time_interval != 0) { uint32_t tick; static uint32_t interval_cnt = 0; tick = HAL_GetTick() / time_interval; if(tick > interval_cnt) {
           //这里加入间隔时间到的功能
    Light_Red(LIGHT_ON); } interval_cnt = tick; } }

     另一种方式:

    void Light_SetStatus(void)
    {
      if(time_interval != 0)
        {
     	  static uint32_t delay_start = 0;
    
    	  if(delay_start == 0)
    	  {
    	    delay_start = HAL_GetTick();
    	  }
    
    	  if(HAL_GetTick() - delay_start > interval_cnt)
    	  {
    	    delay_start =0;
    	    ret = Light_Red(LIGHT_ON);
    	  }   
        }
    }
    

      

    第一种方式中interval_cnt会以自增的方式不断变大,所以可以利用这点做一些其它事情!

  • 相关阅读:
    Centos7 Apache 2.4.18编译安装
    Centos7 mysql-community-5.7.11编译安装
    Centos7 安装MPlayer过程详解
    Vmware虚拟机克隆的网卡问题
    虚拟机VMware新增硬盘无法识别问题
    python推导式
    Python迭代器和生成器
    Python装饰器
    Python函数初识二
    Python函数初识
  • 原文地址:https://www.cnblogs.com/yeshenmeng/p/10608416.html
Copyright © 2011-2022 走看看