版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
RT-Thread系统节拍、软件定时器与中断机制第3章时间管理与中断1、系统时钟与时间片2、软件定时器常用函数3、SOFT/HARD运行机制4、中断与临界段目录CONTENTS定时器函数运行机制中断应用系统时钟操作系统时钟03系统时钟时钟由一个或一组定时器产生稳定节拍,操作系统据此管理所有与时间相关的任务。01节拍来源定时器按固定周期进入中断02典型任务按键检测、屏幕刷新和周期控制03RT-Thread使用SysTick作为系统计时与调度时钟定时器函数运行机制中断应用系统时钟系统节拍频率04系统时钟//OStickpersecond//Default:1000(1ms)#defineRT_TICK_PER_SECOND1000RT_TICK_PER_SECOND定义每秒系统节拍数。默认值1000表示每1ms产生一次SysTick中断。频率越高,时间分辨率越细,同时中断开销也会增加。定时器函数运行机制中断应用系统时钟rt_tick_increase()的两项工作05系统时钟时间片检查递增系统时间rt_tick,扣减当前线程的remaining_tick。时间片耗尽时触发同优先级轮换。HARD定时器检查调用rt_timer_check(),检查rt_timer_list中最近到期的定时器。每个SysTick周期都会执行一次定时器函数运行机制中断应用系统时钟同优先级线程的时间片轮换06系统时钟更高优先级线程就绪时,当前线程让出CPU;多个线程优先级相同时,时间片决定轮换节奏。init_tick线程初始化时设定的时间片长度remaining_tick当前轮次剩余的tick数,每次系统节拍减1时间片只在同优先级线程之间承担轮换作用定时器函数运行机制中断应用系统时钟时间片运行示例07系统时钟图3.1时间片原理线程B运行5tick后切换到线程A;线程A运行10tick后再切回线程B。定时器函数运行机制中断应用系统时钟时间片检查过程08系统时钟++rt_tick;thread=rt_thread_self();--thread->remaining_tick;if(thread->remaining_tick==0){thread->remaining_tick=thread->init_tick;rt_thread_yield();}rt_timer_check();01先递增rt_tick,形成新的系统时刻02取得当前线程并扣减remaining_tick03耗尽时恢复init_tick04yield把线程移到同级队尾05最后检查HARD定时器定时器函数运行机制中断应用系统时钟rt_thread_yield()的轮换逻辑09系统时钟函数只在当前线程处于READY且同一优先级链表中存在其他线程时执行轮换。01关闭中断并取得当前线程02把当前线程节点移出优先级链表03将节点重新插入同级链表队尾04恢复中断后调用rt_schedule()若没有更高优先级线程就绪,CPU将交给同优先级的下一个线程。定时器函数运行机制中断应用系统时钟两种主动延时函数10系统时钟rt_thread_delay(tick)把线程挂起指定tick数。计时结束后,线程重新进入就绪态。rt_thread_delay_until(tick)把线程挂起到指定系统时刻。适合需要稳定周期的任务。主动延时让高优先级线程释放CPU,避免低优先级线程长期得不到运行。定时器函数运行机制中断应用系统时钟延时是多线程节奏设计的一部分11系统时钟被动等待消息队列、信号量等资源尚未到达恢复时间取决于其他线程或外设等待时长并不确定主动延时在线程尾部设置固定延时控制线程的执行周期和CPU占用使多个线程按预期交替运行定时器函数运行机制中断应用系统时钟定时器控制块rt_timer12定时器函数structrt_timer{structrt_objectparent;rt_list_trow[RT_TIMER_SKIP_LIST_LEVEL];void(*timeout_func)(void*parameter);void*parameter;rt_tick_tinit_tick;rt_tick_ttimeout_tick;};控制块记录系统对象信息定时器链表节点超时函数及其参数超时时长init_tick超时时刻timeout_tick定时器函数运行机制中断应用系统时钟HARD与SOFT两种定时器13定时器函数HARD定时器超时检查位于SysTick中断中的rt_timer_check(),超时函数也在中断上下文执行。SOFT定时器系统创建timer线程,在线程上下文检查rt_soft_timer_list并执行超时函数。两类定时器的创建、启动、停止与删除接口相同定时器函数运行机制中断应用系统时钟rt_timer_init()14定时器函数voidrt_timer_init(rt_timer_ttimer,constchar*name,void(*timeout)(void*parameter),void*parameter,rt_tick_ttime,rt_uint8_tflag);静态定时器用户预先定义控制块rt_object_init()初始化对象_rt_timer_init()写入计时属性初始化完成后仍需调用rt_timer_start()定时器函数运行机制中断应用系统时钟rt_timer_init()参数15定时器函数timer定时器控制块地址name定时器名称timeout超时函数parameter超时函数参数time超时时间flag计时模式和定时器类型定时器函数运行机制中断应用系统时钟flag参数同时定义两类属性16定时器函数计时模式RT_TIMER_FLAG_ONE_SHOT单次计时,到期后转为非激活态RT_TIMER_FLAG_PERIODIC周期计时,到期后重新启动运行类型RT_TIMER_FLAG_HARD_TIMER在SysTick中断上下文执行RT_TIMER_FLAG_SOFT_TIMER在timer线程上下文执行两个维度通过按位或运算组合定时器函数运行机制中断应用系统时钟rt_timer_create()17定时器函数rt_timer_trt_timer_create(constchar*name,void(*timeout)(void*parameter),void*parameter,rt_tick_ttime,rt_uint8_tflag);动态定时器从内存堆申请控制块内部调用_rt_timer_init()成功返回控制块地址失败返回RT_NULLcreate省略了timer参数,控制块由系统分配定时器函数运行机制中断应用系统时钟rt_timer_create()参数18定时器函数01name定时器名称02timeout超时函数03parameter超时函数参数04time超时时间05flag计时模式和定时器类型定时器函数运行机制中断应用系统时钟rt_timer_start()的启动过程19定时器函数01检查控制块并暂时关闭中断02先从原链表移除并清除激活标志03计算timeout_tick=rt_tick+init_tick04选择rt_timer_list或rt_soft_timer_list05按超时时刻升序插入并置为激活态关闭中断期间只调整链表。SOFT定时器必要时还会恢复timer线程。定时器函数运行机制中断应用系统时钟定时器链表按超时时刻排序20定时器函数链表头保存最近到期的定时器首节点只需检查首个定时器是否到期相同超时按FIFO顺序处理,先启动的先执行默认配置RT_TIMER_SKIP_LIST_LEVEL为1,维护一条链表定时器函数运行机制中断应用系统时钟再次启动会重置定时器21定时器函数rt_timer_start()每次都会先移除旧节点,再重新计算超时时刻并插入链表。01定时器正在计时02再次调用rt_timer_start()03旧倒计时作废04从当前rt_tick重新计时这一特性可用于看门狗式超时与操作去抖定时器函数运行机制中断应用系统时钟停止、控制与重新启动22定时器函数01rt_timer_stop():移出运行链表并清除激活标志02rt_timer_control():读取或修改时间、模式和状态03rt_timer_start():按新参数重新计算并进入运行链表常用控制命令GET_TIMESET_TIMESET_ONESHOTSET_PERIODICGET_STATE定时器函数运行机制中断应用系统时钟静态与动态定时器的删除23定时器函数rt_timer_detach(timer)用于静态定时器移出运行链表清除对象属性不释放用户预定义内存rt_timer_delete(timer)用于动态定时器移出运行链表清除激活状态释放动态控制块内存定时器函数运行机制中断应用系统时钟启用SOFT定时器的两个条件24运行机制编译配置#defineRT_USING_TIMER_SOFT1#ifRT_USING_TIMER_SOFT==0#undefRT_USING_TIMER_SOFT#endif初始化配置flag=RT_TIMER_FLAG_PERIODIC|RT_TIMER_FLAG_SOFT_TIMER;宏开关决定内核是否编译timer线程,flag决定具体定时器进入哪条链表定时器函数运行机制中断应用系统时钟SOFT与HARD定时器的执行位置25运行机制SOFT节点进入rt_soft_timer_listtimer线程检查最近超时时刻超时函数在线程上下文执行可进行会引起调度的操作HARD节点进入rt_timer_listSysTick中断检查最近超时时刻超时函数在中断上下文执行函数应短小且不可阻塞定时器函数运行机制中断应用系统时钟timer线程的运行方式26运行机制next_timeout=rt_timer_list_next_timeout(rt_soft_timer_list);if(next_timeout==RT_TICK_MAX)rt_thread_suspend(rt_thread_self());elsert_thread_delay(next_timeout-rt_tick_get());rt_soft_timer_check();01读取链表首节点的超时时刻02链表为空时挂起自身03时间未到时延时到目标时刻04到期或被唤醒后重新检查,再执行超时函数定时器函数运行机制中断应用系统时钟rt_soft_timer_check()的处理顺序27运行机制01确认rt_soft_timer_list非空02取得首定时器并读取current_tick03判断超时时刻是否到达04移出定时器并执行timeout_func05周期定时器调用rt_timer_start()重新计时先移出节点再调用timeout_func,回调重新启动同一定时器时不会形成重复节点。定时器函数运行机制中断应用系统时钟无符号系统时间会循环回零28运行机制图3.2无符号整数的加减法示意rt_tick与timeout_tick都是32位无符号数。达到2³²−1后再加1,数值回到0。直接比较大小无法正确处理跨越回零点的超时定时器函数运行机制中断应用系统时钟timeout_tick的计算29运行机制图3.3timeout_tick的计算启动时timeout_tick=current_tick+init_tick;判断时使用current_tick−timeout_tick的无符号差值。定时器函数运行机制中断应用系统时钟定时器超时后的差值30运行机制图3.4定时器超时的情况超时时刻到达时,差值变为0。检查延后时,差值会变为有限正数,例如1或10。系统通过阈值判断它仍属于“已经超时”。定时器函数运行机制中断应用系统时钟为什么定时时长小于RT_TICK_MAX/231运行机制初始差值delta=2³²−init_tick超时判定delta<out_delta_lim为避免“开始即结束”,init_tick与超时判定阈值都取无符号范围的一半。init_tick<RT_TICK_MAX/2定时器函数运行机制中断应用系统时钟定时器系统运行流程32运行机制图3.5定时器系统的运作流程定时器函数运行机制中断应用系统时钟定时器实验:LED周期闪烁33运行机制实验目标用周期SOFT定时器代替LED线程;LCD显示周期,按键动态调整、启动或停止定时器。左右按键周期每次增减50ms,范围50~2000ms上下按键启动或停止led_twinkle定时器参数更新依次调用stop、control、start超时函数led_timeout()翻转LED定时器函数运行机制中断应用系统时钟中断与异常34中断应用异常CPU暂停当前程序,并处理内部或外部事件。同步异常:CPU内部错误异步异常:外设事件中断中断属于异步异常。RT-Thread的中断设置与裸机开发基本一致,但线程运行会被中断暂时打断。外设信号经中断控制器NVIC送达CPU定时器函数运行机制中断应用系统时钟中断处理的四个阶段35中断应用01中断请求:检查处理器状态、使能与屏蔽条件02中断进入:保存R0~R3、R12、LR、PSR等寄存器03中断处理:跳转到向量表指定的ISR04中断返回:从栈中恢复现场并继续原程序Cortex-M通过中断向量表直接定位各ISR入口定时器函数
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 外交关系的突破课件
- 医疗机构抗菌药物管理方法肖永
- 医院感染自查自纠报告
- 2026年春招:快手题库及答案
- 2026锂电池回收利用市场现状及投资可行性研究报告
- 2026中国智慧农业技术应用与政策支持分析报告
- 2026汽车芯片缺货缓解时序与备货策略调整建议报告
- 《人工智能通识课教程》教学设计全套 项目1-8 项目1-8- - 追溯AI的起源(1课时) - -AI如何影响就业(1课时)
- 常用抗凝药物机制及分类总结2026
- 胫骨感染性骨不连临床诊疗指南总结2026
- YB-T6230-2024《不锈钢单位产品能源消耗技术要求》
- 干熄焦安全培训课件
- 《大气科学概论》教学课件-第一章大气概述
- 2025年淮北市消防救援支队公开招聘政府专职消防文员17人(公共基础知识)综合能力测试题附答案
- 穴位贴敷治疗呼吸疾病
- 广泛期小细胞肺癌诊疗指南
- 智算中心设计规范
- 2025年绍兴市新昌县事业单位公共基础知识真题
- 巷道支护设计安全论证报告
- CAR-T细胞治疗产品细胞存储期限与效期验证方案
- 备考2025届中考数学中档及压轴题型模型方法技巧专题05:全等三角形模型综合(原卷版)
评论
0/150
提交评论