FreeRTOS【14】软件定时器使用

1.开发背景

        基于以上的章节,这个篇章主题是软件定时器使用,能使用 FreeRTOS 的基本都是从裸机 MCU 过来的,基本都知道 MCU 最基本的功能之一就是定时器,确切的说是硬件定时器,外围电路已经构建好的,精度很高,基本都是微秒级别定时,稳定性也不错,唯一的缺点就是资源太少,定时器的数目有限。

        于是 FreeRTOS 从线程中衍生出了软件定时器的概念,用于一般精度的定时操作,即毫秒级定时。由于 FreeRTOS 内核自身的就是依靠一个定时器打节拍而运行的,本身是没有锁相环的,软件定时器的实现依托的是线程(prvTimerTask),实现机制如下。

        既然实现的方式是线程,那就必须配置线程的参数,例如线程优先级考核堆栈大小,定时器的回调函数实际是运行在定时器线程中的,注意堆栈大小,如果想要定时器回调快速响应就需要提高优先级。也正由于定时器处理实在线程中,所以定时器回调不能阻塞,否则影响其他定时器。

        事实上,FreeRTOS 创建多个定时器也是使用同一个定时器线程,这就意味着需要引入队列,这个就需要配置队列的最大长度。

#define configUSE_TIMERS                     1
#define configTIMER_TASK_PRIORITY            5
#define configTIMER_QUEUE_LENGTH             10
#define configTIMER_TASK_STACK_DEPTH         (configMINIMAL_STACK_SIZE * 2)

2.开发需求

        设计实验:

        1)创建 1 个单次定时器,1 个自动重载定时器

        2)2 个定时器同时启动,在定时器回调中输出对应日志

        3)观察现象

3.开发环境

        window10 + MDK + STM32F429 + FreeRTOS10.3.1

4.实现步骤

4.1 实现编码

#include "appTest.h"#include <stdio.h>
#include <string.h>
#include <stdlib.h>#include "mspDwt.h"
#include "mspGpio.h"
#include "mspExti.h"#include "FreeRTOS.h"
#include "task.h"
#include "queue.h"
#include "stream_buffer.h"#include "appLog.h"/*#define configUSE_TIMERS                     1#define configTIMER_TASK_PRIORITY            1#define configTIMER_QUEUE_LENGTH             10#define configTIMER_TASK_STACK_DEPTH         (configMINIMAL_STACK_SIZE * 2)
*/typedef struct
{/* 定时器句柄 */TimerHandle_t timerSingle;      // 单次TimerHandle_t timerAutoLoad;    // 自动加载}Ctrl_t;/* 文件指针 */
static Ctrl_t s_ctrl = {0};
static Ctrl_t *p = &s_ctrl;/* 定时器回调 */
void vTimerCallback_Single(TimerHandle_t pxTimer)
{Log_Debug("%s\r\n", __func__);
}void vTimerCallback_AutoLoad(TimerHandle_t pxTimer)
{Log_Debug("%s\r\n", __func__);
}/* 测试初始化 */
void aTest_Init(void)
{/* 创建定时器任务 */TickType_t xTimerPeriodInTicks = 1000;  // 定时时长UBaseType_t uxAutoReload = pdFALSE;p->timerSingle = xTimerCreate("vTimerCallback_Single", xTimerPeriodInTicks,uxAutoReload, NULL, vTimerCallback_Single);uxAutoReload = pdTRUE;p->timerAutoLoad = xTimerCreate("vTimerCallback_AutoLoad", xTimerPeriodInTicks,uxAutoReload, NULL, vTimerCallback_AutoLoad);/* 启动定时器 */xTimerStart(p->timerSingle, 1000);xTimerStart(p->timerAutoLoad, 1000);
}/* Key2 PC13   Key0 PH3 Key1 PH2 */
void Exti13_TriggerInterrupt(void)
{mspExti_Close(13);if (mspGpio_GetInput("PC13") == 0){}
}

4.2 结果显示

注意查看的是,打圈的就是软件定时器控制线程

4.3 常用接口

xTimerStart()            // 启动定时器
xTimerStop()             // 停止定时器
xTimerChangePeriod()     // 修改定时周期
xTimerReset()            // 定时器复位

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

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

相关文章

bug 定位tag

mega: 解压所有log 命令 extract_and_rename . 播放 tag&#xff1a;MediaServiceConnection、BluetoothMediaBrowserService、PlaybackManager、MediaPlayEventListener message: AudioFocus、onPlaybackStateChanged:PlaybackState {state 网易云播放sdk问题&#xf…

【实战JVM】-实战篇-05-内存泄漏及分析

【实战JVM】-实战篇-05-内存泄漏及分析 1 内存溢出和内存泄漏1.1 常见场景1.2 解决内存溢出的方法1.2.1 发现问题1.2.1.1 top1.2.1.2 ViusalVM1.2.1.3 arthas1.2.1.4 PrometheusGrafana 1.2.2 堆内存状况对比1.2.3 内存泄漏原因-代码中1.2.3.1 equals()-hashCode()1.2.3.2 内部…

小程序-富文本编辑框的注意事项

富文本编辑框官网位置 表单组件 / editor (qq.com)https://developers.weixin.qq.com/miniprogram/dev/component/editor.html &#xff08;一&#xff09;富文本编辑框的作用 1.适用于一些表单的提交 2.这些表单内容需要自定义图片大小&#xff0c;编辑文字样式 主要用到的是…

MySQL分页:ROW_NUMBER() vs LIMIT

在 MySQL 中&#xff0c;实现数据分页的方法主要有两种&#xff1a;使用 ROW_NUMBER() 窗口函数和使用 LIMIT 子句。本文将探讨这两种方法的优劣&#xff0c;帮助您选择最适合您的场景。 1. ROW_NUMBER() 分页 ROW_NUMBER() 是 MySQL 8.0 及以上版本支持的窗口函数&#xff0…

【C++】10.list

list这个迭代器是双向迭代器&#xff0c;与vector的迭代器具有很大的区别&#xff0c;主要在于双向迭代器不支持&#xff0b;- 操作 正由于list的双向迭代器&#xff0c;因此<algorithm>中的sort()函数无法使用&#xff0c;list单独实现了一个sort()函数&#xff0c;但效…

[力扣题解] 151. 反转字符串中的单词

题目&#xff1a;151. 反转字符串中的单词 思路 代码 Method 1&#xff0c;Me class Solution { public:string reverseWords(string s) {int i, start;// Step 1for(i 0; i < s.size() - 1; i){if(s[i] && s[i 1] ){s.erase(i 1, 1);i--;}}// Step 2if…

统计信号处理基础 习题解答10-5

题目 通过令 并进行计算来重新推导MMSE估计量。提示&#xff1a;利用结果 解答 首先需要明确的是&#xff1a; 上式是关于观测值x 的函数 其次需要说明一下这个结果 和教材一样&#xff0c;我们用求期望&#xff0c;需要注意的是&#xff0c;在贝叶斯情况下&#xff0c;是个…

创刊即王炸?首个IF近7分,稳坐中科院1区!同领域全球第一!

【欧亚科睿学术】 01 期刊基本概况 【期刊类型】经济类SSCI 【出版社】SPRINGER出版社 【期刊概况】IF&#xff1a;8.0-9.0&#xff0c;JCR1区&#xff0c;中科院1区 【版面类型】正刊&#xff0c;仅少量版面 【预警情况】2020-2024年无预警记录 【收录年份】2016年被WO…

C语言| 三个整数从小到大排序

【分析思路】 三个整数从小到大排序 这个程序的算法是&#xff1a; 先把第一个数num1跟它后面所有的数相比较&#xff0c;找出最小的&#xff0c;通过中间变量temp交换,赋给num1&#xff1b; 接着中间值num2和它后面所有的数相比较&#xff0c;找出第二小的&#xff0c;然后赋给…

Facebook开户|Facebook做落地页的标准和建议

哈喽呀家人们下午好~今天Zoey来跟大家带来Facebook做落地页的标准和建议&#xff01;需要的家人建议点赞收藏啦&#xff01;&#xff01;用户通过点击你的推广链接、搜索引擎搜索结果页面的快照链接、社交媒体中的网页链接、电子邮件中的链接等进入你网站的特定页面&#xff0c…

tcp链接中的三次挥手是什么原因

一、tcp链接中的正常四次挥手过程&#xff1f; 刚开始双方都处于 ESTABLISHED 状态&#xff0c;假如是客户端先发起关闭请求。四次挥手的过程如下&#xff1a; 1、客户端打算关闭连接&#xff0c;此时会发送一个 TCP 首部 FIN 标志位被置为 1 的报文&#xff0c;也即 FIN 报文…

pytorch项目实战-分类模型李宏毅 21 机器学习第三次作业代码详解 CNN图片分类任务

CNN 卷积神经网络食物分类任务 前言一、数据集介绍二、CNN模型整体框架三、卷积神经网络代码详解3.1 导入需要使用的包3.2 数据集&#xff0c;数据加载器&#xff0c;数据增强操作3.2.1 数据增强3.2.2 数据集构建3.2.3 加载器构建 3.3 卷积神经网络构建3.4 训练代码3.4.1 半监督…

jmeter多用户登录并退出教程

有时候为了模拟更真实的场景&#xff0c;在项目中需要多用户登录并退出操作&#xff0c;大致参考如下 多用户登录前面已经实现&#xff1a;参考博文 多用户登录并退出jmx文件&#xff1a;百度网盘 提取码&#xff1a;0000 一、多用户退出操作 添加一个setUp线程组&#xff0…

Perplexity 搜索引擎刚刚推出了新的页面功能——维基百科可以扔了

Perplexity 允许用户根据搜索结果创建自定义页面 人工智能搜索引擎初创公司 Perplexity 推出了一项新功能&#xff0c;使其结果更具粘性&#xff0c;允许用户将研究转变为易于共享的页面。页面建立在 Perplexity 中现有的人工智能驱动的搜索功能之上&#xff0c;该功能使用与 …

PLC编程自动与手动:深入探索两者的本质差异与潜在挑战

PLC编程自动与手动&#xff1a;深入探索两者的本质差异与潜在挑战 在工业自动化领域中&#xff0c;PLC&#xff08;可编程逻辑控制器&#xff09;编程的自动与手动模式如同两个截然不同的世界&#xff0c;既相互交织又各具特色。这两种模式不仅在功能实现上有所区别&#xff0…

云服务(ECS)Docker安装vulhub安装详解

本文以xshell进行远程控制 1.以ssh连接云服务器 ssh 服务器名公网ip [D:\~]$ ssh root47.99.138.9 在弹框中输入密码 2.安装docker curl -s http://get.docker.com/ | sh rootiZbp1fm14idjlfp53akni8Z:~# curl -s https://get.docker.com/ | sh # Executing docker insta…

使用Lua基本实现分布式锁并自动续期

分布式锁的成熟方案很多,比如redission、zookeeper…… package com.cdn.redission.controller;import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation

php自学【笔记一】结合实战-读代码 学知识

<?php// [ 应用入口文件 ] namespace think;if(version_compare(PHP_VERSION,7.2.0,<)) {die(HkCms开源内容管理系统要求PHP版本 > 7.2.0&#xff0c;当前PHP版本为&#xff1a;.PHP_VERSION.&#xff0c;请更换PHP版本后再试&#xff01;); }if (file_exists(__DIR_…

万字长文,小白新手怎么开始做YOLO实验,从零开始教!整体思路在这里,科研指南针!

最近专栏来了很多的新手小白&#xff0c;对科研实验的过程感到困惑和无从下手&#xff0c;这篇文章就来讲解一下整体的科研流程&#xff0c;从选择数据集到发表论文的各个步骤&#xff0c;并针对大家在实验中常犯的错误进行解答。并且为大家提供通向我其他相关博客的指引&#…

激光焊接机作为一种高效、精密的焊接设备

激光焊接机是一种用于材料加工时激光焊接的机器&#xff0c;以下是对其的详细介绍&#xff1a; 1. 定义与别称&#xff1a; 激光焊接机&#xff0c;又常称为激光焊机、镭射焊机&#xff0c;是材料加工激光焊接时用的机器。 2. 工作原理&#xff1a; 激光焊接是利用高能量…