制作一个RISC-V的操作系统十五-软件定时器

文章目录

  • 定时器分类
  • 定时器相关分类
  • 软件定时器设计
    • 初始化
    • 创建
    • 删除
    • 触发流程
    • 图形示意
  • 优化
  • 代码

定时器分类

硬件定时器:由硬件频率和触发限制的大小决定,只有一个,精度高
软件定时器:基于硬件定时器实现,精度大于等于硬件定时器,但通过软件(代码)实现,所以实现的个数没有上限
在这里插入图片描述

定时器相关分类

单次:就是定时器设置一个时间,当到达该时间后就会退出,该定时器将被销毁,不再起作用
周期:就是定时器只要设置一次,后面将定期触发定时器

超时函数:定时器超时后执行的函数
中断上下文:就是中断处理中执行超时函数,每次时间变化都会触发中断,自然而然都有机会执行超时函数,那么实时性很高
任务上下文:就是超时函数作为一个进程来执行,超时后也需要调度才能执行,实时性差

在这里插入图片描述

软件定时器设计

初始化

time结构体中有函数指针和调用该函数的参数和定时的时间
初始化中会将每个time结构体赋值为空
在这里插入图片描述

创建

找到一个还没有被设置的time结构体然后赋值
在这里插入图片描述

删除

找到对应的time结构体然后赋值为空
在这里插入图片描述

触发流程

时间中断,然后时间中断处理函数中触发关于检查是否要触发软中断函数的函数,如果符合某个软件定时器的定时数字就会调用该软件定时器的处理函数
在这里插入图片描述

图形示意

每次硬件定时器中断触发tick变化,然后timecheck会将timelist中不同timer的定时的数字对比,然后决定是否触发其处理函数
在这里插入图片描述

优化

  • 由于每次timecheck都需要循环挨个比对,如果让时间快到的放在前面,那么能比对的次数会少些,所以按照超时时间排序
  • 链表实现的是对空间的优化,如果用数组来存储软件定时器,那么可能导致某些没被用的空间浪费掉,采用链表需要就申请空间,能够节约空间
    在这里插入图片描述

进一步优化比对的次数,跳表算法,类似二分,从上层往下层比对。
如果为20,首先到达11发现小于26,此时到下层,发现大于17,到达17,发现小于26,调到下一层,再次比对20,比对成功
在这里插入图片描述

代码

在创建软件定时器函数时,会在开始和最后又上锁和解锁,试想下,目标是实现创建软件定时器实现在当前时刻几秒后软件定时器能按时触发。如果中间有定时中断发送,那么定时器设置到一半,就会去处理中断,此时也会去检查软件定时器,假设此时软件定时器想的是当前时刻的一个时刻后,那么此时由于中断中会将该时刻加一个,但检查时候由于软件定时器没有设置完成,那么会导致错过这个时刻,要等到下次定时器中断才会检查软件定时器并成功调用其中处理函数

https://github.com/FULLK/risllkos/tree/main/Fullkenerl10

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

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

相关文章

YOLOV8模型更改

速递 | YOLOv8模型改进的N种方法-CSDN博客 【10】yolov8目标检测模型改进之添加注意力机制_yolov8中添加无参数注意力-CSDN博客 YOLO系列助力涨点!新SOTA让缺陷检测更准更快!(附开源数据集下载) - 哔哩哔哩 (bilibili.com)

Docker在linux安装步骤超详细

官网 Install Docker Engine on CentOS | Docker Docs yum -y install gcc yum -y install gcc-c 安装工具 sudo yum install -y yum-utils 设置国内的镜像 yum-config-manager \ --add-repo \ https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo yu…

Scala 多版本下载指南

Scala,这一功能丰富的编程语言,结合了面向对象和函数式编程的精华,为开发者提供了强大的工具来构建高效、可扩展的应用程序。随着Scala社区的不断壮大和技术的演进,多个版本的Scala被广泛应用于不同的项目与场景中。本文旨在为您提…

acwing算法提高之数据结构--线段树

目录 1 介绍2 训练3 参考 1 介绍 线段树是算法竞赛中常用的用来维护区间信息的数据结构。 线段树可以在O(logN)时间复杂度内完成以下操作: 单点修改。区间修改(需要加入懒标记)。区间查询(区间求和、求区间最大值、求区间最小值…

更新-上市公司董事会多样性指标计算参考SMJ2021(代码+数据)1990-2022年

01、数据介绍 董事会多样性(Board Diversity)是指公司董事会成员在性别、年龄、种族、教育背景、专业技能、国籍等方面的多元化程度。多样性的董事会能够为公司带来更广泛的观点、经验和技能,有助于提高公司的战略决策质量和创新能力。同时&…

ping命令操作记录

1,ping 主机可查看主机是否在线 2,ping -a参数,解析主机的名称 3,ping -r 跟踪打印路由信息 ping命令的作用:确认目标主机是否存活,确定网络是否畅通 ping的原理:ping发送ICMP(互联…

深入探索Elasticsearch中的QueryBuilders

Elasticsearch的查询构建器(org.elasticsearch.index.query.QueryBuilders)是构建复杂查询的强大工具集。本文将逐一介绍其主要成员属性和方法,帮助你更高效地进行数据检索与分析。 基础查询 matchAllQuery 功能:匹配所有文档的查询。示例&#xff1a…

深入解析yolov5,为什么算法都是基于yolov5做改进的?(一)

YOLOv5简介 YOLOv5是一种单阶段目标检测算法,它在YOLOv4的基础上引入了多项改进,显著提升了检测的速度和精度。YOLOv5的设计哲学是简洁高效,它有四个版本:YOLOv5s、YOLOv5m、YOLOv5l、YOLOv5x,分别对应不同的模型大小…

中科院突破:TalkingGaussian技术实现3D人脸动态无失真,高效同步嘴唇运动!

DeepVisionary 每日深度学习前沿科技推送&顶会论文分享,与你一起了解前沿深度学习信息! 引言:探索高质量3D对话头像的新方法 在数字媒体和虚拟互动领域,高质量的3D对话头像技术正变得日益重要。这种技术能够在虚拟现实、电影…

网页使用之如何返回json/xml

后端返回json数据给前端进行渲染的方式比较熟悉,至于返回html页面,返回xml的方式接触逐渐减少,来在项目中熟悉这一点。 返回文本数据 json姿势的返回实属最简单的方式,在SpringBoot应用中,有两种简单的方式 1.直接在…

redis多用户管理

最近在学redis,由于笔者是学运维的,所以推荐学习运维的小伙伴参考,希望对大家有帮助! redis运维上篇:http://t.csdnimg.cn/MfPud redis运维下篇:http://t.csdnimg.cn/83sQ1 从redis6开始,默认用户名为default&#x…

Android Studio 调试:快速入门指南

作为一名Android应用开发人员,调试是你不可或缺的技能之一。通过调试,你可以定位和解决各种问题,包括崩溃、性能问题、UI错误等。在本文中,我们将分享一些实用的Android调试技巧,帮助你提高应用开发效率。 Android St…

2024五一杯数学建模B题思路分析 - 未来新城背景下的交通需求规划与可达率问题

文章目录 1 赛题选题分析 2 解题思路详细的思路过程放在文档中 ! ! !!!!!3 最新思路更新 1 赛题 B题 未来新城背景下的交通需求规划与可达率问题 随着城市化的持续发展,交通规划在新兴城市建设中显得尤为关…

网络安全是智能汽车下一个要卷的方向?

2024年一季度,中国汽车市场延续了2023年的风格,核心就是「卷」。 2023年,我国汽车市场爆发「最强价格战」,燃油车的市场空间不断被挤压,如今只剩下最后一口气。近日乘联会发布4月1-14日最新数据,新能源&am…

Dockers数据卷Volume

数据卷 Docker数据卷是什么 在 Docker 中,容器的文件系统是临时的,当容器被删除时,其文件系统也会随之销毁。但有时我们希望容器内的数据能够持久化,即使容器被删除后,数据也不会丢失,这时就可以使用数据…

安装mmcv

如果conda或者pip不行 conda install mmcv-full1.3.17 直接用mim pip install -U openmim mim install mmcv 同理一些其他的库也可以来安装。 Installation — mmcv 2.2.0 documentation https://mmdetection.readthedocs.io/zh-cn/v2.24.0/get_started.htm

前端项目学习记录4:1,2,3总结

1.需要安装的依赖 pnpm i element-plus/icons-vue element-plus axios sass vue-router pnpm i -D types/node fast-glob mock.js vite-plugin-mock2.9.6 vite-plugin-svg-icons 2.删除不必要的文件 3.整体文件夹 .vscode --> 不用管 mock --> …

ES集群分布式查询原理

集群分布式查询 elasticsearch的查询分成两个阶段: scatter phase:分散阶段,coordinating node会把请求分发到每一个分片gather phase:聚集阶段,coordinating node汇总data node的搜索结果,并处理为最终结…

解决iview(view ui)中tabs组件中使用图片预览组件ImagePreview,图片不显示问题

同学们可以私信我加入学习群! 正文开始 前言一、问题描述二、原因分析三、解决方案总结 前言 最近在写个人项目的web端和浏览器插件,其中一个功能是base64和图片的转换。因为分成四个小功能,所以使用的iview的tabs来展示不同功能&#xff0c…

无缝对接配电自动化:IEC104转OPC UA网关解决方案

随着水电厂自动化发展的要求,具有一定规模的梯级水电站越来越多,为了实现水电站的无人值班(少人值守),并考虑到节能控制,电厂采用了集中监控。集中监控关注的是整个电网的安全稳定运行及电压、频率和整个电网的电力需求&#xff0…