1815_ChibiOS中的虚拟定时器

2023-10-20 03:36
文章标签 定时器 虚拟 chibios 1815

本文主要是介绍1815_ChibiOS中的虚拟定时器,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

         全部学习汇总: GreyZhang/g_ChibiOS: I found a new RTOS called ChibiOS and it seems interesting! (github.com)

1. 这个功能其实类似于FreeRTOS的设计,在FreeRTOS中也有这样的设计。

2. 一次性的定时器,这个不仅在FreeRTOS中见过,在我用过的一些商用的操作系统中也有。

3. 虚拟定时器的操作方法有启动、提前停止或者到达定时时间之后触发一个回调。

4. 由于回调动作都是从ISR中触发的,因此涉及到的API调用需要满足I类的接口要求。

5. 如果采用tick的模式来实现有几点不好的地方:负荷高、精度差、会给系统增加抖动且功耗会增加。

1. 如果采用无tick的模式,那么可以提供一些好的特点:低功耗、抖动影响小、精度更高。

2. 但是,tickless的模式也有一些需要考虑的弊端,比如说:实现起来更复杂;需要硬件间似乎器的支持,虽然16bit的计数器就基本满足了,但是建议使用32bit的计数器;行为与其他的实现模式略有不同;可能会增加内核的大小等。

3. 关于这部分的API中有两个需要单独注意一下,一个是这个需要初始化。其实,对等其他的OS可能叫做创建,但是习惯了之前的思维模式可能这里的初始化会意识不到。另一点就是这里提供了一个定时器已经设置好了的情况下的快速reset方法。

         这里的这种设计,实现不断的LED驱动点亮的效果有点添油燃灯的感觉。通过不断地触发来进行续命。

         如何实现一个重复的翻转触发?这里的例子提供的方式是不断重新设置软定时器,这样回调之中调用回调就可以一直触发。这种设计是十分有趣的。

         这个例子的前面有一段说明,解释这样的设计可以通过一个命令就实现这个LED的闪烁功能的开启。最初没有理解是什么概念,后来仔细理解了一下。应该是这里提供的代码并不是顺序执行的,只是提供了两段代码来说明如何进行这个功能的启动以及关闭。

         如果想要让这个LED闪烁,只需要设置激活这样的一个虚拟定时器即可。在回调中,它会实现自己的重复触发。但是无论什么时候,停止这个虚拟计数器并且关闭LED都可以启动一个停止处理的效果。

这篇关于1815_ChibiOS中的虚拟定时器的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/244376

相关文章

C++链表的虚拟头节点实现细节及注意事项

《C++链表的虚拟头节点实现细节及注意事项》虚拟头节点是链表操作中极为实用的设计技巧,它通过在链表真实头部前添加一个特殊节点,有效简化边界条件处理,:本文主要介绍C++链表的虚拟头节点实现细节及注... 目录C++链表虚拟头节点(Dummy Head)一、虚拟头节点的本质与核心作用1. 定义2. 核心价值二

mysql查询使用_rowid虚拟列的示例

《mysql查询使用_rowid虚拟列的示例》MySQL中,_rowid是InnoDB虚拟列,用于无主键表的行ID查询,若存在主键或唯一列,则指向其,否则使用隐藏ID(不稳定),推荐使用ROW_NUM... 目录1. 基本查询(适用于没有主键的表)2. 检查表是否支持 _rowid3. 注意事项4. 最佳实

SpringBoot3中使用虚拟线程的完整步骤

《SpringBoot3中使用虚拟线程的完整步骤》在SpringBoot3中使用Java21+的虚拟线程(VirtualThreads)可以显著提升I/O密集型应用的并发能力,这篇文章为大家介绍了详细... 目录1. 环境准备2. 配置虚拟线程方式一:全局启用虚拟线程(Tomcat/Jetty)方式二:异步

Linux网络配置之网桥和虚拟网络的配置指南

《Linux网络配置之网桥和虚拟网络的配置指南》这篇文章主要为大家详细介绍了Linux中配置网桥和虚拟网络的相关方法,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 一、网桥的配置在linux系统中配置一个新的网桥主要涉及以下几个步骤:1.为yum仓库做准备,安装组件epel-re

使用Python实现一个优雅的异步定时器

《使用Python实现一个优雅的异步定时器》在Python中实现定时器功能是一个常见需求,尤其是在需要周期性执行任务的场景下,本文给大家介绍了基于asyncio和threading模块,可扩展的异步定... 目录需求背景代码1. 单例事件循环的实现2. 事件循环的运行与关闭3. 定时器核心逻辑4. 启动与停

使用Python实现全能手机虚拟键盘的示例代码

《使用Python实现全能手机虚拟键盘的示例代码》在数字化办公时代,你是否遇到过这样的场景:会议室投影电脑突然键盘失灵、躺在沙发上想远程控制书房电脑、或者需要给长辈远程协助操作?今天我要分享的Pyth... 目录一、项目概述:不止于键盘的远程控制方案1.1 创新价值1.2 技术栈全景二、需求实现步骤一、需求

Spring Boot3虚拟线程的使用步骤详解

《SpringBoot3虚拟线程的使用步骤详解》虚拟线程是Java19中引入的一个新特性,旨在通过简化线程管理来提升应用程序的并发性能,:本文主要介绍SpringBoot3虚拟线程的使用步骤,... 目录问题根源分析解决方案验证验证实验实验1:未启用keep-alive实验2:启用keep-alive扩展建

Springboot如何配置Scheduler定时器

《Springboot如何配置Scheduler定时器》:本文主要介绍Springboot如何配置Scheduler定时器问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,... 目录Springboot配置Scheduler定时器1.在启动类上添加 @EnableSchedulin

Mysql虚拟列的使用场景

《Mysql虚拟列的使用场景》MySQL虚拟列是一种在查询时动态生成的特殊列,它不占用存储空间,可以提高查询效率和数据处理便利性,本文给大家介绍Mysql虚拟列的相关知识,感兴趣的朋友一起看看吧... 目录1. 介绍mysql虚拟列1.1 定义和作用1.2 虚拟列与普通列的区别2. MySQL虚拟列的类型2

VMWare报错“指定的文件不是虚拟磁盘“或“The file specified is not a virtual disk”问题

《VMWare报错“指定的文件不是虚拟磁盘“或“Thefilespecifiedisnotavirtualdisk”问题》文章描述了如何修复VMware虚拟机中出现的“指定的文件不是虚拟... 目录VMWare报错“指定的文件不是虚拟磁盘“或“The file specified is not a virt