您的位置 首页 解答

时刻片调度在单片机中的运用

单片机在系统中充当CPU的角色,需要同时处理多个事务。如与PC机通信,将收到的信息转发给从机,监视数据处理情况等一些繁杂而又重

单片机在体系中充任 CPU 的人物,需求一起处理多个业务。如与 PC 机通讯,将收到的信息转发给从机,监督数据处理状况等一些冗杂而又重

要的作业。怎么协调好各个业务之间的联系,并有条有理的履行各个业务,这就需求在编写程序时选用适宜的算法进行处理。一般的办法就

是在单片机中移植操作体系,由操作体系来办理各个业务。但由于体系要占用必定的内部资源,这对自身资源十分有限的单片机来说是不现

实的。所以,很少在单片机中选用操作体系,而是选用时刻片轮询调度的办法进行各使命的办理。

时刻片轮询调度是一种陈旧而又简略的算法,广泛运用于无操作体系的微处理器中。在体系中,每个进程被分配一个时刻段,称作时刻片,

即该进程答应运转的时刻。假定在时刻片结束时进程还在运转,则 CPU 将被掠夺并分配给另一个进程。假定进程在时刻片结束前堵塞或结束

,则 CPU 当即进行切换。调度程序所要做的便是维护一张安排妥当进程列表,当进程用完它的时刻片后,它被移到行列的结尾。

时刻片轮询调度中风趣的一点是怎么确认时刻片的长度。从一个进程切换到另一个进程是需求必定时刻的,由于要保存和装入寄存器值及内

存映像等维护现场的作业,更新各种表格和行列等。假定进程切换,有时称为上下文切换,需求的时刻为 5 毫秒,再假定时刻片长度设定为

20 毫秒,则在做完 20 毫秒有用的作业之后, CPU 将花费 5 毫秒来进行进程切换。 CPU 时刻的 20% 被糟蹋在了办理开支上。进程切换时刻必定的情

况下,假定时刻片长度设定的越小时,这种糟蹋更显着。所以,时刻片长度与 CPU 利用率是一对不行谐和的对立,有必要处理好它们之间的关

系。

为了进步 CPU 功率,咱们可以将时刻片长度设得大一些,这时糟蹋的时刻只要就会相对减小。但在一个分时体系中,各个使命对时刻片长度

的要求是不一致的。例如在一个体系中,或许要求每秒钟更新一下显现内容,每几十毫秒要扫描一下按键,每几毫秒要检测一下串口缓冲区

等……可见,各个使命对时刻的依靠程度是不一样的。假定时刻片设得太长,某些对实时性要求高的使命或许得不到履行,使得体系的实时

性变差。总归,时刻片的设定应满意对实时性要求最高的那个使命,这样才干保证每个使命都可以及时得到履行而不被错失。

要在一个单片机体系中完成时刻片轮询调度,需求按照以下的过程 :

2 确认使命总数及各个使命实对时刻实时性的要求

2 依据使命对时刻的要求,确认时刻片的长度

2 预算履行每个使命所花费的时刻,保证使命可以在时刻片的长度内履行结束

2 假定使命较大,时刻片缺乏于让使命履行完,此刻可细化该使命

鄙人面的代码片段中,共有 4 个使命需求履行,其间串口对实时性的要求最高。串口选用的波特率为 2400Baud , 8 位数据,无校验, 1 个中止

位。所以传输 1 字节数据所需时刻为: 4.17ms ,故将时刻片长度设定在 4ms 是合理的。单片机主机体系的时刻片处理函数如下所示:

#pragma interrupt_handler timer1_ovf_isr:9

void timer1_ovf_isr(void)

{

//TIMER1 has overflowed

TCNT1H = 0xF0; //reload counter high value

TCNT1L = 0x60; //reload counter low value

TimeCount++;

if(TimeCount==50){TimeCount=0; CC1100_SendFlag=1;} // 无线收发使命处理标志

TimeOver(); // 超时检测函数

Alarm_Detect(); // 告警检测函数

DealComFlag=1; // 串口使命处理标志

}

在主函数中,依据标志位调用相应的函数进行数据处理,然后将标志位铲除,比及下一个时刻片到来后再开端新一轮的数据处理。

int main(void)

{

if(CC1100_SendFlag==1) { … ; CC1100_SendFlag=0; } // 无线收发使命处理标志

if(DealComFlag==1){ … ; DealComFlag=0; } // 串口使命处理标志

……

}

声明:本文内容来自网络转载或用户投稿,文章版权归原作者和原出处所有。文中观点,不代表本站立场。若有侵权请联系本站删除(kf@86ic.com)https://www.86ic.net/changshang/jieda/258949.html

为您推荐

联系我们

联系我们

在线咨询: QQ交谈

邮箱: kf@86ic.com

关注微信
微信扫一扫关注我们

微信扫一扫关注我们

返回顶部