RTT之定时与中断理解
定时管理这部分看过一遍了,只是再总结一下要点:
两类定时机制:单次触发和周期性触发。
超时函数所执行的环境:分为中断环境与线程环境。默认是中断环境。
RTT定时器工作机制:
1、系统经过的tick
2、定时器链表rt_timer_list,按照超时时间排序的方式插入到定时器链表中。并且加入了跳表算法(其实就是加了索引)。
创建定时器,最终是调用timer.c中rt_list_init(),其中的timer->row类型为rt_list_t
然后在SysTick_Handler中,调用timer.c中rt_timer_check()函数,在此函数中,查询rt_timer_list链表,rt_timer_list是定义在timer.c中的一个全局变量static rt_list_t rt_timer_list[RT_TIMER_SKIP_LIST_LEVEL];//其类型也为rt_list_t与创建时的ROW类型一致。并通过rt_timer_check()来进行两者的关联。
这样就可以实现定时功能。RTT也是由SysTick来实现定时功能的。
定时器管理:
创建:rt_timer_create()从内存堆中分配一个定时器控制块,然后初始化控制块。
删除:rt_timer_delete()从rt_timer_list链表中删除,释放内存控制块所占空间
静态:
创建:rt_timer_init():初始化定时器控制块
删除:rt_timer_detach():从容器中脱离,但占用内存不会释放。
启动:定时器状态改为激活,并插入到rt_timer_list中。
停止:状态改为停止,并脱离rt_timer_list链表。
控制:编程接口,查看或改变定时器设置。
精确延时:rt_hw_us_delay();
定时器的上下文
超时处理都是在中断中进行的,需要时刻关心超时函数都进行了哪些工作。
软件定时器指单独创建一个定时线程来处理时间。也必须是OS_tick的整数倍。
异常:
同步异常:指由同部事件产生的异常。如除零错误。
异步异常:指由外部事件产生的异常。如中断。
同步异常必须立即去处理,异步异常可以延缓或忽略。
中断:
中断服务程序必须放在统一的地址上(NVIC的中断向量偏移寄存器中)。
中断处理机制:
独立中断栈:中断时会将栈指针,更换到系统事先预留出来的中断栈空间中。运行异常和中断程序使用主堆栈(MSP)。
中断会抢占所有线程,优先运行。
中断管理:
装载:将用户的中断服务程序同中断号关联起来。
屏蔽中断源:如其意
打开屏蔽中断源:如其意
全局中断开/关:如其意
中断通知:
rt_interrupt_enter():通知内核进入中断状态,并增加嵌套深度。
rt_interrupt_leave():相对。
rt_interrupt_get_nest():是否是处于上下文切换中
基础,了解,了解。
RTT之定时与中断理解相关推荐
- 苏州大学linux课程实验报告,苏州大学实验报告-定时溢出中断实验报告
苏州大学实验报告-定时溢出中断实验报告 本文关键词:实验,报告,溢出,中断,定时 苏州大学实验报告-定时溢出中断实验报告 本文简介:苏州大学实验报告院.系年级专业姓名学号课程名称成绩指导教师同组实验者 ...
- STM32定时器之中断延时
STM32定时器之中断延时 STM32的定时器有通用定时器.基本定时器.高级定时器,我么们将选用基本定时器做一个简单的中断延时实验. 实现现象 在main中用一秒打印一个字符"main&qu ...
- 用 定时计数器中断 和 动态八段数码管 做一个秒表
用 定时/计数器中断 和 动态八段数码管做一个秒表 目录 用 定时/计数器中断 和 动态八段数码管做一个秒表 1.思路 定时器 数码管 2.主要代码讲解 3.全部代码参考(代码写的很烂,欢迎提出建议) ...
- RTT时钟管理篇——软硬定时器理解(二)
野火RTT第22章软件定时器 2018年12月29日 10:48 打开软件定时器的宏才能用软件定时器线程.才能使用软件定时器.否则还是硬件定时器(在systic中断中管理超时函数). 有两个定时器列表 ...
- RTT时钟管理篇——软硬定时器理解(一)
定时器分为硬件定时器和软件定时器.区别:硬件定时器的超时函数是在定时器中断中管理的(也就是时基中断systick中断).而软件定时器的超时函数是在线程中管理的. 进中断的就是"硬的" ...
- stm32寄存器版学习笔记04 定时计数器中断
STM32共有8个定时计数器,其中TIME1和TIME8是高级定时器,TIME2~TIME5是通用定时器,TIME6和TIME7是基本定时器.以TIME3为例总结定时计数器的基本用法. 1.TIM3的 ...
- STM32f103xxxxz中断理解笔记
中断:在程序执行过程中产生了一个必须执行的外部因素时,程序就去执行外部因素对应的中断服务函数,完了再回到正常程序,这就是简单的理解中断. 但是当程序在处理中断服务函数时又产生另一个中断时就需要一个机制 ...
- STM32基于固件库学习笔记(4)(通用定时器)TIM3定时1S中断
STM32F103ZE系列定时器资源 有 TIME1 和 TIME8 等高级定时器,也有 TIME2~TIME5 等通用定时器,还有 TIME6 和TIME7 等基本定时器. 通用定时器:是一个通过可 ...
- MSP430F5529——中断理解
认识低功耗模式: MSP430的中断,需要两个部分,一部分是打开中断,另外一部分是编写中断服务函数 打开中断 _BIS_SR与__bis_SR_register 首先我们得知道__bis_SR_reg ...
最新文章
- 函数对象 java_函数对象
- Jena增删改查java API
- python用语句输入一个3*3的二维矩阵_python中二维数组的建立,输入和输出
- 设置Windows 8.1屏幕自己主动旋转代码, Auto-rotate function code
- java maven导入导出_Java +EasyUI+SpringMvc实现Excle导入导出(上)
- java容器三:HashMap源码解析
- IOC与DI(xml 配置)
- php学校成员,php访问成员变量和成员方法
- python 获取当前路径_Python获取当前路径实现代码
- 结构体typedef struct和struct
- VS间接寻址级别不同
- 深入浅出golang的chan
- 云适配签约中远海运特运 构建移动BPM平台
- CF 229C Triangles
- C语言基础:if语句
- C语言的函数定义和函数声明
- python 多线程利器-tomorrow
- CAN通信标准帧和扩展帧介绍
- Qt 相机拍照 QCamera
- 三层架构与Mvc设计模式