软件定时器是用程序模拟出来的定时器,可以由一个硬件定时器模拟出成千上万个软件定时器,这样程序在需要使用较多定时器的时候就不会受限于硬件资源的不足,这是软件定时器的一个优点,即数量不受限制。 但由于软件定时器是通过程序实现的,其运行和维护都需要耗费一定的CPU资源,同时精度也相对硬件定时器要差一些。 2....
此种方式缺点非常明显,那就是在硬件tick中断服务函数内,我们得轮询所有数组,如果我们软件业务需求是20个定时任务,那我们就得在软件定时器的实现里定义20个数组,空间浪费倒是其次的,关键是硬件tick轮询的数组越多,执行到某个数组的时间就越长,若以后有50个、100个定时需求时,将会导致定时时间极不精准。 二、用链表...
软件定时器实现方式: 一、用结构体数组的方式实现软件定时器 用结构体数组的方式实现起来较简单,也容易理解,除此之外与之后的链表实现方式比起来没有其他优点。 但还是介绍一下实现方法:在结构体数组内定义一个start标志和定时时长duration,还有一个为计数值count,这3个变量为最基本的3个变量,其他的可以自己补充,比...
1.3 软件定时器实现方法 这里就结合开发板STM32F429I-DISCO上的STM32F429ZI的单片机来演示软件定时器的实现方法。 一般定时器的计数方式有2种:一种是单次定时,即定时时间到了之后,自动停止定时;另一种是周期定时,定时时间到了之后,自动按照之前的定时周期重新定时。对于周期定时,可以手动进行定时器的启动、关闭和...
软件定时器实现-方法1 本文介绍了软件定时器的一种实现方法,该方法摘自git上面的实现,具体链接忘了。 缺点:使用起来比较复杂, 如果需要再次触发, 需要重新设置。 方法如下: //multi_timer.c #include"multi_timer.h"#include<stdio.h>/*Timer handle list head.*/staticMultiTimer* timerList =NULL;/*Timer ...
软件定时器实现方式: 一、用结构体数组的方式实现软件定时器 用结构体数组的方式实现起来较简单,也容易理解,除此之外与之后的链表实现方式比起来没有其他优点。 但还是介绍一下实现方法:在结构体数组内定义一个start标志和定时时长duration,还有一个为计数值count,这3个变量为最基本的3个变量,其他的可以自己补充,比...
首先,要实现定时函数,那么首先可肯定需要定时器,我相信市面上可以看到是MCU,定时器基本上都是标配,以STM32为例,我们选择其中一个定时器作为一个基准定时。 然后,需要设计一个软件定时器,包含定时器名称,定时器周期,定时器计数,然后就是回调函数,如下面代码所示: ...
对于时间要求不是很严格的场合,可以多个应用层功能共享使用一个定时器。所以这篇文章是基于一个硬件定时器写的一个软件定时器框架,可以移植到任何带有32位,16位,8位定时器的单片机中。本程序在GD32F303上面已经测试完成。有需要的朋友们可以移植到自己的平台上。这个定时器可以用在低功耗场景下(不能频繁中断),...
二、用链表实现软件定时器 介于以上用结构体数组实现软件定时器的种种缺点,我们提出改进方案。经过分析,在大多数定时业务中,往往只需要在某个时间段定时一次,也就是说定时器会开启定时和结束定时,当然,用数组的实现的定时器也可以开启定时和关闭定时,只需要用start标志去决定就行了,但是用数组实现的方式中,即使你关...
在main函数中,我们首先调用Timer_Init函数初始化定时器,然后进入一个无限循环,等待系统任务执行。定时器的中断处理函数会在后台继续工作,并控制LED的状态。 综上所述,C语言表驱动法是一种高效、灵活的软件定时器实现方法。 嵌入式物联网的学习之路非常漫长,不少人因为学习路线不对或者学习内容不够专业而错失高薪offer...