定时器的理论和使用

文章目录

  • 一、定时器理论
    • 1.1定时器创建和使用
  • 二、定时器实践
    • 2.1周期触发定时器
    • 2.2按键消抖


一、定时器理论

定时器是一种允许在特定时间间隔后或在将来的某个时间点调用回调函数的机制。对于需要周期性任务延迟执行任务的嵌入式应用程序特别有用。

软件定时器: FreeRTOS 提供的用于实现定时操作的功能。与硬件定时器不同,软件定时器在 FreeRTOS 的任务调度机制之上运行。
定时器回调函数: 当定时器到期时,FreeRTOS 将调用用户定义的回调函数。

定时器类型分为以下两种:
一次性定时器(One-shot Timer):定时器在到期后自动停止,仅调用一次回调函数。
周期性定时器(Auto-reload Timer):定时器在到期后自动重新启动,周期性地调用回调函数。

1.1定时器创建和使用

回调函数pxCallbackFunction可以使用pvTimerID分辨是哪个定时器
返回值: 成功则返回TimerHandle_t, 否则返回NULL

TimerHandle_t xTimerCreate( const char * const pcTimerName,
const TickType_t xTimerPeriodInTicks,
const UBaseType_t uxAutoReload,
void * const pvTimerID,
TimerCallbackFunction_t pxCallbackFunction );

在RTOS中,每隔一个固定的时间产生中断,中断函数里面可以去判断定时器时间有没有超时,超时后就唤醒守护任务去执行回调函数

其他任务要配置和使用定时器时,是通过定时器命令队列(timer command queue)和守护任务交互,所以守护任务优先级要尽可能高

在这里插入图片描述

所以在启动定时器要有一个xTicksToWait ,当队列满了要设置等待时间

BaseType_t xTimerStart( TimerHandle_t xTimer, TickType_t xTicksToWait );

定时器状态:冬眠(Dormant)和运行(Running)、

在这里插入图片描述
在这里插入图片描述

二、定时器实践

2.1周期触发定时器

创建定时器

static TimerHandle_t xMyTimerHandle;xMyTimerHandle = xTimerCreate("mytimer", 100, pdTRUE, NULL, MyTimerCallbackFunction);

回调函数

void MyTimerCallbackFunction( TimerHandle_t xTimer )
{static int cnt = 0;flagTimer = !flagTimer;printf("MyTimerCallbackFunction_t cnt = %d\r\n", cnt++);
}

启动定时器:把命令通过 定时器队列 发给守护任务,由守护任务来启动定时器


void Task1Function(void * param)
{volatile int i = 0;xTimerStart(xMyTimerHandle, 0);while (1){printf("Task1Function ...\r\n");}
}

结果:每隔100ms进入回调函数
在这里插入图片描述
在这里插入图片描述

2.2按键消抖

在嵌入式开发中,我们使用机械开关时经常碰到抖动问题:引脚电平在短时间内反复变化。针对这个问题,我们在中断函数中添加定时器,在产生中断后定时器延时20ms,假如由于抖动再次进入中断,继续延时20ms直到按键趋于稳定。

在这里插入图片描述

创建定时器, 设置一次触发,延时20ms

static TimerHandle_t xMyTimerHandle;xMyTimerHandle = xTimerCreate("mytimer", 2000, pdFALSE, NULL, MyTimerCallbackFunction);

在回调函数中记录定时器中断次数cnt

void MyTimerCallbackFunction( TimerHandle_t xTimer )
{static int cnt = 0;flagTimer = !flagTimer;printf("Get GPIO Key cnt = %d\r\n", cnt++);
}

按键中断函数中使用定时器消除抖动,通过复位函数xTimerReset往定时器队列写入数据,由守护任务根据队列命令来复位定时器。在这里多次产生中断会多次调用复位函数xTimerReset。时间到达后进入回调函数

void EXTI0_IRQHandler(void)
{static int cnt = 0;if(EXTI_GetITStatus(EXTI_Line0) != RESET){printf("EXTI0_IRQHandler cnt = %d\r\n", cnt++);/* 使用定时器消除抖动 */xTimerReset(xMyTimerHandle, 0); /* Tcur + 2000 */EXTI_ClearITPendingBit(EXTI_Line0);     //清除中断}     
}

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【C++语言】动态内存管理

文章目录 前言内存管理数据存储位置C语言动态内存管理方式C动态内存管理方式:new/deleteoperator new与operator delete函数new和delete的实现原理定位new表达式(了解)常见面试题 总结C语言系列学习目录 前言 本章要介绍的是动态内存管理&am…

ORACLE ODA一体机存储节点电源故障的分析处理

近期,某用户的ORACLE ODA一体机在例行机房巡检时出现亮黄灯告警;用户反馈次问题后我们立刻通过远程方式,登陆ODA的控制台进行查看; 对于ODA一体机(2个计算节点1个存储节点),计算节点可以通过il…

nginx 发布静态资源

一. nginx 发布静态资源 在nginx中nginx.conf配置文件中添加内容如下: server {listen 90;server_name localhost;# 配置静态资源文件,就可以访问了location / {root /home/fooie-shop;index index.html;}# 配置音频和图片资源location /imoo…

深入了解 npm:Node.js 包管理工具详解

文章目录 一、npm 基本概念1.1 什么是 npm?1.2 package.json 文件 二、npm 常用命令2.1 初始化项目2.2 安装依赖2.2.1 安装单个包2.2.2 全局安装包2.2.3 安装开发依赖 2.3 移除依赖2.4 更新依赖2.5 查看已安装的包2.6 发布包 三、npm 高级用法3.1 使用 npm scripts3…

数据结构之二叉树详解[1]

在前面我们介绍了堆和二叉树的基本概念后,本篇文章将带领大家深入学习链式二叉树。 1.预备知识 2.二叉树结点的创建 3.二叉树的遍历 3.1前序遍历 3.2中序遍历 3.3 后序遍历 4.统计二叉树的结点个数 5.二叉树叶子结点的个数 6.二叉树第k层的结点个数 7.总结 …

589.N叉树的前序遍历

刷算法题: 第一遍:1.看5分钟,没思路看题解 2.通过题解改进自己的解法,并且要写每行的注释以及自己的思路。 3.思考自己做到了题解的哪一步,下次怎么才能做对(总结方法) 4.整理到自己的自媒体平台。 5.再刷重复的类…

高级个人主页

高级个人主页 效果图部分代码领取源码下期更新预报 效果图 部分代码 <!DOCTYPE html> <html lang"en"><head><meta charset"utf-8" name"viewport" content"widthdevice-width, initial-scale1, maximum-scale1, use…

数据驱动测试在接口测试和网站测试中的应用

什么是数据驱动测试 据驱动测试是一种测试方法&#xff0c;其中测试数据和测试逻辑是分开的&#xff0c;测试数据被存储在外部源中&#xff08;如Excel表格、JSON文件、数据库等&#xff09;&#xff0c;测试逻辑则独立于测试数据。在测试过程中&#xff0c;测试数据被读取并传…

代码随想录算法训练营第五十三天

今天同事说他要离职啦&#xff0c;还挣挺多的&#xff0c;我也慢慢努力吧&#xff01;&#xff01; 儿子似乎有点斜颈&#xff0c;还好不是很大的病&#xff0c;儿子也开始面对人生的苦难啦。都好好加油生活&#xff01; 1143.最长公共子序列 二维可以理解一点。 class Solut…

用面向对象的思想编写实时嵌入式C程序

实时嵌入式系统的软件一般由C语言编写&#xff0c;程序结构基本上都是这样的&#xff1a; // 主程序 int main(void) {init(); // 初始化while(1){tick(); // 业务逻辑}return 0; }// 计时器 static unsigned int g_timer_tick_cnt 0; // 时钟中断回调 void isr_time…

[c++]多态的分析

多态详细解读 多态的概念多态的构成条件 接口继承和实现继承: 多态的原理:动态绑定和静态绑定 多继承中的虚函数表 多态的概念 -通俗的来说&#xff1a;当不同的对象去完成某同一行为时&#xff0c;会产生不同的状态。 多态的构成条件 必须通过基类的指针或者引用调用虚函数1虚…

超级简单的地图操作工具开发可疑应急,地图画点,画线,画区域,获取地图经纬度等

使用echars的地图画点,画线,画区域,获取地图经纬度等 解压密码:10086007 地图也是用临时的bmap.js和china.js纯离线二选一 一共就这么多文件 画点,画线,画区域 点击地图获取经纬度-打印到控制台,这样就能渲染航迹,多变形,结合其他算法算圆等等操作 下载资源:https://download…

Databend 开源周报第 144 期

Databend 是一款现代云数仓。专为弹性和高效设计&#xff0c;为您的大规模分析需求保驾护航。自由且开源。即刻体验云服务&#xff1a;https://app.databend.cn 。 Whats On In Databend 探索 Databend 本周新进展&#xff0c;遇到更贴近你心意的 Databend 。 了解 Databend …

Redis-详解(基础)

文章目录 什么是Redis&#xff1f;用Redis的特点&#xff1f;用Redis可以实现哪些功能&#xff1f;Redis的常用数据类型有哪些?Redis的常用框架有哪些?本篇小结 更多相关内容可查看 什么是Redis&#xff1f; Redis&#xff08;Remote DictionaryServer&#xff09;是一个开源…

【AI学习】对指令微调(instruction tuning)的理解

前面对微调&#xff08;Fine-tuning&#xff09;的学习中&#xff0c;提到指令微调。当时&#xff0c;不清楚何为指令微调&#xff0c;也一直没来得及仔细学习。 什么是指令微调&#xff1f;LLM经过预训练后&#xff0c;通过指令微调提升模型的指令遵循能力。所谓指令&#xf…

uniapp怎么使用jsx

安装vitejs/plugin-vue-jsx npm install vitejs/plugin-vue-jsx -Dvite.config.js配置 import { defineConfig } from "vite"; import uni from "dcloudio/vite-plugin-uni"; import vueJsx from vitejs/plugin-vue-jsxexport default defineConfig({plu…

全方位入门git-慕课网 笔记

目录 【上传github忽略某些文件】【配置用户名和邮箱】【想要删除不需要的文件时如何进行操作】【想要给文件重命名如何操作】【想要移动文件到其他位置时如何操作】【文件有变化时&#xff0c;如何查看前后变化】【操作失误的情况下如何实现一键还原】【不再追踪时如何实现撤销…

区块链 | NFT 水印:Review on Watermarking Techniques(一)

&#x1f34d;原文&#xff1a;Review on Watermarking Techniques Aiming Authentication of Digital Image Artistic Works Minted as NFTs into Blockchains 1 应用于 NFT 的水印技术 常见的水印技术类型可以分为&#xff1a; 可见 v i s i b l e \mathsf{visible} visi…

项目9-网页聊天室1(注册+Bycrpt加密)

1.准备工作 1.1.前端页面展示 1.2 数据库的建立 我们通过注册页面&#xff0c;考虑如何设计用户表数据库。 用户id&#xff0c;userId用户名&#xff0c;唯一&#xff0c;username用户密码&#xff0c;password&#xff08;包括密码和确认密码ensurePssword【数据库没有该字段…

【全开源】酷柚易汛ERP 源码部署/售后更新/上线维护

一款基于FastAdminThinkPHPLayui开发的ERP管理系统&#xff0c;帮助中小企业实现ERP管理规范化&#xff0c;此系统能为你解决五大方面的经营问题&#xff1a;1.采购管理 2.销售管理 3.仓库管理 4.资金管理 5.生产管理&#xff0c;适用于&#xff1a;服装鞋帽、化妆品、机械机电…