精华内容
下载资源
问答
  • //定义timer 到 实例销毁前 关闭定时器 this . timer = setInterval ( ( ) => { //调用方法 this . autoPlay ( ) ; } , 1000 ) ; } , methods : { autoPlay ( ) { this . mark...

    created

    created:html加载完成之前,执行。执行顺序:父组件-子组件

    methods

    methods:事件方法执行

    watch

    watch是去监听一个值的变化,然后执行相对应的函数。

    beforeCreate:

    beforeCreate是在Vue实例初始化事件后执行的

    beforeDestroy

    beforeDestroy在Vue实例的生命周期结束前执行

    
    export default {
      mounted() {
      //定义timer 到 实例销毁前 关闭定时器 
        this.timer = setInterval(() => {
        //调用方法
          this.autoPlay();
        }, 1000);
      },
      methods: {
        autoPlay() {
          this.mark--;
          if (this.mark <= 0) {
            this.$router.push({
              path: "/Login"
            });
          }
        }
      },
      data() {
        return {
        // 页面显示倒计时
          mark: 5
        };
      },
      beforeDestroy() {
        //销毁前 设置 执行时间为null
        clearInterval(this.timer);
        this.timer = null;
      }
    };
    
    
    展开全文
  • SysTick—系统滴答定时器是什么? 是一个24位的硬件倒计数定时器; SysTick的功能是什么?(分两种情况) 芯片运行操作系统(UCOS)情况下做:为操作系统(例如UCOS)提供硬件上的定时中断(滴答中断),...

    前言

    1. 博文基于STM32F103ZET6和标准固件库V3.5.0在MDK5环境下开发;
    2. 本博文讨论的是芯片不运行操作系统的情况下完成1s的延时功能;
    3. 如有不足之处还请多多指教;

    SysTick—系统滴答定时器是什么?

    是一个24位的硬件倒计数定时器;

    SysTick的功能是什么?(分两种情况)

    1. 芯片运行操作系统(UCOS)情况下做:为操作系统(例如UCOS)提供硬件上的定时中断(滴答中断),作为整个系统的时基,为多个任务分配不同的时间片,确保不会出现一个任务霸占系统的情况;或者把每个定时器周期的某个时间范围赐予特定的任务等;还有操作系统提供的各种定时功能;
    2. 不运行操作系统,单纯做定时器:提供精准的定时功能;

    SysTick的特点

    1. 和以往的外设定时器不同,SysTick这个定时器以及相关寄存器在CM3内核里。《STM32使用手册》里对并没有涉及SysTick的内容,只能去《Cortex-M3权威指南》看(PDF的133页);寄存的可寻址,且寄存器被定义在程序包中的core_m3.c 中,涉及相关的编程时一定要注意;
    2. 可以工作在芯片的睡眠状态下;
    3. SysTick被捆绑在NVIC(中断向量控制器)中,可以产生异常(异常号:15),这是在操作系统下为系统提供时间基准的必要条件;
    4. 每个CM3内核都含有一个SysTick,这样方便程序移植;
    5. SysTick时钟源的选择可以来自于外部,也可以来自于内部;使用来自外部的时钟源的时候要根据具体芯片生产厂商的手册;(本博文采用外部时钟源)

    SysTick的四个相关寄存器(图片摘取《Cortex-M3权威指南》)

    CTRL控制及状态寄存器

    在这里插入图片描述
    描述中解释的都很清楚,这里强调两个重要的点:

    1. 位[16]:只能读,不能写,算是一个状态位;如果计数器达到0,则读入为1;当读取或清除当前计数器值时,将自动清除为0;
    2. 地址:0xE000E010 ,这是本寄存器地址,一会编程的时候要用到;
    LOAD重装载数值寄存器

    在这里插入图片描述

    VAL当前值寄存器

    在这里插入图片描述

    CALIB校准数值寄存器(这个寄存器在本博客中用不到)

    在这里插入图片描述

    SysTick时钟源的选择(两个)

    在这里插入图片描述
    在红框处,其实我是有疑问的:红框处提供的有3个时钟源HCLK,HCLK/8,FCLK;从名字上来看,FCLK似乎就是上面提到的SysTick的CTRL寄存器中时钟源可选择的内核时钟;但是从标准库函数提供的函数名上来看,提供内核时钟的是HCLK时钟源,提供外部时钟的是HCLK/8时钟源;看如下代码:

    /*此段为我自己写的,为初始化SysTick*/
    void delay_Init(void)
    {
    	SysTick_CLKSourceConfig(SysTick_CLKSource_HCLK_Div8); //设置SysTick时钟源为外部时钟源--HCLK/8;
    	fac_us=SystemCoreClock/8000000;     //系统内核时钟,即CM3的时钟;
    	fac_ms=(u16)fac_us*1000;					
    }
    
    /*此段代码为库文件 misc.c中关于配置SysTick时钟源的函数*/
    void SysTick_CLKSourceConfig(uint32_t SysTick_CLKSource)
    {
      /* Check the parameters */
      assert_param(IS_SYSTICK_CLK_SOURCE(SysTick_CLKSource));
      if (SysTick_CLKSource == SysTick_CLKSource_HCLK)
      {
        SysTick->CTRL |= SysTick_CLKSource_HCLK;   //0x00000004  选择时钟源为内部时钟源
      }
      else
      {
        SysTick->CTRL &= SysTick_CLKSource_HCLK_Div8;  //0xFFFFFFFB  选择时钟源为外部时钟源
      }
    }
    
    /*此段代码是misc.h文件中的关于时钟源的选项*/
    #define SysTick_CLKSource_HCLK_Div8    ((uint32_t)0xFFFFFFFB)
    #define SysTick_CLKSource_HCLK         ((uint32_t)0x00000004)
    #define IS_SYSTICK_CLK_SOURCE(SOURCE) (((SOURCE) == SysTick_CLKSource_HCLK) || \
                                           ((SOURCE) == SysTick_CLKSource_HCLK_Div8))
    
    

    从以上三段代码来看: SysTick_CLKSource_HCLK_Div8SysTick_CLKSource_HCLK是配置CTRL时钟源选择的值,由于这两个符号里都包含HCLK,所以我认为,SysTick的时钟源就来自于上面时钟框图中的HCLK和HCLK/8(先这么理解着,即使理解的不对,并不影响这个程序的进行,因为HCLK和FCLK的时钟频率是一样的,只是名字不同而已)

    好了,关系都捋清了,只差代码了;

    SysTick的配置和1s延时

    配置步骤:(这一个函数的执行从头到尾就是1s)

    1. 配置SysTick时钟源;
    2. 获取SysTick计数器递减周期(每个周期计数器减一),这个需要计算;
    3. 根据上面的递减周期配置重载寄存器LOAD;
    4. 清零当前值寄存器VAL;
    5. 使能定时器(使能CTRL寄存器使能位);
    6. 等待VAL递减到0,从而CTRL寄存器的计数标志位COUNTFLAG被置1;
    7. 延时完成,函数的最后关闭定时器(关闭CTRL寄存器使能位);
    8. 函数结束;

    所以综合叙述一下就是,先配置时钟源,有了时钟源就能确定当前值寄存器VAL递减周期,然后根据递减周期与1s之间的算数关系配置重载寄存器,然后使能寄存器后只需检测CTRL寄存器的计数标志位即可,

    1s延时代码:

    #include <stm32f10x.h>
    
    u32 fac_us;
    u32 fac_ms;
    
    void delay_Init(void)
    {	/*
    	配置时钟源为外部HCLK/8,经标准库初始化后的HCLK = 72MHz,
    	即SysTick计数器的时钟源频率为72MHz/8 = 9MHz,即每9M个方波就是1s(秒基准),
    	每9000个脉冲1ms(毫秒基准),每9个秒冲就是1us(微妙基准);
    	所以我们可以认为当前值寄存器VAL的递减周期就是:每(1/9)us就减1;即每经过1us,经过了9个方波;
    	*/
    	SysTick_CLKSourceConfig(SysTick_CLKSource_HCLK_Div8); 
    	fac_us=SystemCoreClock/8000000;     //最终fac_us=9;
    	fac_ms=fac_us*1000;							//fac_ms = 9000;			
    }
    
    void delay_us(u32 nus)  
    {																						//注意这里的SysTick变量是结构体指针变量;
    	SysTick->LOAD=nus*fac_us;   									//将要定时的时间(nus*fac_us)装载重载寄存器;
    	SysTick->VAL =0x00;         											//清零当前值寄存器;
    	SysTick->CTRL|=SysTick_CTRL_ENABLE_Msk ; 	//使能控制寄存器(CTRL),开启定时器;
    	while((SysTick->CTRL) >> 16 != 1);				          //等待被重新转载后的当前值寄存器递减到0,从而使得控制寄存器的计数标志位被置1;
    
    	SysTick->CTRL |= SysTick_CTRL_ENABLE_Pos;  //关闭计数器(注意运算符是|=,这一点一定要特别注意,因为此处配置的是CTRL寄存器,小心把其他位也给配置了,下面的程序也是一样)
    }
    
    void delay_ms(u32 nms)   //含义和上面一样;  当nms=1000是即可获得1s延时;
    {		
    	SysTick->LOAD=nms*fac_ms;
    	SysTick->VAL =0x00;
    	SysTick->CTRL|=SysTick_CTRL_ENABLE_Msk ;
    	while((SysTick->CTRL) >> 16 != 1);
    
    	SysTick->CTRL |= SysTick_CTRL_ENABLE_Pos;       	
    } 
    
    展开全文
  • //定义定时器,每5s执行一次 var online_send = setInterval(getOnline, 5000); //取消定时器 clearInterval(online_send );
    //定义定时器,每5s执行一次
    var online_send = setInterval(getOnline, 5000);
    
    
    //取消定时器
    clearInterval(online_send );

     

    展开全文
  • 1.多个页面需要定时器 2.并且定时器到0时需要执行什么操作 销毁定时器的场景: 1.父页面正常返回时;(onUnload--监听页面卸载) 2.父页面跳转到其他页面时;(onUnload--监听页面卸载) 3.父页面自身需要销毁...

    应用场景:

    1.多个页面需要定时器--将定时器划分为一个组件即可

    销毁定时器的场景:

    1.父页面正常返回时,即navigateBack;(onUnload--监听页面卸载)

    2.父页面跳转到其他页面时,即redirectTo等;(onUnload--监听页面卸载)

    3.父页面自身需要销毁定时器然后进行其他操作,适用于满足某些条件后销毁定时器;(执行定时器组件的清空定时器操作clearInterval)

    4.定时器页面自身倒计时结束时;(clearInterval)

    首先,创建定时器公共组件

    附上我自己的js和json代码,整理过,wxml和wxss可以根据项目来

    Component({
      data: {
        flag: false,//倒计时是否销毁,即clearInterval
        showHours: '',//倒计时-显示小时
        showMinutes: '',//倒计时-显示分钟
        showSeconds: '',//倒计时-显示秒
      },
      properties: {
        parentEndTime: {//父组件传过来的截止时间戳
          type: Number
        },
      },
      lifetimes: {
      	// 组件创建时执行--蛮重要的
        attached: function () {
          this.setData({
            flag: false
          })
          this.setInitialTime();
        },
      },  
      methods: {
        setInitialTime(){
          let self = this;
          self.timer = setInterval(() => {
            //定时器页面自身倒计时结束时,需要销毁定时器
            if (self.data.flag == true) {
              clearInterval(self.timer);
              return;
            } else {
              self.timeDown();
            }
          }, 1000);
        },
        //定时器运行时进行的逻辑处理,根据业务需求来
        timeDown() {
          let self = this;
          const endTime = new Date(self.data.parentEndTime);//截止时间
          const nowTime = new Date();//当前时间
          let leftTime = parseInt((endTime.getTime() - nowTime.getTime()) / 1000);//截止时间与当前时间的时间戳差
          //定时器页面自身倒计时结束时,需要销毁定时器
          if (leftTime <= 0) {
            self.setData({
              flag: true
            })
          }
          //计算天,小时,分钟,秒 start
          let d = Math.floor(leftTime / (24 * 60 * 60));
          let h = self.formate(Math.floor(leftTime / (60 * 60) % 24));
          let m = self.formate(Math.floor(leftTime / 60 % 60));
          let s = self.formate(Math.floor(leftTime % 60));
          if (parseFloat(h) <= 0) {
            h = "00";
          }
          if (parseFloat(m) <= 0) {
            m = "00";
          }
          if (parseFloat(s) <= 0) {
            s = "00";
          }
          //计算天,小时,分钟,秒 end
          self.setData({
            showHours: h,
            showMinutes: m,
            showSeconds: s,
          })
        },
        //格式化时间,小于10的时间为0开头
        formate(time) {
          if (time >= 10) {
            return time
          } else {
            return `0${time}`
          }
        },
        //用于父组件页面卸载时调用,来销毁定时器,这步一定要,不然页面返回或者跳到其他页面了,定时器其实还在运行
        clearTimer(){
          clearInterval(this.timer);
        }
      },
    })
    {
      "component": true
    }

    然后,再页面引用定时器组件

    附上我的wxml,js和json代码,整理过,一个页面有两个定时器

    <view>
      <time-count id="timer1" wx:if="istimer1Show" endTime="{{timer1EndTime}}"></time-count>
      <time-count id="timer2" wx:if="istimer2Show" endTime="{{timer2EndTime}}"></time-count>
    </view>
    const app = getApp();
    Page({
      /**
       * 页面的初始数据
       */
      data: {
        istimer1Show: true,//开始默认显示timer1的定时器
        istimer2Show: false,//开始默认隐藏timer2的定时器
        timer1EndTime: 0,//定时器1的截止时间戳-根据场景来赋值
        timer2EndTime: 0,//定时器2的截止时间戳-根据场景来赋值
      },
      /**
       * 生命周期函数--监听页面加载
       */
      onLoad: function () {
        this.init();
      },
      init() {
        this.startTimer1();
      },
      //启动定时器1
      startTimer1(){
        this.timer1 = this.selectComponent('#timer1');
        //此处启动定时器1的倒计时功能
        this.timer1.setInitialTime();
      }
      //此方法在需要销毁定时器的函数里面调用就可以了,简单明了
      destroyTimer(){
        //判断定时器有没有显示,有得话选择定时器后,再调用定时器的销毁定时器函数就可以了
        if (this.selectComponent('#timer1')) {
          this.timer1 = this.selectComponent('#timer1');
          this.timer1.clearTimer();
        }
        //用于页面有多个定时器的情况,比如执行某一操作后timer1不要了,启动timer2
        if (this.selectComponent('#timer2')) {
          this.timer2 = this.selectComponent('#timer2');
          this.timer2.clearTimer();
        }
      }
      /**
       * 生命周期函数--监听页面卸载
       */
      //页面卸载时要清空定时器,不然定时器会一直运行
      onUnload: function () {
        this.destroyTimer();
      },
    })
    {
      "navigationBarTitleText": "定时器父页面",
      "usingComponents": {
        "time-count": "../../../components/timer/timer",
      }
    }

     

     

     

     

    展开全文
  • Android关于定时器Timer的定义及用法

    千次阅读 2016-04-02 12:40:03
    在此基础上定义定时器,并不断请求数据,进行界面更新操作。这种情况一般应用在当我的界面需要不停的更新数据时。 例如,每隔几秒界面数据会进行改变,这时就需要用到定时器了,话不多说,看代码:还是昨天的项目 ...
  • 定义定时器://定义一个定时器对象,定时发送信息给handler (170毫秒) new Timer().schedule(new TimerTask() { @Override public void run() { //发送一条空信息来...
  • 但是定时器定义在函数中,我们无法在函数外清除,所以为了解决这个问题,我们需要把定时器定义在data中 比如:Loadingtime是一个定时器,在data中定义Loadingtime:”。 然后在time方法中使用 在onUnload监听页面...
  • a、定义一个数组:var arr = [];b、给每个定时器赋值:arr[0] = setInterval(function(){ ... }, 1000*x); arr[1] = setInterval(function(){ ... }, 1000*x); arr[2] = setInterval(function(){ ... }, 1000*x);...
  • 介绍 ROS 中的时刻、时间间隔、定时器定义和应用。一、Time1、时刻和间隔ROS 中有 time 和 duration 两种类型,相应的有 ros::Time 和 ros::Duration 类。time 表示的是时刻duration 表示的是时间间隔其统一表示...
  • 之前介绍了timer_list内核定时器,它的精度在毫秒级别,再高一点它就无能为力了,所幸内核提供了...1. 定时器定义与绑定超时回调函数 static struct hrtimer timer; /* 设置回调函数 */ timer.function = hrtimer_h...
  • 蓝桥杯 — 定时器

    千次阅读 2020-02-12 15:06:25
    1、定时器定义 定时/计数器,是一种能够对内部时钟信号或外部输入信号进行计数,当计数值达到设定要求时,向CPU提出中断处理请求,从而实现定时或者计数功能的外设。定时/计数器的最基本工作原理是进行计数。作为...
  • 小程序退出页面时清除定时器

    万次阅读 2018-04-16 15:21:17
    由于小程序页面退出时,定时器和长连接等不会自动清除断开,所以需要我们在生命周期函数中手动清除但是定时器定义在函数中,我们无法在函数外清除,所以为了解决这个问题,我们需要把定时器定义在data中比如:...
  • 定时器timer应用

    2013-11-14 09:05:34
    定时器是管理内核所花时间的基础,利用它可以实现在未来某个时间,触发一个事件。它的使用比较简单,只需要执行一些初始化工作,设置一个时间期限,...定时器定义: struct timer_list {  struct list_head entry; un
  • 在小程序中定义定时器

    千次阅读 2019-03-20 14:59:14
    data: { times: "" } click() { let that = this; that.setData({ times: setInterval(function() { 逻辑处理 }) }) } 清除定时器 clearInterval(that.data.times) ...
  • 定时器

    千次阅读 2017-02-11 21:37:48
    定时器的实现
  • 定时器计数器

    2020-11-12 22:09:36
    下图给出了定时器计数寄存器的各位分配,下表给出了定时器计数寄存器的功能定义。  图 定时器计数寄存器  表 定时器计数寄存器功能定义 欢迎转载,信息来源维库电子市场网(www.dzsc.com) 来源:ks99
  • 【篇七】定时器和RTC

    2020-03-20 16:46:43
    定时器定义 PWM定时器 PWM框图解读 定时器定义 * 通过计数器实现 * Soc的常见的外设,主要用来实现定时执行代码的功能,通过中断并执行定时器中的ISR,从而去执行预先设定好的事件 * 与计数器的区别;计数器...
  • 但是定时器定义在函数中,我们无法在函数外清除,所以为了解决这个问题,我们需要把定时器定义在data中 比如:Loadingtime是一个定时器,在data中定义Loadingtime:''。 然后在time方法中使用 在onUnload监听...
  • 定义定时器: //定义一个定时器对象,定时发送信息给handler (170毫秒) new Timer().schedule(new TimerTask() { @Override public void run() { //发送一条空信息...
  • 题记:本系列文章的目的是抛开书本从Linux内核源代码的角度详细...在Linux内核中大量的使用了定时器,协议栈中也不例外,例如网桥模式的时候启用定时器来发送STP(spanning tree protocol) BPDU包。 首先看内核中定
  • 定时器原理

    千次阅读 2020-06-16 09:02:03
    定时器模型中,一般有如下几个定义。 interval:间隔时间,即定时器需要在interval时间后执行 StartTimer:添加一个定时器任务 StopTimer:结束一个定时器任务 PerTickBookkeeping: 检查定时器系统中,是否有...
  • 虚拟定时器Virtual TimersCMSIS-RTOS API里有几个向下计数的虚拟定时器,它们实现计数完成时用户的回调...在上面的代码中给定时器定义了一个名字timer0,并同时定义了回调函数led_function,紧接着必须对这个定时器进
  • JS 定时器

    2019-01-17 15:57:20
    定时器定义:  让程序每隔一段时间间隔反复执行一项任务 定时器分为:周期性定时器和一次性定时器 周期性定时器:  让程序每隔一段时间反复执行一项任务 如何操作: 1、任务函数 function task(){...} 2...
  • 定时器周期寄存器

    2020-11-12 22:10:38
    图给出了定时器周期寄存器的各位分配,表给出了-定时器,周期寄存器的功能定义。  图 定时器周期寄存器  表 定时器周期寄存器功能定义 欢迎转载,信息来源维库电子市场网(www.dzsc.com) 来源:ks99
  • 定时器控制寄存器

    2020-11-12 23:30:23
    定时器控制寄存器的各位分配如图所示,功能定义如表所示。  表 定时器控制寄存器功能定义  图 定时器控制寄存器 欢迎转载,信息来源维库电子市场网(www.dzsc.com) 来源:ks99

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 136,594
精华内容 54,637
关键字:

定时器的定义