《30天自制操作系统》学习笔记——第十二天
来源:互联网 发布:清华大学网络教育本科 编辑:程序博客网 时间:2024/05/03 12:51
好的,来进入今天的新内容吧!
今天的内容是定时器。什么是定时器呢?就从功能上来说,其实很简单,就好像微波炉一样,你设定一个时间,然后从现在开始计时,到那个时间的时候提醒你。那我们要这样的功能干什么呢?可以实现鼠标的光标闪烁。有没有高级一点的?有,而且至关重要,在后面会讲到,那就是多任务。多任务的原理就是把时间分成一个个小小的时间片,这个具体以后再讲。所以知道了这个,我们就会发现定时器很重要。
要在电脑中管理定时器,其实就是对PIT的设定。PIT是“Proguramable Interval Timer”,可编程的间隔型定时器。PIT连着IRQ0,设定的时间超时了以后,就会触发中断。等一下,好像在学汇编的时候也有一个关于时间的芯片,对,那就是CMOS RAM。其实那个是用来记录实时时钟的,跟这个定时器不太一样。区别就好像你家的钟表和秒表的区别。CMOS的端口地址为70h地址端口,71h数据端口。这里我们用到的芯片是8254。书上没有讲太仔细。我们在这里补充一点关于8254的内容,因为这学期单片机的学习也会有学到:
资料来自百度文库:点击打开链接
控制字如下:
所以往43h端口写入34h就是计数器00,长度为先低后高两个字节,以方式2进行二进制计数。
往40h端口写入的是中断周期,此处写入的数值指的是多少个时钟周期。由于芯片时钟频率已知,是1193.18KHZ,那么中断频率就是时钟频率/设定的数。当设定数是11932时,中断频率为100HZ,即中断周期为10ms。
具体的关于8254芯片的内容讲到这里,以后再用到的话可以参考刚才链接上的ppt,讲的很清楚了已经。
设定完之后,每过10ms,IRQ0就会发来一个中断请求。
接下来就该编写中断处理程序了。也就是inthandler20(int *esp)。一开始的中断处理程序,我们是这样处理的,设一个timeout,也就是要设定的超时时间。比如我们想要设10秒,那就应该在此处设为1000(*10ms)。然后每次中断请求来以后,timeout--,然后判断是否已经为0,若是0,则已经超时,向fifo里发送超时的标志数据data。
顺利实现!接下来设定多个定时器。一开始作者给每个定时器分配一个独立的fifo,但这样速度很慢,而且判断的语句显得非常复杂,于是作者马上做了改动,将fifo归到一起,不同的定时器,由标志数据data不一样来判断是哪个定时器超时。为了再次加快中断处理,作者引入了count。把设定时间用timeout表示,count从零开始,每次中断,count++。把减法换成加法,节省了时间。继续加快中断处理,原来每有一个时钟超时都需要执行500次判断,现在引入next,即下一个要来的时刻。每次超时后,也做一个循环判断,确定next。
为了进一步提高中断处理的速度,作者引入了类似图层管理信息的定时器管理信息:TIMERCTL。其中,intusing 代表现有的时钟的个数,这样就可以不再循环500次。这里时钟的管理结构,还是队列型的。在下一讲,会把这种结构做成链表型的,为什么要做成链表呢?咱们明天再叙!
- 《30天自制操作系统》学习笔记——第十二天
- 《30天自制操作系统》学习笔记——第二天
- 《30天自制操作系统》学习笔记——第四天
- 《30天自制操作系统》学习笔记——第六天
- 《30天自制操作系统》学习笔记——第十天
- 《30天自制操作系统》学习笔记——第一天
- 《30天自制操作系统》学习笔记——第三天
- 《30天自制操作系统》学习笔记——第五天
- 《30天自制操作系统》学习笔记——第七天
- 《30天自制操作系统》学习笔记——第八天
- 《30天自制操作系统》学习笔记——第九天
- 《30天自制操作系统》学习笔记——第十一天
- 《30天自制操作系统》学习笔记——第十三天
- 《30天自制操作系统》学习笔记——第十四天
- 《30天自制操作系统》学习笔记——第十五天
- 《30天自制操作系统》学习笔记——暂停
- 《30天自制操作系统》学习笔记_helloos0
- 《30天自制操作系统》学习笔记
- 【开班典礼】2014年02月19日java基础班隆重登场!
- MATLAB中inputdlg的使用
- ubuntu 关机
- 采样频率、采样点数、分辨率、谱线数(转载)
- 教你如何监控你的妹子或者将来的妹子的手机
- 《30天自制操作系统》学习笔记——第十二天
- 由于动画造成的崩掉 注意alertView点击消失
- 断点调试
- Python连接Redis连接配置
- java中获取set和get方法
- 黑马程序员-交通灯管理系统分析
- 802.1X的wpa认证流程-------4-way handshake过程分析
- Android Intent
- Python 解码js escape加密