嵌入式定时器专栏


一、定时器概念及作用

    定时器的主要作用是产生一个时基,通俗的讲就是从某一时刻开始,经过一段指定的时间,触发一个中断或超时回调事件,可以在中断或者超时回调函数中处理数据。
    定时器在嵌入式系统中是个基础服务,比如RTOS就要依赖SysTick提供时钟节拍去实现线程延时、线程时间片轮询调度等,定时器可以分软件定时器和硬件定时器,我们还经常听到SysTick,RTC实时时钟等,定时器在生活中的应用也很常见,比如闹钟,下面分别讲解这些概念。

二、定时器分类

1.硬件定时器

    顾名思义,芯片本身提供的定时功能。一般是由外部晶振提供给芯片输入时钟,芯片向软件模块提供一组配置寄存器,接受控制输入,到达设定时间值后芯片中断控制器产生时钟中断。硬件 定时器的精度一般很高,可以达到纳秒级别,并且是中断触发方式,简言之,硬件定时器需要硬件资源支持产生稳定的时间基准。
    从硬件的角度,时基单元主要由计数器、自动重载寄存器组成,计数器的时钟可以通过预分频器进行分频。一般实现过程为:计数器通过时钟信号进行累加,当计数器溢出时会产生中断或事件,这样一个时间基准就产生了。可参考ARM Cortex-M4 基本定时器框图:
ARM Cortex-M4基本定时器框图
硬件定时器优点:

  • 不占用CPU资源,精度高,系统响应速度快,不会被其它线程打断,但是使用时需要协调好中断之间的优先级控制。

硬件定时器缺点:

  • 需要定时器/计数器硬件资源支持

2.软件定时器&软件延时

    我们经常接触到软件延时和软件定时器这两个概念,这两个概念还是有区别的。

2.1. 软件延时

    软件延时是利用指令执行的时间达到定时的目的,一般是利用循环执行一段指令占用CPU的资源实现延时,通常体现为如下代码段形式:

void delay_us(unsigned short delay_time)
{
    while(delay_time)
    {
        delay_time--;
    }
}

软件延时优点:

  • 不需占用硬件资源,代码实现比较简单

软件延时缺点:

  • 占用CPU资源,其他程序不能同时执行,大量使用软件延时会导致系统实时性变差,
  • 一般用于系统实时性要求不高、时间精度要求不高,硬件定时器资源有限的场合,

2.2. 软件定时器

    软件定时器的功能与硬件定时器类似,但是实现方式不同,软件定时器是由操作系统提供的一类系统接口,它构建在硬件定时器基础之上,使系统能够提供不受数目限制的定时器服务,一般使用SysTick作为基础时钟。
    软件定时器是通过线程实现的而非中断实现,可能会被其它高优先级的线程打断,因此软件定时器只能用于对精度要求不高的场合,一般是毫秒级;由于用SysTick作为基础时钟,定时数值必须是系统节拍周期的整数倍。
    软件定时器可以不受硬件资源限制增加多个定时任务的原理是:以系统节拍SysTick为基础时钟,将定时任务以节点的形式添加到链表中形成定时器列表,然后通过SysTick的提供的时钟周期遍历链表节点,比较当前系统时间是否大于或等于超时时间,若是则表示超时,调用对应的超时函数。

软件定时器优点:

  • 不受硬件资源限制,可以设置多个定时任务
  • 实现的功能和硬件定时器类似

软件定时器缺点:

  • 定时器线程可能会被高优先级线程打断,因此精度不高

3.系统滴答定时器(SysTick)

    SysTick需要硬件支持,可以理解为一种简单的硬件定时器,SysTick定时器一般用于延时或作为RTOS中的系统时钟(心跳),实时系统中最小的时间单位就是SysTick定时器的中断周期,也就是1个tick。

SysTick定时器特点:

  • SysTick使能后就永不停息,即使是睡眠模式下也不会停止,因此一般作为系统定时器基础时钟或实时系统的心跳节拍
  • SysTick定时器功能简单,因此一般适用于延时或实时系统心跳这种简单的的业务场景

4.实时时钟(RTC)

    RTC需要硬件支持,是一个独立的BCD定时器/计数器,主要作用是提供日历功能,不同的MCU,RTC特性可能也略有差异,不再详细解释,下面附上STM32F4xx系列芯片的RTC特性供参考:
STM32F4xxx RTC特性

三、总结

    定时器主要分两种:硬件定时器和软件定时器,SysTick 定时器和 RTC某种意义上也属于硬件定时器,硬件定时器和软件定时器特性不同,适用场景也不同。

  • 硬件定时器是触发中断,软件定时器是触发用户定义的超时函数;
  • 硬件定时器的上下文环境是中断,软件定时器的上下文环境是线程;
  • 硬件定时器需要硬件支持,且不同的硬件定时器之前资源互相独立,适用于精度要求高的场景,但是一般定时器数量有限制,比如有多个定时任务时可能需要多个硬件定时器资源;
  • 软件定时器基于硬件定时器构建,但是只是需要硬件定时器提供基础时钟,一般软件定时器的数量不受硬件资源限制,但是软件定时器线程可能会被高优先级线程打断导致精度不高;
  • 无论硬件定时器还是软件定时器,中断或超时回调函数都需要快进快出,超时函数中不能出现阻塞线程的情况
  • 3
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值