正点原子FreeRTOS——软件定时器
发布网友
发布时间:2024-10-22 12:00
我来回答
共1个回答
热心网友
时间:2024-11-28 22:44
定时器是计算机系统中用于在指定时间后触发事件的组件。它们有硬件和软件两种形式。硬件定时器通常内置在芯片中,精度较高,能够自动触发中断,但受硬件资源限制。软件定时器则是在软件层面实现的,具有较高灵活性和可配置性。下面我们将详细介绍软件定时器的概念、特点、使用方式以及一些相关API。
软件定时器通常具有如下优点:可裁剪性、单次与周期性可选。裁剪性意味着软件定时器的配置与使用可以根据具体需求灵活调整。单次与周期性定时器允许用户选择是在特定时间执行一次操作(单次定时器)还是在每次定时周期到达时重复执行(周期定时器)。
FreeRTOS软件定时器具有以下特点:一是可配置性,通过设置宏`configUSE_TIMERS`为1来启用软件定时器功能;二是可以是单次或周期性定时器。然而,需要注意的是,软件定时器的超时回调函数由软件定时器服务任务执行,因此在回调函数内不能使用可能引起任务阻塞的API函数。
软件定时器服务任务在`vTaskStartScheduler()`函数调用时创建,负责管理所有软件定时器。FreeRTOS提供了软件定时器相关API,它们将命令(即操作请求)写入命令队列。用户不可直接访问该队列,只能通过API执行操作。
在配置软件定时器时,用户需注意软件定时器的超时回调函数是在软件定时器服务任务中执行的,因此服务任务必须处理所有定时器任务。
软件定时器的状态包括休眠态与运行态。在休眠态,定时器未运行,定时超时回调函数不会执行;而当达到指定时间时,定时器进入运行态,此时回调函数会被调用。
FreeRTOS软件定时器提供两种类型:单次定时器和周期定时器。单次定时器在超时后仅执行一次回调函数,不会自动重启;而周期定时器在超时后会自动重启,持续执行回调函数。
软件定时器结构体包含关键信息,如定时器句柄、周期、回调函数以及状态。通过这些信息,可以实现定时器的创建、开启、停止、复位与周期时间的更改。
在FreeRTOS中创建软件定时器使用`xTimerCreate`API,开启定时器使用`xTimerStart`,停止定时器使用`xTimerStop`,复位定时器使用`xTimerReset`,更改周期时间则使用`xTimerChangePeriod`。
软件定时器实验旨在通过实际操作学习相关API的使用。实验通常涉及创建任务、设置定时器、以及在任务中执行定时器的开启与停止操作。在实验中,首先需要在配置文件中启用软件定时器功能,确保定时器任务的优先级足够高以确保及时执行。创建任务时,会自动创建两个列表(当前运行列表与溢出列表)以及命令队列。在创建完定时器后,系统会检查是否超时。对于周期定时器,系统会在超时后从当前列表移除,再重新插入列表;单次定时器则将其状态置零。随后,执行超时回调函数。若无超时,系统将检查是否有定时器挂载在溢出列表中,并根据情况进入等待接收命令的阻塞状态。最终,系统会接收并执行用户定义的命令。