3-1RT-Thread时钟管理

news2025/1/18 20:05:34

这里写自定义目录标题

在这里插入图片描述

在这里插入图片描述
时钟节拍是RT thread操作系统的最小时间单位。

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
第一个功能,rt tick值自动加1,在RT thread当中通过RT_USING_SMP定义了多核和单核的场景。第二个功能,检查当前线程的时间片,首先获取当前线程,将当前线程的剩余thread值自动减1。如果线程的剩余thread值等于0,说明当前线程时间片已经超时。此时修改线程的状态为RT_THREAD_STAT_YIELD。
此状态下会使线程让出处理器的使用,然后将thread in need tick重新复制给remaining tick,同时将当前线程设置为已有的状态,然后执行后续的线程调度。最后一个功能是检查定时器的链表。

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
这三个定时器分别加上系统当前的时间20,从小到大排序链接到RT_time_list链表中,形成如图所示的定时器链表结构。每次时钟节拍中断时,RT_tick会自动+1并和链表中的定时器超时时间进行比较。如果rt_timer ≥ time_eout,则说明该定时器超时处理对应的回调函数。

如果创建了新的定时器,如在上图链表的基础上新创建了一个定时器timer#4,它的超时时间是330,则timer#4会根据超时时间放置在tim#2和tim#3之间。而周期性的定时器会在它再次启动时被加入定时器列表。
在这里插入图片描述
定时器在启动时会按超时时间排序插入到链表中,如果从头开始遍历链表效率会很低。当使用定时器数量比较大时,每次新创建了一个定时器并启动时会有很大的开销。

内核使用跳表算法来加速遍历速度,在rtdef.h头文件当中,通过artie mer skip list level来配置跳表的层数默认为一定时器原始有序单链表如下,如果想要查找39原始链表,需要遍历3、7、13、18、39,经过五次跳转后可以查找到结果。

那么从列表中将某些元素抽取出来加一级索引,一级索引指向了原始链表。同样查找39跳表中只需先遍历3、18、39就可以找到最终。

在这里插入图片描述

在这里插入图片描述
即定时器的类型可以是(0x0)一次性的,也可以是(0x2)周期性的。同时可以或上硬件定时器模式或软件定时器模式。

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
RT thread当中常用的两个延时函数,其精度都为毫秒级。
在这里插入图片描述

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

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

相关文章

AI 写高考作文丨10 款大模型 “交卷”,实力水平如何?

前言 在科技日新月异的今天,人工智能(AI)已不再是遥不可及的未来科技,而是逐渐融入我们日常生活的实用工具。从智能语音助手到自动驾驶汽车,从智能家居系统到精准医疗诊断,AI技术正以其强大的计算能力和数…

端午搞个零花钱,轻松赚取创业的第一桶金!2024最受欢迎的创业项目,2024新的创业机会

好好的端午节, 净给我添堵! 本来我打算在端午节愉快的玩耍, 结果一大早起床却看到舍友在给一堆设备充电, 然后装的整整齐齐, 满满一书包。 我好奇他小子这是要干嘛? 不会是打算今天回去给亲朋好友准备…

Centos7 安装配置SFTP

Centos7安装配置SFTP 更新源安装 OpenSSH 服务启动服务设置为开机自启动新建一个用户 (sftpuser为你要设置的用户的用户名)编辑配置文件设置sftp用户的根目录重启SSH服务代码实现 由于最近工作中需要实现动态上传文件到帆软服务器,但是帆软没有提供相关API&#xff…

Allegro限制走线区域和元器件摆放区域

一、Line to Shape 当你的板框是线条形式时,先将线条闭合成shape,点击Shape–>Compose Shape,选择如下参数,再逐一选中分散线条,选择完毕右键Done即可 二、Z-Cope使用 点击Edit–>Z-Cope,选择如下参数&…

Django项目上线-报错汇总

Django项目上线-报错汇总 下列报错基本都是Python环境相关 pip install 报错 WARNING: pip is configured with locations that require TLS/SSL, however the ssl module in Python is not available. debian运行pip报错ssl module in Python is not available - z417 - 博…

SM481,SM432和利时DCS备件

SM481,SM432和利时DCS备件。POU名只能包含字母、数字、下划线,第一个字符必须是字母或者下划线,且遵循以下原则:SM481,SM432和利时DCS备件。关于重名,不能与变量名、变量组名、POU文件夹名、任务名、SM481,SM432和利时DCS备件。工…

OpenCompass 大模型评测平台C-Eval 基准任务评估实战

1. 引言 在人工智能迅速发展的今天,大型语言模型(LLMs)在多个领域展现出了巨大的潜力和应用价值。然而,如何评价这些模型的性能,了解它们的优缺点,成为了一个重要课题。OpenCompass,一个由上海…

【Java】解决Java报错:ArrayIndexOutOfBoundsException

文章目录 引言1. 错误详解2. 常见的出错场景2.1 直接访问数组越界2.2 循环中的索引错误2.3 多维数组的错误访问 3. 解决方案3.1 检查数组长度3.2 正确使用循环3.3 多维数组的正确访问 4. 预防措施4.1 使用增强型 for 循环4.2 编写防御性代码4.3 单元测试 结语 引言 在Java编程…

C++学习插曲:“name“的初始化操作由“case“标签跳过

问题 "name"的初始化操作由"case"标签跳过 问题代码 case 3: // 3、删除联系人string name;cout << "请输入删除联系人姓名&#xff1a;" << endl;cin >> name;if (isExistPerson(&abs, name) -1){cout << "…

Linux--进程间通信(system V共享内存)

目录 1.原理部分 2.系统调用接口 参数说明 返回值 1. 函数原型 2. 参数说明 3. 返回值 4. 原理 5. 注意事项 3.使用一下shmget&#xff08;一段代码&#xff09; 4.一个案例&#xff08;一段代码) 1.简单封装一下 2.使用共享内存 2.1挂接&#xff08;shmat&#x…

netty+springboot+vue聊天室(需要了解netty)

先看看这个使用websocket实现的聊天室&#xff0c;因为前端是使用websocket&#xff0c;和下面的demo的前端差不多就不解释实现原理&#xff0c;所以建议还是看看(要是会websocket的大佬请忽略) springbootwebsocketvue聊天室 目录 一、实现内容二、代码实现1.后端2.前端源码…

java基础语法整理 ----- 上

java基础语法 一、变量二、数据类型三、标识符四、键盘录入五、判断语句1. 三种格式2. 练习题 六、switch语句七、循环八、循环控制语句九、方法 一、变量 1.什么是变量&#xff1a; 在程序运行过程中&#xff0c;其值可以发生改变的量从本质上讲&#xff0c;变量是内存中的一…

Java--命令行传参

1.有时你希望运行一个程序时再传递给它消息&#xff0c;这要靠传递命令行参数给main&#xff08;&#xff09;函数实现 2.选中文件右键找到如图选项并打开 3.在文件地址下输入cmd空格符号&#xff0c;再按回车调出命令窗口 4.如图一步步进行编译&#xff0c;在向其传入参数&…

Web自动化测试-掌握selenium工具用法,使用WebDriver测试Chrome/FireFox网页(Java

目录 一、在Eclipse中构建Maven项目 1.全局配置Maven 2.配置JDK路径 3.创建Maven项目 4.引入selenium-java依赖 二、Chrome自动化脚本编写 1.创建一个ChromeTest类 2.测试ChromeDriver 3.下载chromedriver驱动 4.在脚本中通过System.setProperty方法指定chromedriver的…

PowerDesigner遍历导出所有表结构到Excel

PowerDesigner遍历导出所有表到Excel 1.打开需要导出表结构到Excel的pdm文件 2.点击Tools|Execute Commands|Edit/Run Script菜单或按下快捷键Ctrl Shift X打开脚本窗口&#xff0c;输入示例VBScript脚本&#xff0c;修改其中的Excel模板路径及工作薄页签&#xff0c;点Run…

【嵌入式】智能系统优化:【C++】驱动的【机器学习】与【数据挖掘】技术

目录 一、嵌入式系统简介 二、C在嵌入式系统中的优势 三、机器学习在嵌入式系统中的挑战 四、C实现机器学习模型的基本步骤 五、实例分析&#xff1a;使用C在嵌入式系统中实现手写数字识别 1. 数据准备 2. 模型训练与压缩 3. 模型部署 六、优化与分析 1. 模型优化 模…

Windows UAC权限详解以及因为权限不对等引发的若干问题排查

目录 1、什么是UAC&#xff1f; 2、微软为什么要设计UAC&#xff1f; 3、标准用户权限与管理员权限 4、程序到底以哪种权限运行&#xff1f;与哪些因素有关&#xff1f; 4.1、给程序设置以管理员权限运行的属性 4.2、当前登录用户的类型 5、案例1 - 无法在企业微信聊天框…

力扣爆刷第148天之贪心算法五连刷(区间合并)

力扣爆刷第148天之贪心算法五连刷&#xff08;区间合并&#xff09; 文章目录 力扣爆刷第148天之贪心算法五连刷&#xff08;区间合并&#xff09;一、406. 根据身高重建队列二、452. 用最少数量的箭引爆气球三、435. 无重叠区间四、763. 划分字母区间五、56. 合并区间六、738.…

【Threejs进阶教程-优化篇】3. 卡顿与内存管理(二)

贴图纹理材质光影对内存性能的影响 学习ThreeJS的捷径烘培模型简介如何优化烘培模型贴图处理贴图质量切换 为什么光源要限制数量阴影质量的影响阴影本身也可以理解为是一种贴图 学习ThreeJS的捷径 本段内容会写在0篇以外所有的&#xff0c;本人所编写的Threejs教程中 对&…

贪心算法学习二

例题一 解法&#xff08;贪⼼&#xff09;&#xff1a; 贪⼼策略&#xff1a; 由于只能交易⼀次&#xff0c;所以对于某⼀个位置 i &#xff0c;要想获得最⼤利润&#xff0c;仅需知道前⾯所有元素的最⼩ 值。然后在最⼩值的位置「买⼊」股票&#xff0c;在当前位置「卖出」…