FreeRTOS(6)----软件定时器

这篇具有很好参考价值的文章主要介绍了FreeRTOS(6)----软件定时器。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

一,软件定时器概述

软件定时器允许设置一段时间,当设定的时间到达之后就会执行指定的功能函数,被定时器调用的这个函数叫做定时器的回调函数。回调函数的两次执行间隔叫做定时器的定时周期。

二,回调函数的注意事项

回调函数是在定时器服务任务中执行的,因为定时器服务任务是由内核产生,无法由用户控制,所以本身的运行周期时间是固定的。

所以调用回调函数不可以调用有阻塞的函数API,eg.vTaskDelay()、vTaskDelayUntil()等,因为当执行定时器服务任务的回调函数里有这些函数,CPU就会被占用,使得定时器的任务无法得到处理其他定时器的超时任务【定时器服务任务负责管理和处理所有的软件定时器的超时事件】,当阻塞的事件过长的时候,会导致超时事件得不到处理,导致系统出现异常。

三.定时器命令队列

定时器命令队列是用户应用任务和定时器服务任务的一个媒介。

#define xTimerStart( xTimer, xTicksToWait ) xTimerGenericCommand( ( xTimer ), tmrCOMMAND_START, ( xTaskGetTickCount() ), NULL, ( xTicksToWait ) )

tmrCOMMAND_START命令表示启动一个定时器,并通过定时器命令队列把相关信息传递给定时器服务任务,由定时器服务任务统一管理和执行。

定时器服务任务在接收到tmrCOMMAND_START命令后,会检查定时器句柄是否有效,如果有效则将该定时器加入定时器链表,并按照xTimeToWait指定的时间长度启动该定时器的超时计时器。同时,定时器服务任务会根据该定时器的超时时间和当前系统时间计算出该定时器的超时时间点,并在该时间点触发该定时器的回调函数。

四.软件定时器的属性

·单次定时器:当定时器开始启动,并且到达指定时间,回调函数只会执行一次,且定时器不会再自动重新启动,但会手动启动。

·周期定时器:当定时间隔到达之后,执行回调函数,还会自动重新启动,可以实现周期性的调用函数。

FreeRTOS(6)----软件定时器 

 对于软件定时器我的理解:

软件定时器可以设定超时事件且不会和定时器服务任务产生冲突,因为FreeRTOS内核的定时器服务是基于软件定时器和系统时基(tick)实现的。定时器服务任务是一个高优先级任务,它负责处理所有的软件定时器事件。在系统启动时,定时器服务任务会被创建并开始运行,它以系统时基的时间间隔定期被调度执行。定时器服务任务的主要作用是从定时器消息队列中获取定时器事件,然后根据定时器事件的类型进行相应的处理,例如启动、停止、重置、删除定时器等。而定时器事件则由软件定时器生成,并通过xTimerChangePeriod()、xTimerStart()等函数向定时器服务任务发送。软件定时器提供了一种轻量级、灵活的机制,允许用户自定义定时器的超时时间。当软件定时器到达超时时间时,FreeRTOS内核会自动将该定时器的事件加入定时器消息队列中,等待定时器服务任务处理。

软件定时器开始运行,当设定的时间到了,会产生一个超时事件,将该事件放入到消息队列中,计数器此时会开始第二轮的计时,当等待的超时事件被执行的时候,也就是定时器服务任务执行的时候,计数器要暂停,等待服务任务执行结束,才会从原本暂停的计数值开始继续执行,当超时事件一直未被处理或者下一轮产生了新的超时事件,这个超时事件则会被舍弃。

当定时器到达超时时间后,若同时有多个定时器到期,则定时器服务任务会按照它们的超时时间先后顺序进行处理。如果某个定时器回调函数执行的时间过长导致定时器服务任务未及时处理其他超时事件,则可能会影响其他定时器的响应能力和精度。

超时事件的1个tick:1ms

#define configTICK_RATE_HZ						(1000)                  //时钟节拍频率,这里设置为1000,周期就是1ms

五,函数介绍

1.xTimerStart( TimerHandle_t xTimer, TickType_t xTicksToWait );

  • xTimer:要启动的定时器的句柄,它是在调用 xTimerCreate() 函数创建定时器时返回的。
  • xTicksToWait:等待定时器启动的最长时间。如果传递的值为 0,则该函数将立即返回,而不等待定时器启动;如果传递的值为 portMAX_DELAY,则该函数将一直等待,直到定时器启动。
  • 调用 xTimerStart() 函数之后,定时器会开始计时,并且在每次计时器超时事件发生时,都会调用该定时器注册的回调函数。需要注意的是,在启动定时器之前,必须先通过 xTimerReset() 函数重置定时器的计数器,以确保定时器从指定的周期开始计时。

2.TimerReset( TimerHandle_t xTimer, TickType_t xTicksToWait );

  • xTimer:要重置的定时器的句柄,它是在调用 xTimerCreate() 函数创建定时器时返回的。
  • xTicksToWait:等待定时器重置的最长时间。如果传递的值为 0,则该函数将立即返回,而不等待定时器重置;如果传递的值为 portMAX_DELAY,则该函数将一直等待,直到定时器重置。

3.xTimerCreate( const char * pcTimerName, TickType_t xTimerPeriod, UBaseType_t uxAutoReload, void * pvTimerID, TimerCallbackFunction_t pxCallbackFunction );

  • pcTimerName:定时器的名称,在调试和跟踪时使用。通常可以将其设置为 NULL。
  • xTimerPeriod:定时器超时时间,单位是 tick。用于确定定时器超时事件的发生间隔。当定时器服务任务开始时,定时器计数器会被递减,直到达到 0,此时定时器超时事件就会发生。可以将该参数设置为 pdMS_TO_TICKS() 宏的值来将毫秒转换为 tick。
  • uxAutoReload:是否需要自动重置计数器,并从头开始重新计时,以便创建一个循环定时器。如果将其设置为 0,则该定时器不会自动重置计数器,而是只会执行一次超时事件;否则,如果将其设置为 1,则该定时器将会自动重置计数器,并且在每个超时事件发生后,会按照设置的周期再次触发超时事件。
  • pvTimerID:一个指向任意类型数据的指针,用于指定应该在计时器超时事件中传递的数据。如果不需要传递数据,则可以将其设置为 NULL。
  • pxCallbackFunction:一个指向定时器超时事件回调函数的指针。当定时器计数器达到 0 时,定时器服务任务会调用此函数。在该函数中,可以编写相关的任务代码来执行所需的操作,例如发出信号量或将任务加入队列等。

4.xTimerStop( TimerHandle_t xTimer, TickType_t xTicksToWait );文章来源地址https://www.toymoban.com/news/detail-453956.html

  • xTimer:要停止的定时器的句柄,它是在调用 xTimerCreate() 函数创建定时器时返回的。
  • xTicksToWait:等待该定时器停止的最长时间。如果传递的值为 0,则该函数将立即返回,而不等待定时器停止;如果传递的值为 portMAX_DELAY,则该函数将一直等待,直到定时器停止。

到了这里,关于FreeRTOS(6)----软件定时器的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • (第48-59讲)STM32F4单片机,FreeRTOS【事件标志、任务通知、软件定时器、Tickless低功耗】【纯文字讲解】【】

    【吐血总结】FreeRTOS难点、Systick中断-滴答定时器、PendSV中断-任务切换、SVC中断-系统底层、时间片调度-时钟节拍【已完结】 (第1-8讲)STM32F4单片机,FreeRTOS基础知识总结【视频笔记、代码讲解】【正点原子】【原创】 (第9-10讲)STM32F4单片机,FreeRTOS任务创建和删除(动态方

    2024年02月01日
    浏览(54)
  • 【STM32/FreeRTOS】SysTick定时器及FreeRTOS系统节拍

    目录 一、SysTick定时器 1、SysTick寄存器介绍 (1)控制及状态寄存器 (2)重装载数值寄存器 (3)当前数值寄存器 2、SysTick寄存器配置函数 二、FreeRTOS中的SysTick定时器 1、SysTick配置函数及分析 2、SysTick中断函数 三、其他操作配置FreeRTOS的SysTick 1、找到头文件 FreeRTOSConfig.h 有如

    2024年01月24日
    浏览(35)
  • 定时器概述

    定时器是一个比较常见的数据结构,或者说框架,以一个最简单的例子引出,在游戏中,冷却时间使用的就是定时器; 所以说定时器是 等待时间过期执行对应时间事件处理( 回调函数 ) 的一个框架; 补充:下文中可能会出现定时任务,它和时间事件基本上是一个东西 那么现

    2024年02月04日
    浏览(25)
  • STM32CubeMX教程5 TIM 定时器概述及基本定时器

    开发板(STM32F407G-DISC1) STM32CubeMX软件(Version 6.10.0) keil µVision5 IDE(MDK-Arm) ST-LINK/V2驱动 逻辑分析仪nanoDLA 使用STM32CubeMX软件配置STM32F407开发板 使用基本定时器TIM6实现每500ms控制绿灯状态变化一次,基本定时器TIM7实现每1s控制红灯状态变化一次 STM32F407拥有2个基础定时器、

    2024年02月03日
    浏览(79)
  • STM32软件定时器

    目录 什么是定时器? 软件定时器优缺点 软件定时器原理 软件定时器相关配置 单次定时器和周期定时器 软件定时器相关 API 函数 1. 创建软件定时器 2. 开启软件定时器 3. 停止软件定时器 4. 复位软件定时器 5. 更改软件定时器定时时间 实操 cubeMX配置 代码实现  简单可以理解为

    2024年02月11日
    浏览(29)
  • 【杰理AC696X】软件定时器介绍

    测试SDK版本:《ac696n_soundbox_sdk_v1.6.0》 SDK给出了软件定时器的相关接口,主要有 sys_hi_timer_add、sys_s_hi_timer_add、sys_timer_add等。 列出AC696X系列软件定时器的相关知识点,再结合代码调试和工具测试,总结出使用案例。 上面的低功耗指的是 power down,不是soft poweroff。 usr_timer的强

    2024年02月10日
    浏览(34)
  • 9.物联网操作系统之软件定时器

    一。软件定时器概念及应用 1.软件定时器定义         就是软件实现定时器。 2.FreeRTOS软件定时器介绍         如上图所示,Times的左边为设置定时器时间,设置方式可以为任务设置或者中断设置;Times的右边为定时器的定时响应,使用CallBack响应。  3.FreeRTOS软件定时器工作

    2024年02月14日
    浏览(36)
  • 物联网操作系统-软件定时器(software timer)

    软件定时器就是\\\"闹钟\\\",你可以设置闹钟, ⚫ 在 30 分钟后让你起床工作 ⚫ 每隔 1 小时让你例行检查机器运行情况 软件定时器也可以完成两类事情: ⚫ 在\\\"未来\\\"某个时间点,运行函数 ⚫ 周期性地运行函数 日常生活中我们可以定无数个\\\"闹钟\\\",这无数的\\\"闹钟\\\"要基于一个真实

    2024年02月21日
    浏览(37)
  • 9.物联网操作系统之软件定时器,实现一个闹钟

    一。软件定时器概念及应用 1.软件定时器定义         就是软件实现定时器。 2.FreeRTOS软件定时器介绍         如上图所示,Times的左边为设置定时器时间,设置方式可以为任务设置或者中断设置;Times的右边为定时器的定时响应,使用CallBack响应。  3.FreeRTOS软件定时器工作

    2024年02月12日
    浏览(38)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包