14.FreeRTOS软件定时器

news/2024/9/19 20:02:40

文章目录

  • 14. FreeRTOS软件定时器
    • 1. 软件定时器的简介
    • 2. 软件定时器的状态
    • 3. 单次定时器和周期定时器
    • 4. 软件定时器结构体成员
    • 5. 软件定时器相关API函数
    • 6. 软件定时器实验

14. FreeRTOS软件定时器

1. 软件定时器的简介

  • 硬件定时器与软件定时器:

    在这里插入图片描述

  • 软件定时器的优缺点:

    • 优点:
      • 硬件定时器数量有限,而软件定时器理论上只需有足够内存,就可以创建多个;
      • 使用简单、成本低。
    • 缺点:
      • 软件定时器相对硬件定时器来说,精度没有那么高(因为它以系统时钟为基准,系统时钟中断优先级又是最低,容易被打断)。 对于需要高精度要求的场合,不建议使用软件定时器。
  • FreeRTOS软件定时器的特点:

    • 可裁剪:软件定时器是可裁剪可配置的功能, 如果要使能软件定时器,需将configUSE_TIMERS 配置项配置成 1
    • 单次和周期:软件定时器支持设置成,单次定时器或周期定时器
  • 软件定时器服务任务:

    在这里插入图片描述

  • 软件定时器命令队列:

    在这里插入图片描述

  • 软件定时器的相关配置:

    在这里插入图片描述

    注意: 软件定时器的超时回调函数是在软件定时器服务任务中被调用的,服务任务不是专为某个定时器服务的,它还要处理其他定时器。

    所以,回调函数要尽快实行,不能进入阻塞状态,即不能调用那些会阻塞任务的 API 函数,如:vTaskDelay() ;访问队列或者信号量的非零阻塞时间的 API 函数也不能调用。

2. 软件定时器的状态

软件定时器共有两种状态:

  1. 休眠态:软件定时器可以通过其句柄被引用,但因为没有运行,所以其定时超时回调函数不会被执行;
  2. 运行态:运行态的定时器,当指定时间到达之后,它的超时回调函数会被调用。

​ 新创建的软件定时器处于休眠状态 ,也就是未运行的!

3. 单次定时器和周期定时器

  • FreeRTOS 提供了两种软件定时器:
  1. 单次定时器:单次定时器一旦定时超时,只会执行一次其软件定时器超时回调函数,不会自动重新开启定时,不过可以被手动重新开启。

  2. 周期定时器:周期定时器一旦启动以后就会在执行完回调函数以后自动的重新启动 ,从而周期地执行其软件定时器回调函数。

    在这里插入图片描述

  • 软件定时器的状态转换图:

    在这里插入图片描述

4. 软件定时器结构体成员

在这里插入图片描述

5. 软件定时器相关API函数

  • 相关API函数

    函数描述
    xTimerCreate()动态方式创建软件定时器
    xTimerCreateStatic()静态方式创建软件定时器
    xTimerStart()开启软件定时器定时
    xTimerStartFromISR()在中断中开启软件定时器定时
    xTimerStop()停止软件定时器定时
    xTimerStopFromISR()在中断中停止软件定时器定时
    xTimerReset()复位软件定时器定时
    xTimerResetFromISR()在中断中复位软件定时器定时
    xTimerChangePeriod()更改软件定时器的定时超时时间
    xTimerChangePeriodFromISR()在中断中更改定时超时时间
  • 创建软件定时器API函数

    在这里插入图片描述

  • 开启软件定时器API函数

    在这里插入图片描述

  • 停止软件定时器API函数

    在这里插入图片描述

  • 复位软件定时器API函数

    在这里插入图片描述

  • 更改软件定时器超时时间API函数

    在这里插入图片描述

6. 软件定时器实验

  • 创建任务:

    在这里插入图片描述

  • 软件定时器句柄和定义:

    //软件定时器句柄
    TimerHandle_t timer1_hanle = 0;
    TimerHandle_t timer2_hanle = 0;//软件定时器创建
    timer1_hanle = xTimerCreate("timer1", 1000, pdFALSE, (void *)1, timer1_callback);
    timer2_hanle = xTimerCreate("timer2", 1000, pdTRUE, (void *)2, timer2_callback);
    
  • 任务一:按键扫描并控制软件定时器:

    void task1(void* pvParamter)
    {uint8_t key = 0;while(1){key = key_scan(0);if(key == KEY0_PRES){xTimerStart(timer1_hanle, portMAX_DELAY);xTimerStart(timer2_hanle, portMAX_DELAY);}if(key == KEY1_PRES){xTimerStop(timer1_hanle, portMAX_DELAY);xTimerStop(timer2_hanle, portMAX_DELAY);}vTaskDelay(10);![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/167e1f8ebbd74175b5b91af08fb3407a.png#pic_center)}
    }
    
  • 软件定时器回调函数:

    void timer1_callback(TimerHandle_t pxTimer)
    {static uint32_t timer = 0;printf("timer1的运行次数:%d\r\n",++timer);
    }void timer2_callback(TimerHandle_t pxTimer)
    {static uint32_t timer = 0;printf("timer2的运行次数:%d\r\n",++timer);
    }
    
  • 实验结果:
    在这里插入图片描述


https://dhexx.cn/news/show-5396984.html

相关文章

基于GeoTools使用JavaFx进行矢量数据可视化实战

目录 前言 一、JavaFx展示原理说明 二、GeoTools的Maven依赖问题 三、引入Geotools相关的资源包 四、创建JavaFx的Canvas实例 五、JavaFx的Scene和Node的绑定 六、总结 前言 众所周知,JavaFx是Java继Swing之后的又一款用于桌面应用的开发利器。当然&#xff0…

字符串 - 反转字符串 II

541. 反转字符串 II 方法一&#xff1a;模拟&#xff08;reverse方法分开写&#xff09; /*** param {string} s* param {number} k* return {string}*/ var reverseStr function(s, k) {const n s.length;const arr Array.from(s);for (let i 0; i < n; i 2 * k) {re…

第七周:机器学习周报

第七周机器学习周报 摘要Abstract机器学习——神经卷积网络&#xff08;CNN&#xff09;1. 基于Neuron理解CNN1.1 receptive field&#xff08;感受野&#xff09;1.2 stride&#xff08;步幅&#xff09;1.3 padding&#xff08;填充&#xff09;1.4 filter&#xff08;滤波器…

VIVADO IP核之DDS直接数字频率合成器使用详解

VIVADO IP核之DDS直接数字频率合成器使用详解 目录 前言 一、DDS基本知识 二、DDS IP核使用之SIN COS LUT only 三、DDS IP核之SIN COS LUT only仿真 四、DDS IP核使用之Phase Generator and SIN COS LUT 五、DDS IP核之Phase Generator and SIN COS LUT仿真 总结 前言 …

等保测评中的安全策略制定与实施:打造稳固的信息安全基石

在数字化时代&#xff0c;信息安全已成为企业可持续发展的关键。等保测评&#xff0c;作为我国信息安全等级保护制度的核心组成部分&#xff0c;为企业提供了安全策略制定与实施的明确指导。本文旨在探讨等保测评框架下&#xff0c;如何制定和实施有效的安全策略&#xff0c;以…

《AOP实战》— 自定义注解

承接上文&#xff0c;在被面试官敲打的时候&#xff0c;会被问到一个致命问题&#xff1a;“你了解aop吗&#xff1f;有具体的使用经验吗&#xff1f;” 你&#xff1a;......... 言尽于此&#xff0c;此篇文章必能大补 自定义注解①&#xff1a;连续点击注解 package com.…

STM32驱动SG90舵机完成控制

一、前言 SG90舵机的工作原理主要是基于PWM&#xff08;脉冲宽度调制&#xff09;信号来控制。 SG90舵机内部有一个基准电压&#xff0c;微处理器产生的PWM信号通过信号线进入舵机&#xff0c;产生直流偏置电压&#xff0c;与舵机内部的基准电压做比较获得电压差输出。电压差的…

数据结构——栈的讲解(超详细)

前言&#xff1a; 小编已经在前面讲完了链表和顺序表的内容&#xff0c;下面我们继续乘胜追击&#xff0c;开始另一个数据结构&#xff1a;栈的详解&#xff0c;下面跟上小编的脚步&#xff0c;开启今天的学习之路&#xff01; 目录 1.栈的概念和结构 1.1.栈的概念 1.2.栈的结构…

数据结构总体概述

参考&#xff1a; 【王道考研】王道数据结构与算法详细笔记&#xff08;全&#xff09;_王道数据结构笔记-CSDN博客 数据结构的三要素 一、数据的逻辑结构 逻辑结构是指数据元素之间的逻辑关系&#xff0c;即从逻辑关系上描述数据。 逻辑结构包括&#xff1a; 集合结构&#xf…

XSS盲打与cookie劫持

目录 【学习目标、重难点知识】 【学习目标】 【重难点知识】 XSS盲打&#xff08;加载远程攻击payload&#xff09; XSS偷cookie cookie收集 在线XSS收集平台的使用 1. BeeF框架的使用 BeeF简介 安装和使用 XSS 一些实战应用 1. XSS PDF 2. 公网投毒 3. 网站挂马…