FreeRTOS学习笔记(8)---- 软件定时器

2023-11-15

使用FreeRTOS软件定时器需要在文件FreeRTOSConfig.h先做如下配置
1、configUSE_TIMERS 使能软件定时器
2、configTIMER_TASK_PRIORITY 定时器任务优先级
3、configTIMER_QUEUE_LENGTH 命令队列长度
4、configTIMER_TASK_STACK_DEPTH 定时器任务堆栈大小

#define configUSE_TIMERS  1   //为1时启用软件定时器
#define configTIMER_TASK_PRIORITY (configMAX_PRIORITIES-1)        //软件定时器优先级
#define configTIMER_QUEUE_LENGTH  5      //软件定时器队列长度
#define configTIMER_TASK_STACK_DEPTH (configMINIMAL_STACK_SIZE*2)    //软件定时器任务堆栈大小

从周期的角度考虑,软件定时器分为两种:单次定时器和周期定时器。两者的区别:
在这里插入图片描述

创建软件定时器:
在这里插入图片描述
xTimerStart函数原型
在这里插入图片描述
参数:
pcTimerName:软件定时器名字
xTimerPeriodInTicks:定时器周期
uxAutoReload:pdTRUE时为周期定时器,pdFALSE时为单次定时器
pvTimerID:定时器ID
pxCallbackFunction:回调函数

复位软件定时器:
在这里插入图片描述
开启软件定时器:
在这里插入图片描述
停止软件定时器:
在这里插入图片描述

实验:
创建一个周期定时器(周期1s),一个单次定时器(周期2s)

//创建软件周期定时器
AutoReloadTimer_Handle = xTimerCreate((const char *) "AutoReloadTimer",
				  (TickType_t	) 1000,//1s
				 (UBaseType_t ) pdTRUE,
				 (void *		  ) 1,
				 (TimerCallbackFunction_t) AutoReloadCallback );
						 
//创建软件周期定时器
OneShotTimer_Handle = xTimerCreate((const char *) "OneShotTimer",
				  (TickType_t	) 2000,//2s
				 (UBaseType_t ) pdFALSE,
				 (void *		  ) 2,
				 (TimerCallbackFunction_t) OneShotCallback );

回调函数

//周期定时器回调函数
void AutoReloadCallback(TimerHandle_t xTimer) 	
{
	static u8 timers = 0;
	timers++;
	printf("AutoReload run = %d timers\r\n", timers);
}
//单次定时器回调函数
void OneShotCallback(TimerHandle_t xTimer)		
{
	static u8 timers = 0;
	timers++;
	printf("OneShot run = %d timers\r\n", timers);
}

通过按键开启关闭定时器

key = KEY_Scan(0);
	switch(key)
	{
		case WKUP_PRES:
			err = xTimerStart( AutoReloadTimer_Handle, 0 );
			if(err == pdFAIL)	printf("AutoReload Start Failed!\r\n");
			else printf("AutoReload Start !\r\n");
			break;
		case KEY1_PRES:
			err = xTimerStop( AutoReloadTimer_Handle, 0 );
			if(err == pdFAIL)	printf("AutoReload Stop Failed!\r\n");
			else printf("AutoReload Stop !\r\n");
			break;
		case KEY0_PRES:
			err = xTimerStart( OneShotTimer_Handle, 0 );
			if(err == pdFAIL)	printf("OneShot Start Failed!\r\n");
			else printf("OneShot Start !\r\n");
			break;
		case KEY2_PRES:
			err = xTimerStop( OneShotTimer_Handle, 0 );
			if(err == pdFAIL)	printf("OneShot Stop Failed!\r\n");
			else printf("OneShot Stop !\r\n");
			break;
	}

实验现象:
在这里插入图片描述

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

FreeRTOS学习笔记(8)---- 软件定时器 的相关文章

  • 心跳跟随的心形灯(STM32(HAL)+WS2812+MAX30102)

    文章目录 前言 介绍 系统框架 原项目地址 本项目开发开源地址 硬件PCB 软件功能 详细内容 硬件外壳制作 WS2812级联及控制 MAX30102血氧传感器 0 96OLED FreeRTOS 效果视频 总结 前言 在好几年前 我好像就
  • 详解FreeRTOS中的软件定时器

    软件定时器用于让某个任务定时执行 或者周期性执行 比如设定某个时间后执行某个函数 或者每隔一段时间执行某个函数 由软件定时器执行的函数称为软件定时器的回调函数 参考资料 Mastering the FreeRTOS Real Time Ke
  • STM32F103移植FreeRTOS必须搞明白的系列知识---3(堆栈)

    STM32F103移植FreeRTOS必须搞明白的系列知识 1 Cortex CM3中断优先级 STM32F103移植FreeRTOS必须搞明白的系列知识 2 FreeRTOS任务优先级 STM32F103移植FreeRTOS必须搞明白的系
  • FreeRTOS-内核控制函数

    FreeRTOS 内核控制函数 FreeRTOS中有一些内核函数 一般来说这些内核函数在应用层不会使用 但是内核控制函数是理解FreeRTOS中断的基础 接下来我们逐一分析这些内核函数 taskYIELD 该函数的作用是进行任务切换 这是一
  • 一文教你学会keil软件仿真

    仿真在我们调试代码中是非常重要的 通过仿真 我们可以快速定位到错误代码 或者错误逻辑的地方 这里我就以上一篇博客为例 教大家如何软件仿真 软件仿真不需要单片机 直接通过keil软件进行代码调试 一 打开工具 二 选择软件仿真 三 开始仿真
  • Freertos中vTaskDelay()是怎么用的

    1 常见的使用场景 void vLED Task void pvParameters while 1 Heartbeat LED vTaskDelay 1000 portTICK RATE MS 说明 上面这段代码的意思是 led翻转后经过
  • FreeRTOS ------- 任务(task)

    在学习RTOS的时候 个人觉得带着问题去学习 会了解到更多 1 什么是任务 在FreeRTOS中 每个执行线程都被称为 任务 每个任务都是在自己权限范围内的一个小程序 其具有程序入口每个任务都是在自己权限范围内的一个小程序 其具有程序入口通
  • 基于HAL库的FREERTOS----------一.任务

    FreeROTS 就是一个免费的 RTOS 类系统 这里要注意 RTOS 不是指某一个确定的系统 而是指一类系统 比如 UCOS FreeRTOS RTX RT Thread 等这些都是 RTOS 类操作系统 FreeRTOS 是 RTOS
  • FreeRTOS临界区

    FreeRTOS临界区是指那些必须完整运行 不能被打断的代码段 比如有的外设的初始化需要严格的时序 初始化过程中不能被打断 FreeRTOS 在进入临界区代码的时候需要关闭中断 当处理完临界区代码以后再打开中断 FreeRTOS 系统本身就
  • FreeRTOS临界段和开关中断

    http blog sina com cn s blog 98ee3a930102wg5u html 本章教程为大家讲解两个重要的概念 FreeRTOS的临界段和开关中断 本章教程配套的例子含Cortex M3内核的STM32F103和Co
  • FreeRTOS,串口中断接收中使用xQueueOverwriteFromISR()函数,程序卡死在configASSERT

    原因 UART的中断优先级设置的太高 高于了configMAX SYSCALL INTERRUPT PRIORITY宏定义的安全中断等级 UART的中断等级小于等于宏定义的优先等级即可
  • 啊哈C的简单使用

    打开啊哈C 新建一个程序输出hello world include
  • FreeRTOS学习---“定时器”篇

    总目录 FreeRTOS学习 任务 篇 FreeRTOS学习 消息队列 篇 FreeRTOS学习 信号量 篇 FreeRTOS学习 事件组 篇 FreeRTOS学习 定时器 篇 FreeRTOS提供了一种软件定时器 用来快速实现一些周期性的
  • freeRTOS出现任务卡死的情况。

    最近在做一个产品二代升级的项目 代码是上一任工程师留下的 很多BUG 而且融合了HAL库和LL库 以及github上下载的GSM源码 很不好用 我这边是将2G模块换成了4G 且添加了单独的BLE模块 因此只在源码的基础上 去除2G和BLE代
  • FreeRTOS笔记(二)

    FreeRTOS笔记 二 静态任务 文章目录 FreeRTOS笔记 二 静态任务 一 任务定义 二 任务创建 2 1 定义任务栈 2 2 定义任务函数 2 3 定义任务控制块 2 4 实现任务创建函数 三 实现就绪列表 3 1 定义就绪列表
  • FreeRTOS之系统配置

    1 FreeRTOS的系统配置文件为FreeRTOSConfig h 在此配置文件中可以完成FreeRTOS的裁剪和配置 在官方的demo中 每个工程都有一个该文件 2 先说一下 INCLUDE 开始的宏 使用 INCLUDE 开头的宏用来
  • 再论FreeRTOS中的configTOTAL_HEAP_SIZE

    关于任务栈和系统栈的基础知识 可以参考之前的随笔 FreeRTOS 任务栈大小确定及其溢出检测 这里再次说明 define configTOTAL HEAP SIZE size t 17 1024 这个宏 官方文档解释 configTOTA
  • 防止GCC LTO删除函数

    我使用 GCC ARM Embedded 和 FreeRTOS FreeRTOS具有的功能vTaskSwitchContext 仅在某些情况下使用 内联汇编代码 问题是 当我使用LTO时 GCC不考虑内联汇编代码并认为该函数没有被使用 因此
  • 哪些变量类型/大小在 STM32 微控制器上是原子的?

    以下是 STM32 微控制器上的数据类型 http www keil com support man docs armcc armcc chr1359125009502 htm http www keil com support man d
  • 有关 CMake 错误的问题:没有为目标提供源

    我正在尝试使用 cmake 和 eclipse 将 FreeRtos 添加到我的项目中 但出现错误 我运行的是 debian 10 我的 cmake 版本是 3 13 4 cmake 的文件可以在以下位置找到这个 git 仓库 https

随机推荐

  • 邀请函

    区块链 元宇宙是近年来备受关注的新兴技术 也是推动数字经济发展的重要力量 高质量标准引领高质量发展 加快形成标准引领 充分释放区块链 元宇宙对实体经济牵引赋能效应 推进形成相关产业体系高质量发展新格局刻不容缓 为进一步探索标准化建设对区块链
  • Qt 操作数据库报错:QSqlDatabase: QSQLITE driver not loaded

    在解决了Clion Qt的数据库问题后 Clion Qt 添加SQLite数据库 又遇到了新的问题 在运行程序时 出现QSqlDatabase QSQLITE driver not loaded错误 使用下面语句输出支持的数据库 会输出空
  • 华为OD机试真题 Python,简单的解压缩算法,入栈出栈,队列

    def decoder s str gt str n len s A3B1 C 3 3 bracket pos stack 不是数字都入栈 def repeat stack pos num 弹栈次数 m len stack pos repe
  • element-ui中二次封装一个带select的form组件

    带select的form组件 样式 代码
  • java文档注释

    一 文档注释简介 需要编写注释的地方 包 公有类与接口 公有的和受保护的构造器及方法 公有的和受保护的域 注释应该放置在所描述特性的前面 注释以 开始 并以 结束 每个 文档注释在标记之后紧跟着自由格式文本 标记由 开始 如 author
  • OpenCV4.5.2 分水岭算法出现的 Error: Assertion failed (src_depth != CV_16F && src_depth != CV_32S) 解决方法

    在贾志刚老师关于opencv3 1 0的分水岭算法讲解中 链接为 添加链接描述 在merker和create markers代码块要是按照视频所给出代码在OpenCV 4 5 2上运行的话会出现下图这样的情况 这个错误出现在显示生成的 ma
  • Anaconda简介

    anaconda是python发行的包的管理工具 其中自带python的版本 还带很多python的包 安装它比安装python好 可以省掉再安装python包的时间 推荐使用Anaconda 用Anaconda安装python的包是非常便
  • 外设驱动库开发笔记53:MAX31856热偶变送器驱动

    在我们的产品中经常有需要温度检测的地方 而热电偶温度检测电路是我们常用的 热电偶温度检测的方法很多 有时出于简单方便的考虑我们会选择热偶温度变送器来实现 这一篇我们就来讨论使用MAX31856热电偶温度变送器实现温度的检测 1 功能概述 M
  • java模拟redisSentinel故障转移

    模拟redis出现宕机情况下redis sentinel的故障转移 1 java代码以下实现方式 倘若创建maven项目需要在pom xml中引入依赖 不是maven项目需要引入对应jar包
  • 大规模数据处理中拒绝连接错误分析处理

    1 处理的数据有几百个G 把数据处理成按照手机号计算1万多个特征 2 数据处理环境 spark 2 0 2 executor memory 40g total executor cores 120 driver memory 40g 3 报
  • spring boot 使用 com.mysql.jdbc.Driver 和 com.mysql.cj.jdbc.Driver的区别

    2019独角兽企业重金招聘Python工程师标准 gt gt gt 今天集成spring boot 2 1 1构建web应用并且集成jdbc 发现默认用的8 0 13
  • 记录一下Win10启用WSL2的流程

    个人笔记 请勿转载 参考文章如下 Using WSL2 in a Docker Linux container on Windows to run a Minecraft Java Edition Windows 10开启Linux子系统
  • win10下如何装CH340驱动

    由于win10系统对PL2303兼容性不太好 而CH340兼容性相对较好 但是 win10系统安装CH340串口驱动后 一直有黄色叹号 并且显示 由于windows无法加载这个设备所需的驱动程序 导致这个设备工作异常 这是因为win10有个
  • 自然语言处理学习笔记(一)————概论

    目录 1 自然语言处理概念 2 自然语言与编程语言的比较 1 词汇量 2 结构化 3 歧义性 4 容错性 5 易变性 6 简略性 3 自然语言处理的层次 1 层次图 2 自然语言处理系统输入源 3 词法分析 4 信息抽取 5 文本分类与文本
  • 打印出1-100的奇数 (C语言)

    代码 include
  • React Hooks —— useState异步更新队列、闭包、浅比较深入理解

    文章目录 useState 设计原理 实现原理 setXXX沿着作用域查找闭包的理解 与同步异步无关 更新多状态 方案一 类似于类组件中一样 让状态值是一个对象 包含需要的全部状态 每一次只修改其中的一个状态值 setXXX不支持类组件se
  • 前端导出excel文件

    文章目录 安装插件 下载成excel文件 主要代码分析 将文件转成文件流 用于下载 构建工作簿 用于下载 下载函数全部代码 js原生使用文件流进行下载 new Blob 封装的完整的Export2Excel js文件 参考 安装插件 imp
  • 隐式神经表示

    以图像为例 其最常见的表示方式为二维空间上的离散像素点 但是 在真实世界中 我们看到的世界可以认为是连续的 于是 可以考虑使用一个连续函数来表示图像的真实状态 然而我们无从得知这个连续函数的准确形式 因此有人提出用神经网络来逼近这个连续函数
  • 问题解决:/lib/libEGL.so.1:对‘wl_display_dispatch_queue_pending’未定义的引用

    在安装opencv2 4和编译程序的时候 经常出现的一个问题 弄了好久 最后无意间解决了 错误描述 lib libEGL so 1 对 wl display dispatch queue pending 未定义的引用 collect2 错误
  • FreeRTOS学习笔记(8)---- 软件定时器

    使用FreeRTOS软件定时器需要在文件FreeRTOSConfig h先做如下配置 1 configUSE TIMERS 使能软件定时器 2 configTIMER TASK PRIORITY 定时器任务优先级 3 configTIMER