【ESP-IDF FreeRTOS】软件定时器

news2025/1/10 11:44:11

除了ESP-IDF中的软硬件定时器,我们还可以使用FreeRTOS中的软件定时器,它是基于Tick的定时器。不过我一般不用,因为有ESP-IDF的定时器了嘛,但还是介绍一下。

首先包含头文件。

#include "freertos/timers.h"

接着我们创建一个定时器。

TimerHandle_t xTimerCreate(const char *const pcTimerName, const TickType_t xTimerPeriodInTicks, const BaseType_t xAutoReload, void *const pvTimerID, TimerCallbackFunction_t pxCallbackFunction)

 第一个参数我们传入字符串表示这个定时器的名称,名称没什么用随便叫就行。

第二个参数传入Tick时钟周期数来表示定时器的周期。

第三个参数设置是否为循环定时器,给pdTRUE为循环的,给pdFALSE为一次性的定时器。

第四个参数我们传入一个void*的指针,但是这个不是传出参数,而是传入参数,我们来给定时器分配ID,不需要的话可以给个NULL。官方是说定时器的ID可以在定时器的回调函数里区分具体是哪个定时器,因为多个定时器可以共用同一个回调函数。

最后一个给定时器设置回调函数。

回调函数要无返回值,有一个定时器句柄类型的参数。

创建成功之后返回定时器句柄,此时这个定时器处于休眠状态,我们还需要将它开启。

使用下面这个宏。

xTimerStart(xTimer, xTicksToWait)

传入定时器句柄和一个等待时间,单位为时钟周期TickType_t。因为有个定时器命令队列,我们不一定可以马上打开指定的定时器,因此有个等待时间。

除了上面这个,还有个中断版本的,函数名后加个FromISR,这边就不介绍了。

开启之后我们还可以暂停。

xTimerStop(xTimer, xTicksToWait)

参数一样是定时器句柄和等待时间。

还有个重启定时器。

xTimerReset(xTimer, xTicksToWait)

如果重启之前定时器已经暂停,那么开启定时器。

如果重启之前定时器已经开启,那么重置计数时间。

另外如果开启定时器的时候定时器已经开启,那么等同于重启。

我们可以使用下面这个函数来判断定时器处于什么状态。

BaseType_t xTimerIsTimerActive(TimerHandle_t xTimer)

如果处于休眠状态,那么返回pdFALSE,否则返回非pdFALSE之外的值。

还有个删除定时器的宏。

xTimerDelete(xTimer, xTicksToWait)

有上面几个函数基本上就够用了,不过我再贴一些函数出来吧。

void *pvTimerGetTimerID(const TimerHandle_t xTimer)

返回分配给定时器的ID。

const char *pcTimerGetName(TimerHandle_t xTimer)

返回创建定时器时设置的名字。

上面俩可以用来调试,也可以用于区分使用同一个回调函数的不同的定时器,因为定时器的回调函数的参数只有一个定时器句柄,通过定时器句柄可以使用上面俩函数获取到定时器的信息。

下面这个宏可以修改定时器的周期。

xTimerChangePeriod(xTimer、xNewPeriod、xTicksToWait)

关于定时器的函数还蛮多的,在使用的时候可以去官方文档里查,接下来来个小例子简单演示一下定时器。

#include <stdio.h>
#include "freertos/FreeRTOS.h"
#include "freertos/task.h"
#include "freertos/timers.h"
TimerHandle_t timer1Handle, timer2Handle;

void timer1Callback(TimerHandle_t xTimer) {
    printf("this is timer1\r\n");
}

void timer2Callback(TimerHandle_t xTimer) {
    xTimerStop(timer1Handle, pdMS_TO_TICKS(100));
    xTimerDelete(timer1Handle, pdMS_TO_TICKS(100));
}

void app_main(void) {
    int32_t timer1Id = 0, timer2Id = 1;
    timer1Handle = xTimerCreate("timer1", pdMS_TO_TICKS(300), pdTRUE,(void*)&timer1Id, timer1Callback);
    timer2Handle = xTimerCreate("timer2", pdMS_TO_TICKS(3000), pdFALSE,(void*)&timer2Id, timer2Callback);
    xTimerStart(timer1Handle, pdMS_TO_TICKS(100));
    xTimerStart(timer2Handle, pdMS_TO_TICKS(100));
    TickType_t curTime = xTaskGetTickCount();
    while (1) {
        printf("this is main\r\n");
        xTaskDelayUntil(&curTime, pdMS_TO_TICKS(1000));
    }
}

示例很简单,就是开俩定时器,一个周期的,一个一次性的,周期定时器打印一段话,一次性定时器关闭周期定时器。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2131693.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

N2011A叉车限速器如何实现超速报警且强制限速的

叉车安装限速器是对厂区叉车控制行驶速度常见的一种方式&#xff0c;但限速器真的能限速吗&#xff1f; 九盾N2011A叉车限速器是采取无线传感器的方式&#xff0c;相比传统的限速器&#xff0c;需要前桥打孔攻牙&#xff0c;稍有不慎就打断&#xff0c;安装麻烦耗工时&#xf…

2024年提升转化率的10个最佳弹窗软件解决方案

无论你是喜欢还是讨厌它们&#xff0c;弹窗通知并不一定都是坏的。当然&#xff0c;大多数网站访问者并不愿意被横幅打扰&#xff08;更糟糕的是那种自动播放音频的视频&#xff09;。不过&#xff0c;你有没有想过只在他们快要离开你的网站时才显示弹窗&#xff1f;使用退出意…

FP7127 / FP7128:LED舞台灯降压方案 RGB调光 智能调光模块

前言&#xff1a; 舞台灯作为一种应用于文化娱乐场所的灯具&#xff0c;用来营造环境、渲染氛围&#xff0c;在舞台上突出中心人物、塑造演员形象&#xff0c;在文化场馆&#xff0c;如博物馆等的场所&#xff0c;突出展品细节。根据灯光用途和适用类型&#xff0c;舞台灯可以…

【F的领地】项目拆解:百家号批量搬运掘金 | 搬运类项目核心思路分享

【F的领地】项目拆解&#xff1a;百家号批量搬运掘金 项目介绍 百家号批量搬运掘金是之前老百家号项目的一种新玩法&#xff0c;操作简单。 只需会操作电脑和手机即可&#xff0c;无脑搬运就行&#xff0c;玩法是批量搬运视频&#xff0c;用软件去重后在百家号发布。 然后是…

Miracast/WifiDisplay开发相关的深入调研分析-android投屏实战开发

Miracast/WifiDisplay概念介绍 Miracast Miracast是由Wi-Fi联盟于2012年所制定&#xff0c;以Wi-Fi直连&#xff08;Wi-Fi Direct&#xff09;为基础的无线显示标准。支持此标准的消费性电子产品&#xff08;又称3C设备&#xff09;可透过无线方式分享视频画面&#xff0c;例如…

Linux和C语言(Day09)

一、学习内容 指针 指针的概念 什么是内存 内存是计算必不可少的硬件设备&#xff0c;一般说到内存常会说TA多大——M、G、T 内存单位&#xff1a;bit【位&#xff0c;最小单位】 Byte【字节&#xff0c;基本单位】 KB MB GB TB CPU如何从内存取数据 通过内存地址去取 将内存…

全球主流单片机制造商

欧美地区 1、FreescaleNXP&#xff08;飞思卡尔恩智浦&#xff09;&#xff1a;荷兰&#xff0c;主要提供16位、32位MCU。应用范围&#xff1a;汽车电子、LED和普通照明、医疗保健、多媒体融合、家电和电动工具、楼宇自动化技术电机控制、电源和功率转换器、能源和智能电网、自…

数据资产入表(二)|数据要素资产化与数据资产入表路线框架,一文说清“入表”实现步骤

前言 小兵的数据资产入表系列文章第一篇为大家介绍了国内外关于“数据要素市场化”的探索现状以及推进“数据资产入表”的相关政策。想必大家读完第一篇后&#xff0c;已经认识到数据要素市场化是大势所趋&#xff0c;但是数据的特殊性使得其市场化之路比其他生产要素要更加复杂…

Vue3+Django5+REST Framework开发电脑管理系统

前端&#xff1a;Vue3TypeScript 后端&#xff1a;Django5REST Framework 功能介绍 用户管理角色管理菜单管理配件管理仓库管理类型管理电脑管理入库管理出库管理库存管理收发明细管理 界面预览 源码地址&#xff1a;managesystem: 电脑管理系统

亚信安全出席第五届国际反病毒大会 探究AI现代网络勒索治理

近日&#xff0c;第二届网络空间安全&#xff08;天津&#xff09;论坛正式开幕。本届论坛由天津市政府主办&#xff0c;国家计算机病毒应急处理中心、天津市公安局、天津市滨海新区政府承办&#xff0c;国家网络与信息安全信息通报中心协办&#xff0c;围绕“共建网络安全 共治…

MySQL表操作及约束

修改表 重命名&#xff1a; mysql> alter table user1 rename to user; 新增一列 mysql> alter table user add image_path varchar(128) comment 路径 after birthday; mysql> alter table user add image_path varchar(128) comment 路径 after birthday; Query…

火山引擎VeDI核心产品DataTester再进化,A/B大模型应用评测功能上线

更多技术交流、求职机会&#xff0c;欢迎关注字节跳动数据平台微信公众号&#xff0c;回复【1】进入官方交流群 近日&#xff0c;火山引擎A/B测试产品DataTester上线了A/B大模型应用评测功能。此次升级不仅强化了模型上线前的基础能力评测&#xff0c;还新增了针对线上使用场景…

基本数据结构:“树”的简单介绍

树是一种重要的非线性数据结构&#xff0c;它模拟了树这种自然结构&#xff0c;由结点&#xff08;Node&#xff09;和边&#xff08;Edge&#xff09;组成&#xff0c;常用于表示分层关系&#xff08;如文件系统、组织结构等&#xff09;。以下是树的一些基本概念和特性&#…

对浏览器事件循环机制的理解

目录 事件循环宏观理解事件循环异步任务细分宏任务与微任务后的理解结合流程图与代码理解览器事件循环 首先来介绍一些谷歌浏览器的进程与线程。 谷歌浏览器包含五个进程&#xff1a;浏览器主进程、渲染进程、GPU进程、网络进程、插件进程。 其中最重要的渲染进程包含五个线程…

java多线程笔记2

一.线程和进程的区别 为什么要进行并发编程:CPU多核心 通过多进程可以实现并发编程,但是进程太重量了,因此引入了多线程. 线程是轻量级的进程,创建和销毁的开销更小,进程是包含线程的,同一进程的若干线程公用同一份系统资源(内存,硬盘等). 二.Thread类重要的属性 三.线程等…

Chainlit集成LlamaIndex并使用通义千问模型实现AI知识库检索网页对话应用

前言 之前使用Chainlit集成Langchain并使用通义千问大语言模型的API接口&#xff0c;实现一个基于文档文档的网页对话应用。 可以点击我的上一篇文章《Chainlit集成Langchain并使用通义千问和智谱AI实现AI知识库检索网页对话应用》 查看。 本次将Langchain框架更改为LlamaInde…

初识php库管理工具composer的体验【爽】使用phpword模板功能替换里面的字符串文本

需求&#xff1a; 做了一个租赁的项目&#xff0c;里面要求签署个人授权协议&#xff0c;里面要填写姓名&#xff0c;手机号&#xff0c;身份证号&#xff0c;签署日期等参数&#xff0c;格式如下图 格式&#xff1a; 如上图&#xff0c;word中的字符串模板变量使用${varname…

Linux的历史,版本,Linux的环境安装、简单学习4个基本的Linux指令、创建普通用户等的介绍

文章目录 前言一、Linux的历史二、版本三、Linux的环境安装1. 腾讯云服务器的申请2. xshell的安装与使用 四、 简单学习4个基本的Linux指令1. ls2. pwd3. mkdir4. cd 五、创建普通用户总结 前言 Linux的历史&#xff0c;版本&#xff0c;Linux的环境安装、简单学习4个基本的Li…

公司电脑屏幕监控软件大战摸鱼怪!五个好用的实时屏幕监控软件,第一款Get了吗?

在繁忙的办公室里&#xff0c;总有一些“摸鱼怪”在不经意间悄然出现&#xff0c;他们或许在浏览无关网页&#xff0c;或许在偷偷聊天&#xff0c;甚至可能在上班时间玩起了游戏。 一、企业面临的问题详情 小李是公司的一名程序员&#xff0c;每天的工作任务繁重且紧急。 然而…

seafaring靶场漏洞测试攻略

打开网页 一.sql注入漏洞 1.输入框测试回显点 -1 union select 1,2,3# 2.查看数据库名 -1 union select 1,2,database()# 3.查看表名 -1 union select 1,2,group_concat(table_name) from information_schema.tables where table_schematest# 4.查看admin表中列名 -1 unio…