定时器

ESP8266 SDK开发: 外设篇-定时器,延时

假如想象 提交于 2020-02-14 01:14:49
延时 /** * @brief Delay function, maximum value: 65535 us. * * @param uint16 us : delay time, uint: us, maximum value: 65535 us * * @return null */ void os_delay_us(uint16 us); 软件定时器 代码 #include "esp_timer.h" /** * @brief 定时器回调函数 * @param parg:传入的配置os_timer_setfn函数最后的参数 * @param None * @param None * @param None * @retval None * @warning None * @example **/ void os_timer_one_function(void *parg) { printf("parg:%s\n", parg);//打印一下传过来的参数 } //配置定时器 os_timer_setfn(&os_timer_one,os_timer_one_function,"yang");//os_timer_one:定时器结构体变量 os_timer_one_function:回调函数 yang:传给回调函数的参数 //使能定时器 os_timer_arm(&os

RT-thread内核之系统时钟

让人想犯罪 __ 提交于 2020-02-12 22:12:00
一、系统时钟 rt-thread的系统时钟模块采用全局变量rt_tick作为系统时钟节拍,该变量在系统时钟中断函数中不断加1。而系统时钟中断源和中断间隔一般由MCU硬件定时器(如stm32的嘀嗒定时器)决定,rt_tick初始值为0,每次MCU产生硬件定时中断后,在中断函数中不断加1,即rt_tick变量值与MCU硬件定时器定时中断间隔的乘积为系统真正运行时间(例如rt_tick=10,stm32嘀嗒定时器每隔1ms产生中断,则系统上电运行时间为10ms)。 在bsp/stm32f40x/drivers/board.c中设置MCU硬件定时器定时间隔,以及执行相应定时器中断函数: void SysTick_Configuration(void) { RCC_ClocksTypeDef rcc_clocks; rt_uint32_t cnts; RCC_GetClocksFreq(&rcc_clocks);//获得系统的晶振频率 //RT_TICK_PER_SECOND在rtconfig.h中配置,表示每秒包含的系统时钟节拍数。默认配置为100,则嘀嗒定时器中断间隔为10ms,rt_tick每隔10ms加1,即默认情况下1s内包含100个系统时钟节拍,每个时钟节拍tick表示10ms。为了提高 精度,一般修改宏定义为1000,即1s内包含1000个系统时钟节拍

iOS 定时器的比较

荒凉一梦 提交于 2020-02-11 05:57:23
然而,在iOS中有很多方法完成以上的任务,到底有多少种方法呢?经过查阅资料,大概有三种方法:NSTimer、CADisplayLink、GCD。接下来我就一一介绍它们的用法。 一、NSTimer 1. 创建方法 1 NSTimer *timer = [NSTimer scheduledTimerWithTimeInterval:1.0 target:self selector:@selector(action:) userInfo:nil repeats:NO]; TimerInterval : 执行之前等待的时间。比如设置成1.0,就代表1秒后执行方法 target : 需要执行方法的对象。 selector : 需要执行的方法 repeats : 是否需要循环 2. 释放方法 1 [timer invalidate]; 注意 : 调用创建方法后,target对象的计数器会加1,直到执行完毕,自动减1。如果是循环执行的话,就必须手动关闭,否则可以不执行释放方法。 3. 特性 存在延迟 不 管是一次性的还是周期性的timer的实际触发事件的时间,都会与所加入的RunLoop和RunLoop Mode有关,如果此RunLoop正在执行一个连续性的运算,timer就会被延时出发。重复性的timer遇到这种情况,如果延迟超过了一个周期,则 会在延时结束后立刻执行

GCD实现多个定时器,完美避过NSTimer的三大缺陷(RunLoop、Thread、Leaks)

落花浮王杯 提交于 2020-02-11 01:04:39
定时器在我们每个人做的iOS项目里面必不可少,如登录页面倒计时、支付期限倒计时等等,一般来说使用NSTimer创建定时器: + (NSTimer *)timerWithTimeInterval:(NSTimeInterval)ti target:(id)aTarget selector:(SEL)aSelector userInfo:(nullable id)userInfo repeats:(BOOL)yesOrNo; + (NSTimer *)scheduledTimerWithTimeInterval:(NSTimeInterval)ti target:(id)aTarget selector:(SEL)aSelector userInfo:(nullable id)userInfo repeats:(BOOL)yesOrNo; But 使用NSTimer需要注意一下几点: 1、必须保证有一个活跃的RunLoop。 系统框架提供了几种创建NSTimer的方法,其中以scheduled开头的方法会自动把timer加入当前RunLoop,到了设定时间就会触发selector方法,而没有scheduled开头的方法则需要手动添加timer到一个RunLoop中才会有效。程序启动时,会默认启动主线程的RunLoop并在程序运行期内有效

NSTimer循环引用的问题

六眼飞鱼酱① 提交于 2020-02-11 01:03:39
前言: 记得之前看过一个面试题问:ARC环境下的dealloc方法有什么用?问题解答是:代理指针置空,停止定时器timer,注销通知,释放掉实例变量。看着没什么问题,而且网上一收也是大概这样的答案。今天算是被实实在在的坑了一把,唉,其实说是被坑不如说是自己对定时器NSTimer没有一个足够的认识,我们总是习惯性的看着别人给好的答案而懒得去看API文档仔细分析。 定时器NSTimer: 最近做的一个公司项目有一个需求,当你进入到某一个视图控制器中定时器timer开始启动并在1秒内触发timerAction:方法。然后在视图控制器中销毁的时候停止定时器。于是乎: > self . mytimer = [ NSTimer scheduledTimerWithTimeInterval : 1 target :weakSelf selector : @selector (timerAction:) userInfo : nil repeats : YES ]; [[ NSRunLoop currentRunLoop ] addTimer : self . mytimer forMode : NSRunLoopCommonModes ]; > #**并且在dealloc方法里面销毁定时器**    -( void )dealloc   {   [ self . mytimer

Threadx 系统定时器线程_tx_timer_thread_entry

点点圈 提交于 2020-02-09 23:42:49
“System Timer Thread” 系统定时器线程用于判断定时器超时,并调用定时器超时处理函数。 _tx_timer_initialize 先来看看定时器线程创建初始化。_tx_timer_initialize初始化系统一系列与时间,定时器相关全局变量,链表,线程等。 VOID _tx_timer_initialize ( VOID ) { REG_1 UINT i ; /* Working index variable */ REG_2 TX_INTERNAL_TIMER * * timer_ptr ; /* Working timer pointer */ UINT32 b_is_os_test = 0 ; /* Initialize the system clock to 0. */ #def 系统时钟,用于时间相关 _tx_timer_system_clock = 0 ; /* Initialize the time-slice value to 0 to make sure it is disabled. */ #def 初始化时间片全局变量,用于基于时间片的线程调度 _tx_timer_time_slice = 0 ; /* Clear the expired flags. */ #def 时间片耗尽标志 _tx_timer_expired_time_slice

【javascript】Date 对象、定时器

别等时光非礼了梦想. 提交于 2020-02-08 20:22:47
var date = new Date(); Date方法 :   Date()        返回当日的日期和时间   date.getDate()   返回一个月中的某一天 1~31   date.getDay() 返回一周中的某一天 0~6   date.getMonth() 返回月份 0~11   date.getFullYear() 以四位数返回年份   date.getHours() 返回小时 0~23   date.getMinutes() 返回分钟 0~59   date.getSeconds() 返回秒数 0~59   date.getMilliseconds() 返回毫数 0~999   date.getTime() 时间戳,返回 1970年1月1日至今的毫秒数      作用:可以帮我们求时间差     var firstTime = new Date().getTime();     for(var i = 0; i < 100000000; i ++) { }     var lastTime = new Date().getTime();     console.log(lastTime - firstTime);   date.setDate() 设置一个月中的某一天 1~31   date.setDay()    返回一周中的某一天 0~6  

Qt +QTimer 定时器的使用

蓝咒 提交于 2020-02-08 11:02:45
https://www.cnblogs.com/doker/p/11150053.html 工程目录: widget.h: #ifndef WIDGET_H #define WIDGET_H #include <QWidget> #include <QTimer> // 定时器对象 namespace Ui { class Widget; } class Widget : public QWidget { Q_OBJECT public : explicit Widget(QWidget *parent = 0 ); ~ Widget(); private slots: void on_buttonStart_clicked(); </span><span style="color: #0000ff;">void</span><span style="color: #000000;"> on_buttonStop_clicked(); private : Ui::Widget * ui; QTimer </span>*myTimer;<span style="color: #008000;">//</span><span style="color: #008000;"> 定时器对象</span> }; #endif // WIDGET_H widget.cpp: #include

k60驱动代码学习(5)

匆匆过客 提交于 2020-02-07 19:55:40
//systick 记时,延时 # include "include.h" # include "MK60_SYSTICK.h" # define EACH_PER_MS 25 //每隔 25 ms 中断一次 systick 定时器是24位向下计数的定时器 最大装载值16777215 / 600 000 000= 0.2796 最大计时27ms struct time { uint32_t fac_us ; //us分频系数 uint32_t fac_ms ; //ms分频系数 volatile uint32_t millisecond ; //ms uint64_t microsecond ; //us uint8_t ms_per_tick ; //1ms多少systick计数次数 } timer ; /*LLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLL 【作 者】LQ-005 【功能说明】初始化systick计数器 【软件版本】V1.0 【最后更新】2019年03月12日 【返回值】无 【参数值】无 【例子 】systime.init(); //开启systick定时器 QQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQ*/

《Linux系统调用:setitimer,getitimer,alarm》

流过昼夜 提交于 2020-02-07 09:07:39
一、介绍 setitimer()创建一个间隔式定时器(interval timer),会在未来某个点到期,并于此后每隔一段时间到期一次 getitimer()获取定时器了解当前状态、距离下次到期的剩余时间 alarm()为创建一次性实时定时器提供简单的一个接口 二、接口函数 #include <unistd.h> unsigned int alarm(unsigned int seconds); 参数: seconds: 表示定时器到期的秒数,到期时会产生SIGALRM信号并发送给进程,因为是实时和setitimer中的ITIMER_REAL一样 注意: alarm 和 settimer都是针对同一进程的共享实时定时器,也就是两者改变都会影响对方 调用alarm()会覆盖定时器前一个设置,调用alarm(0)会屏蔽现有定时器 alarm()返回值是定时器前一个设置距离到期的剩余次数,如未设置定时器则返回0 返回值: alarm()返回的是剩余定时器时间 #include <sys/time.h> int setitimer(int which, const struct itimerval *new_value, struct itimerval *old_value); 参数: which: 指定不同类型的定时器 ITIMER_REAL: 创建以真实时间倒计时的定时器