软件定时器

基本概念

freertos是并行的操作系统,可以多线程运行,但是其是通过抢占制度来执行逻辑。

硬件定时器

芯片本身提供的定时功能,一般由外部晶振提供给芯片输入时钟,芯片向软件模块提供一组配置寄存器,接受控制输入,到达设定时间值后芯片中断控制器产生时钟中断。
特点:精度高,纳秒级,中断触发。

软件定时器

软件定时器是由操作系统提供的一类系统接口,它构建在硬件定时器基础之上,使系统能够提供不受硬件定时器资源限制的定时器服务,它实现的功能与硬件定时器也是类似的。

软件定时器的回调函数类似硬件的中断服务函数

在嵌入式系统和计时应用中,定时器的溢出时间是指定时器达到其计数上限后重新从零开始计数的时间。这是因为定时器通常是一个计数器,它在达到最大计数值后会回绕到零,这一过程称为定时器溢出。

FreeRtos支持的软件定时器功能

  1. 裁剪:能通过宏关闭软件定时器功能
  2. 软件定时器创建
  3. 软件定时器启动
  4. 软件定时器停止
  5. 软件定时器复位
  6. 软件定时器删除

软件定时器支持单次模式和周期模式

  1. 单次模式:当用户创建了定时器并启动了定时器后,定时时间到了,只执行一次回调函数之后就
    将该定时器删除,不再重新执行。
  2. 周期模式:这个定时器会按照设置的定时时间循环执行回调函数,直到用户将定时器删除,具体
    见下图
    周期模式

软件定时器的精度

系统节拍是系统的心跳节拍,表示系统时钟的频率,就类似人的心跳, 1s 能跳动多少下,系统节拍配置为 configTICK_RATE_HZ,
该宏在 FreeRTOSConfig.h 中有定义,默认是 1000。那么系统的时钟节拍周期就为 1ms(1s 跳动1000 下,每一下就为 1ms)。软件定时器的所定时数值必须是这个节拍周期的整数倍,例如节拍周期是 10ms,那么上层软件定时器定时数值只能是 10ms, 20ms, 100ms 等,而不能取值为 15ms。

软件定时器的运作机制

  1. pxCurrentTimerList:系统新创建并激活的定时器都会以超时时间升序的方式插入到 pxCurrentTimerList 列表中。系统在定时器任务中扫描 pxCurrentTimerList 中的第一个定时器,看是否已超时,若已经超时了则调用软件定时器回调函数。否则将定时器任务挂起,因为定时时间是升序插入软件定时器列表的,列表中第一个定时器的定时时间都还没到的话,那后面的定时器定时时间自然没到。

  2. pxOverflowTimerList 列表是在软件定时器溢出的时候使用,作用与 pxCurrentTimerList 一致

软件定时器的函数接口

软件定时器创建函数 osTimerNew()

osTimerId_t osTimerNew (osTimerFunc_t func, osTimerType_t type, void *argument, const osTimerAttr_t *attr)
参数:
• func :软件定时器的回调函数,当定时时间到达的时候就会调用这个函数。
• type :定时器类型,使用单次类型还是循环类型。
• argument :传给软件定时器回调函数的参数。
• attr :描述软件定时器属性的结构体。
返回值:若创建成功则返回事件组 ID,用于访问创建的软件定时器。创建失败则返回 NULL

软件定时器删除函数osTimerDelete()

于删除一个已经被创建成功的软件定时器,删除之后就无法使用该定时器,并且定时器相应的资源也会被系统回收释放
osStatus_t osTimerStop (osTimerId_t timer_id)

软件定时器启动函数 osTimerStart()

osStatus_t osTimerStart (osTimerId_t timer_id, uint32_t ticks)
软件定时器在创建完成的时候是处于休眠状态的,需要使用相关函数将软件定时器活动起来
参数:
• timer_id :软件定时器 ID
• ticks :软件定时器需要设置的时间。
返回值:当成功时返回 osOK,失败返回负值。

软件定时器停止函数 osTimerStop()

停止一个已经启动的软件定时器
osStatus_t osTimerStop (osTimerId_t timer_id)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值