先用一个小例子引出今天的主题,想象一下,一个基本的家电控制板,肯定或多或少的会包含: LED 或者数码管显示,按键,继电器或者可控硅的输出这3部分。数码管需要 10ms到20ms的动态扫描,按键也需要 20ms左右的延时消抖,有没有意识到,其实这些时间是同时在进行的。回想一下咱们的教科书怎么教按键的延时消抖的?没错,死循环,绝对是原地踏步死循环,用指令来计时。这样很自然的引发一个问题,单片机在原地踏步死循环的话,那么其它的工作怎么办?如数码管的动态扫描怎么办?唯有等按键扫描之后再进行了,这样出来的效果,数码管肯定会闪烁的,扫描时间过长了,缩短按键消抖时间也不是解决办法,想象如果咱们还有其它很多工作也是同时做的呢?解决办法之一,就是今天的主题,分时扫描的思想。当然不会是唯一的办法,只不过俺一直在用,觉得这个是非常不错的思想,可以解决很多实际问题。大胆妄言一下,分时扫描的思想也是单片机编程最核心的思想了,信不信就由你自己判断了。(转自 程序匠人)
最近接触了嵌入式系统,所以对这个时间片轮转思想理解比较容易。单CPU一个时间点就只能执行一个进程,所谓的多任务就是在多进程中进行不断切换。因为速度太快,我们无法分辨出这种现象,造成了多进程同时执行的假象,就像数码管的动态扫描一个道理。
时间片轮转在某些嵌入式系统也是适用的。将基础时钟(如systick)划分为多个时间片。时间1到达----执行任务1;时间2到达----执行任务2;时间n到达----执行任务n...
如此好的程序设计方法,完全可以在平时的编程中养成,能够大大增加程序的执行效率。那怕是51单片机也需要如此。告别原地踏步的空延迟,不要再让程序在原地等待。我们的单片机是一直跑着的。咱们要跑着等,不是站着等。等待的时间可以让单片机去执行其他程序,提高程序执行效率