时间片轮转算法在单片机程序设计中的应用
器的存储器开辟出一个缓冲区为任务记录表,供任务调度程序使用。任务记录表中设置了三项内容:用户编号、子任务号及时间片数,如表2所示。
本文链接地址:http://www.oyaya.net/fanwen/view/175642.html
表2 任务记录表
用户编号 子任务号 时间片数 0~31 0~15 0~16
3 软件设计
3.1 任务调度程序的设计
根据上述分析,可以确定任务调度程序的功能:
(1)按用户机编号调用各用户子任务;
(2)完成一个调度周期的时间不超过26ms,并在每个周期结束时对26ms进行精确定时;
(3)在调度周期开始时,读取所有用户的DTMF编码和摘/挂机状态,供各用户子任务处理;
(4)在调度周期结束前,根据用户子任务处理结果向用户机发送DTMF编码。
调度程序的流程如图2所示。
3.2 用户子任务的设计
用户子任务根据该用户缓冲区的数据进行处理,并把处理结果存放于结果单元。各个子任务并不与外部输入输出接口直接交换数据,对接口的输入输出由任务调度程序在调度周期开始和结束时调用专门子程序完成。用户子任务的切换工作根据操作流程在各子任务中完成。用户的操作被细分为16个子操作,相应地有16个子任务,图3为14号子任务的流程图。
在该子任务的开始(0ms)和中间(52ms)时刻设置DTMF数据发送缓冲区,分别允许和禁止DTMF编码的发送。在该子任务结束时根据该用户缓冲区内需发送的数据计算第2个的DTMF值,并修改任务记录表中该用户的调度数据,指向它的下一个子任务。其它子任务的设计思想与此子任务类似。
本文在单片机实时控制系统中引入了现代操作系统的多任务思想,采用时间片轮转调度算法对传统单片机编程思想进行了改进,并应用在基于MCS-51的分级分布式系统中,有效地完成了对32个独立用户的控制。实践证明这种结构清晰、调度灵活,适用于定时要求复杂、实时性要求强的系统。