制作一个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,一经查实,立即删除!

相关文章

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被广泛应用于不同的项目与场景中。本文旨在为您提…

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

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

ping命令操作记录

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

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

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

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

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

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

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

Android Studio 调试:快速入门指南

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

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

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

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

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

安装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

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…

【嵌入式笔试题】网络编程笔试题

非常经典的笔试题。 2.网络编程(29道) 2.1列举一下OSI协议的各种分层。说说你最熟悉的一层协议的功能。 ( 1 )七层划分为:应用层、表示层、会话层、传输层、网络层、数据链路层、物理 层。 ( 2 )五层划分为:应用层、传输层、网络层、数据链路层、物理层。 ( 3 )…

Mybatis自定义TypeHandler

Mybatis是一个优秀的持久层框架,它提供了丰富的功能来简化数据库操作。在Mybatis中,TypeHandler是用于处理Java对象与数据库字段之间的类型转换的组件。自定义TypeHandler可以帮助我们处理一些特殊的数据类型或者自定义的数据类型。 自定义TypeHandler需…

正则化回归

1. L1正则化 L1正则化是回归参数各个元素绝对值之和。 2. L2正则化 L2正则化是回归参数各个元素平方之和。 3.LOSS回归 线性回归加上L1正则化 4.岭回归 线性回归加上L2正则化 不断增大 L2 约束项参数 α,可以发现岭回归参数优化解不断靠近原点&#xff0c…

开源、轻量、易用的服务器实时监控工具:哪吒探针

本文首发于只抄博客,欢迎点击原文链接了解更多内容。 前言 哪吒探针是一个开源、轻量、易用的服务器监控、运维工具,它有以下几个特点: 一键安装:可以一键安装面板与 Agent,并且支持 Linux、Windows、MacOS、OpenWRT…

Java根据模板动态生成Pdf(添加页码、文件加密、Spire免费版本10页之后无法显示问题、嵌入图片添加公章、转Base64)

Java根据模板动态生成Pdf:添加页码、文件加密、Spire免费版本10页之后无法显示问题、嵌入图片添加公章、转Base64 引言【Java根据模板动态生成Pdf资源地址】示例一:动态生成带页码的PDF报告示例二:加密PDF以保护敏感信息示例三:应…

吴恩达2022机器学习专项课程(一)7.2 逻辑回归的简化成本函数课后实验 Lab5

问题预览/关键词 二分类问题的训练集(多特征)绘制训练集数据的散点图自定义plot_data() Python实现逻辑回归的成本函数自定义sigmoid() 调用成本函数不同的w,b,绘制逻辑回归模型的决策边界验证哪条决策边界效果好总结 二分类问题的…