freertos软件定时器

2023-05-16

哈喽,这篇文章是freertos解析的最后一篇文章.我们将会讲解一个利用任务延时实现的软件定时器.

 

1.创建

timer结构体和创建一目了然,看看初始化函数

是不是有点熟悉.timer的管理有点类似任务的管理.

如果是第一次创建则初始化timer列表和timer队列,队列结构体如下图

到这里是不是有点不知所然,不要着急接着往下看

 

2.开始

#define xTimerStart( xTimer, xTicksToWait ) xTimerGenericCommand( ( xTimer ), tmrCOMMAND_START, ( xTaskGetTickCount() ), NULL, ( xTicksToWait ) )

哦豁,原来是一个宏定义,大胆猜测这里使用了队列发送消息

果然如此,封装了一个DaemonTaskMessage_t的message,然后发送队列消息.发送到哪里去了,一定是timer任务.

顺着思路看下timer的任务都处理什么事情.

 

3任务体

任务就是在处理timer的消息,所有都是围绕着超时时间和队列进行.看一眼

获取timer列表的最近一次超时时间.第一次当然是0

1.如果列表不空并且timer超时,则进行超时处理

2.否则等待消息,.

先看1,如下

1.把timer从列表中移除

2.如果是定时timer,则重新插入列表

3.调用timer注册的回调函数

再看2,如下

1.加入timer的等待接收列表

2.timer任务加入等待列表

综上,进行上下文切换,任务调度

 

4.命令处理

处理命令.两种情况运行到这里,timer超时或者timer接收到命令

最后又回到了获取timer任务体的开始.

 

5.思考与总结

timer任务利用列表和队列实现了软件定时器.回想下刚才的过程,其实思路还是很清晰的.

亲爱的朋友,恭喜你,你已经完全掌握了freertos系统知识.

现在你可以自信的开始一段旅程了

 

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

freertos软件定时器 的相关文章

  • STM32CubeMX+FreeRTOS学习笔记(一)

    嵌入式实时操作系统FreeRTOS 基本概述 在嵌入式领域当中 实时操作系统的应用越来越广泛了 目前嵌入式操作系统种类很多 例如 Clinux C OS II C OS III FreeRTOS RT Thread等等 这篇文章所记录的就是
  • FreeRTOS 软件定时器的使用

    FreeRTOS中加入了软件定时器这个功能组件 是一个可选的 不属于freeRTOS内核的功能 由定时器服务任务 其实就是一个定时器任务 来提供 软件定时器是当设定一个定时时间 当达到设定的时间之后就会执行指定的功能函数 而这个功能函数就叫
  • 【FreeRTOS】多任务创建

    作者主页 凉开水白菜 作者简介 共同学习 互相监督 热于分享 多加讨论 一起进步 专栏资料 https pan baidu com s 1nc1rfyLiMyw6ZhxiZ1Cumg pwd free 点赞 收藏 再看 养成习惯 订阅的粉丝
  • 【FreeRTOS】队列的使用

    作者主页 凉开水白菜 作者简介 共同学习 互相监督 热于分享 多加讨论 一起进步 专栏资料 https pan baidu com s 1nc1rfyLiMyw6ZhxiZ1Cumg pwd free 点赞 收藏 再看 养成习惯 订阅的粉丝
  • FreeRTOS+CubeMX系列第一篇——初识FreeRTOS

    文章目录 一 关于FreeRTOS 二 FreeRTOS的特点 三 如何在CubeMX上配置FreeRTOS 四 FreeRTOS文档资料 五 同系列博客 一 关于FreeRTOS 1 什么是FreeRTOS FreeRTOS是一个迷你的实
  • 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的中断等级小于等于宏定义的优先等级即可
  • FreeRTOS笔记(一)简介

    这个笔记主要依据韦东山freertos快速入门系列记录 感谢韦东山老师的总结 什么是实时操作系统 操作系统是一个控制程序 负责协调分配计算资源和内存资源给不同的应用程序使用 并防止系统出现故障 操作系统通过一个调度算法和内存管理算法尽可能把
  • FreeRTOS死机原因

    1 中断回调函数中没有使用中断级API xxFromISR 函数 xSemaphoreGiveFromISR uart busy HighterTask 正确 xSemaphoreGive uart busy 错误 2 比configMAX
  • 【FreeRTOS 事件】任务通知事件

    普通任务通知事件创建创建及运行 参阅安富莱电子demo define BIT 0 1 lt lt 0 define BIT 1 1 lt lt 1 static TaskHandle t xHandleTaskUserIF NULL sta
  • freeRTOS出现任务卡死的情况。

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

    1 简介 在FreeRTOS的配置参数中的configUSE TASK NOTIFICATIONS宏打开 一般RTOS会默认打开 如图1所示 图1 notify宏开关 RTOS在创建任务时 会创建一个32位的通知值ulNotifiedVal
  • FreeRTOS笔记(二)

    FreeRTOS笔记 二 静态任务 文章目录 FreeRTOS笔记 二 静态任务 一 任务定义 二 任务创建 2 1 定义任务栈 2 2 定义任务函数 2 3 定义任务控制块 2 4 实现任务创建函数 三 实现就绪列表 3 1 定义就绪列表
  • FreeRTOS实时操作系统(三)任务挂起与恢复

    系列文章 FreeRTOS实时操作系统 一 RTOS的基本概念 FreeRTOS实时操作系统 二 任务创建与任务删除 HAL库 FreeRTOS实时操作系统 三 任务挂起与恢复 FreeRTOS实时操作系统 四 中断任务管理 FreeRTO
  • FreeRTOS之系统配置

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

    我使用的是带有 5 4 版 FreeRTOS 的 MSP430f5438 我有一个有趣的问题 我无法弄清楚 基本上 当我将 configTICK RATE HZ 设置为不同的值时 LED 闪烁得更快或更慢 它应该保持相同的速率 我将 con
  • 防止GCC LTO删除函数

    我使用 GCC ARM Embedded 和 FreeRTOS FreeRTOS具有的功能vTaskSwitchContext 仅在某些情况下使用 内联汇编代码 问题是 当我使用LTO时 GCC不考虑内联汇编代码并认为该函数没有被使用 因此
  • FreeRTOS 匈牙利表示法 [重复]

    这个问题在这里已经有答案了 我是 RTOS 和 C 编程的新手 而且我仍在习惯 C 的良好实践 因此 我打开了一个使用 FreeRTOS 的项目 我注意到操作系统文件使用匈牙利表示法 我知道一点符号 但面临一些新的 标准 FreeRTOS
  • C++ freeRTOS任务,非静态成员函数的无效使用

    哪里有问题 void MyClass task void pvParameter while 1 this gt update void MyClass startTask xTaskCreate this gt task Task 204

随机推荐

  • 发生死锁必须满足哪 4 个条件?

    要想发生死锁有 4 个缺一不可的必要条件 第 1 个叫互斥条件 xff0c 它的意思是每个资源每次只能被一个线程 xff08 或进程 xff0c 下同 xff09 使用 xff0c 为什么资源不能同时被多个线程或进程使用呢 xff1f 这是
  • 红黑树和二叉树有什么区别?

    红黑树和二叉树有什么区别 xff1f 什么是二叉树 xff1f 什么是红黑树 xff1f 二叉树 xff08 Binary Tree xff09 是指每个节点最多只有两个分支的树结构 xff0c 即不存在分支大于 2 的节点 xff0c 二
  • 什么是TCC?

    假设现在有一个电商系统 xff0c 里面有一个支付订单的场景 xff0c 那对一个订单支付之后 xff0c 我们需要做下面的步骤 更改订单的状态为 已支付 扣减商品库存 给会员增加积分 创建销售出库单通知仓库发货 业务场景有了 xff0c
  • Java 泛型机制介绍

    Java泛型这个特性是从JDK 1 5才开始加入的 xff0c 因此为了兼容之前的版本 xff0c Java泛型的实现采取了 伪泛型 的策略 xff0c 即Java在语法上支持泛型 xff0c 但是在编译阶段会进行所谓的 类型擦除 xff0
  • 云计算服务三层架构-IaaS-PaaS-SaaS解析

    IaaS 基础设施即服务 Infrastructure as a service 通即虚拟的硬件资源 xff0c 如虚拟的主机 存储 网络 安全等资源 用户无需购买服务器 网络设备和存储设备 xff0c 只需要通过网络租赁即可搭建自己的应用
  • Spring事务的传播属性和隔离级别

    事务传播行为 如果在开始当前事务之前 xff0c 一个事务上下文已经存在 xff0c 此时有若干选项可以指定一个事务性方法的执行行为 64 Transactional propagation 61 Propagation REQUIRED
  • MySQL有多少种常用的日志,有什么作用

    redo 重做日志 作用 xff1a 确保事务的持久性 xff0c 防止在发生故障 xff0c 脏读未写回磁盘 重启数据库会进入 redo log 执行 重做 xff0c 到达事务一致性 undo 回滚日志 作用 xff1a 保证数据的原子
  • 自动控制算法的学习笔记

    1 PID调试步骤 没有一种控制算法比PID调节规律更有效 更方便的了 现在一些时髦点的调节器基本源自PID 甚至可以这样说 xff1a PID调节器是其它控制调节算法的基础 为什么PID应用如此广泛 又长久不衰 xff1f 因为PID解决
  • stm32 应用实例—— USART 串口通讯

    stm32 应用实例 USART 串口通讯 1 基于寄存器 固件库编程的差异性2 完成STM32的USART窗口通讯程序4 重温C语言程序里全局变量 局部变量 堆 栈等概念 xff0c 并验证3 归纳出stm32的堆 栈 全局变量的分配地址
  • windows BDA driver (abstract)

    AVStream is a Microsoft provided multimedia class driver that supports video only streaming and integrated audio video s
  • 详细解读Python豆瓣电影Top250网页爬取(主要对re的运用&excel保存数据)//包括对库的简介

    python里面有很多操作都类似于c语言 xff0c 这里在爬取时主要需要注意用到的是for循环语句和各种库 个人认为python中主要还是对库的运用比较占大比例 xff08 这里的软件版本是PyCharm 2020 3 2 x64 xff
  • Unity3D 委托和事件的优点(一)

    上周接触到了委托 这周终于在自己的项目中用到了 现在准备用委托和事件的方案 替换掉之前的一些使用不足的解决方案 在此感谢前辈们的优秀文章 我是根据在网上阅读的文章 通过自己的见解 并在自己的项目中进行实践 得出了一些结论与大家分享 我认为这
  • 我的保研经历——中国科学院计算技术研究所

    忙碌了大半年的保研事情已经尘埃落定了 xff0c 心理也踏实下来了 xff0c 总想着把自己的这段保研经历记录下来 xff0c 希望能对小伙伴们有所帮助 能来到ZZ并且读软件工程这个专业并且阴差阳错的进了卓越班也算是老天注定吧 xff08
  • 无限循环:while True+if...break(打破循环) 用法

    span class token keyword while span True span class token punctuation span p span class token operator 61 span span clas
  • freertos的核心---线程与调度

    一 划重点 划重点 划重点 线程就是freertos运行管理的最小单位 一个线程有自己的生命周期 可以是一段时间也可以是forever 具体看开发人员对于线程的规划 几个线程 每个线程处理什么事情 先来看看线程长啥样 xff1f xff08
  • freertos通信---信号量与队列

    嘿嘿 又见面了 到这里 任务的调度和切换 你已经有了深刻的理解 接下来 自然而然就是任务间的通讯咯 把相关的任务串联起来 就形成了程序的基本架构 一 队列 为什么要先讲解队列了 因为信号量就是利用队列来实现的 走 一起瞅瞅 1 1队列的创建
  • freertos通讯---信号量与队列

    哈喽 又见面了 一 信号量 1 1创建二进制信号量 define xSemaphoreCreateBinary xQueueGenericCreate UBaseType t 1 semSEMAPHORE QUEUE ITEM LENGTH
  • 关于python调用C++

    关于python调用C C 43 43 查了很多相关资料 xff0c 可以通过ctypes模块 SWIG等一些方法 简单的类似单个头文件单个cpp文件都可以实现 xff0c 但是大恒给的C 43 43 包含驱动程序 xff0c 需要在属性里
  • freertos通讯-通知

    通知是什么 xff1f 其实我们之前就见过 它就在任务结构体中 再来回顾下 if configUSE TASK NOTIFICATIONS 61 61 1 volatile uint32 t ulNotifiedValue volatile
  • freertos软件定时器

    哈喽 这篇文章是freertos解析的最后一篇文章 我们将会讲解一个利用任务延时实现的软件定时器 1 创建 timer结构体和创建一目了然 看看初始化函数 是不是有点熟悉 timer的管理有点类似任务的管理 如果是第一次创建则初始化time