7-FreeRTOS软件定时器

简介: 7-FreeRTOS软件定时器

1- 简介


1.1 软件定时器简述


软件定时器就是允许函数设置一定的等待时间,然后执行。定时器执行的函数被称为定时器的回调函数。定时器从启动到执行回调函数之间的时间称为定时器的周期。定时器的回调函数在定时器的时间到达时执行。

软件定时器要先创建才能使用。


1.2 软件定时器有效的实现


软件定时器功能的实现是非常容易的,但是想要有效的实现可能会优点困难,FreeRTOS的定时器,不会从中断中执行定时器的回调函数,除非定时器到达了,否则不会消耗任何的运算时间,不会像时钟中添加任何的运算负担,如果中断禁用了,也不会遍历任何的链表结构。

定时器服务任务主要利用了FreeRTOS的一些特性,允许像应用程序添加定时器功能,而对于应用程序可执行的程序影响最小。


1.3 有关定时器的回调函数


定时器回调函数在定时器服务任务中进行执行,所以定时器回调函数不要试图阻塞。比如,定时器回调函数在访问队列或信号量时不能调用vTaskDelay()、vTaskDelayUntil()或指定非零阻塞时间。


2- 定时器服务和定时器命令队列


计时器功能是可选的,不是FreeRTOS核心内核的一部分。相反,它是由定时器服务任务提供的。

FreeRTOS提供了一组与定时器相关的API函数。其中许多函数使用标准的FreeRTOS队列向计时器服务任务发送命令。用于此目的的队列称为timer command queue。timer command queue是FreeRTOS定时器实现的私有命令,不能直接访问。

下图演示了这种情况。左边的代码表示一个函数,它是用户应用程序的一部分,并从作为同一用户应用程序的一部分创建的任务中调用。右边的代码表示定时器服务任务的实现。定时器命令队列是连接应用任务和定时器服务任务的纽带。在本例中,从应用程序代码调用xTimerReset() API函数。这导致将重置命令发送到定时器命令队列,由定时器服务任务处理。应用程序代码只调用xTimerReset() API函数——它没有(也不能)直接访问定时器命令队列。


3-软件定时器程序配置


要使FreeRTOS 软件计时器 API在应用程序中可用,只需:

将 FreeRTOS/Source/timers.c 源文件添加到您的项目中,以及在应用程序 FreeRTOSConfig.h 头文件中定义。下面这个表是一些常量:


4- 自动冲加载


定时器有两种类型:单触发定时器和自动重新加载定时器。一旦启动,单触发定时器只会执行它的回调函数一次。它可以手动重新启动,但不能自动重新启动。相反,自动重新加载定时器一旦启动,在每次执行回调函数后都会自动重新启动,导致周期性的回调执行。

下图演示了,单触发定时器和自动重载之间的区别,在此图中,定时器1为周期等于100的单次定时器,计时器2是自动重加载周期等于200次的定时器。



5-定时器的重置


重新设置已经开始运行的定时器。重置定时器会导致定时器重新计算其达到的时间,这种行为在下面的图中得到了展示,其中定时器1是一个周期为5秒的单触发定时器。


640.png

相关文章
|
6月前
|
API 调度
【FreeRTOS】软件定时器的使用
【FreeRTOS】软件定时器的使用
163 0
|
6月前
【FreeRTOS】中断管理(二)
【FreeRTOS】中断管理
119 0
|
6月前
【FreeRTOS】中断管理(三)
【FreeRTOS】中断管理
|
6月前
|
数据采集 调度 C语言
嵌入式系统中的定时器中断与任务调度
嵌入式系统中的定时器中断与任务调度
338 0
|
6月前
|
API 调度 芯片
FreeRTOS 延时函数和软件定时器 详解
FreeRTOS 延时函数和软件定时器 详解
FreeRTOS 延时函数和软件定时器 详解
|
6月前
|
API C语言
【FreeRTOS】中断管理(一)
【FreeRTOS】中断管理
119 0
|
6月前
|
API
FreeRTOS软件定时器的原理以及使用实例
FreeRTOS软件定时器的原理以及使用实例
142 0
|
6月前
|
数据采集 API 数据处理
FreeRTOS入门教程(软件定时器)
FreeRTOS入门教程(软件定时器)
178 0
|
6月前
|
API 调度
FreeRTOS深入教程(中断管理)
FreeRTOS深入教程(中断管理)
298 0