您的位置 首页 报告

时刻片轮调的单片机程序结构

我们使用单片机去做一些任务的时候,通常把程序写成顺序结构,基本可以解决大部分的设计要求了。而且这种结构便于理解,而且程序易构成模块

咱们运用单片机去做一些使命的时分,一般把程序写成次序结构,根本能够处理大部分的规划要求了。并且这种结构便于了解,并且程序易构成模块化,在各个模块中调用完成更杂乱的使命。

但是次序结构的写法,有时分避免不了沉重冗长的时刻等候。例如键盘扫描,你就给我弄了一个delay_20ms()函数,而在这延时的进程,其实 MCU能够做许多工作的,这不白白的糟蹋掉这段时刻吗?其实,delay的这段时刻用数码管显现替代,也就是在等候的进程,咱们能够做一下显现。但仅此而已?

之前,我在做3寸大数码钟的时分就遇到过一个时刻要求严苛的问题,我选用了17个数码管,分红两组来动态显现。为了不闪耀,那么改写频率最少大于 50Hz。而单片机还有其他使命,比方说读DS1302实时时钟,串口收发数据,按键扫描,读DS18B20等等,而其间最要命的是读取DS18B20温度传感器的数据,咱们都知道其间等候温度转化的时刻,根本要到达900ms了,这样一来,数码管就会闪耀得很厉害了。

所以,我网上找了一些材料学习。咱们都选用“时刻片轮询”算法的程序架构来写,这样既确保了实时,也充分利用了使命等候的时刻。

下面简略来看看,关于时刻片轮调的程序思维,而依照这种思路,能够衍生出许多程序结构

假定,单片机要履行的使命有task_1(); task_2(); task_3(); ……task_n(); 各个使命对时刻要求不同。

下面是我对时刻片轮调的相关知道。

体系基准时刻片:

咱们选用守时器中止来发生体系的基准时刻片,也叫体系的基准节拍,例如每4ms中止一次。这能够形象的比方成脉息心跳。

使命(事情)的轮调:

每一次心跳,咱们就给使命履行的时刻标志计数。当标志计数到了,就履行该使命函数!

事情的要求:

1.每一个事情的履行时刻不允许超越一个时刻片。

2.事情中不运用较长的delay();函数,能够运用守时延时等候,但永久有必要恪守第一条要求。

3.履行时刻较长的使命,或许较为杂乱的使命,能够分割到多个时刻片内履行。

实时性使命要求:

关于实时性要求较高的使命。比方串口收发事情,能够考虑放在主循环调用,或许再守时中止中调用。

参数传递要求:

各个使命函数之间参数传递,主张运用全局变量。使命中的内部函数,能够运用局部变量。

程序结构:

剖析一下上面的程序结构,运用了一个守时器发生体系时钟滴答,然后时钟滴答到了,就更新时刻标志,然后统一用一个事情函数来依据时刻标志分时的履行各个使命函数。

但使命履行完后,时刻标志被重置,并从头计数。那么这个使命函数就相当于被调度在了使命行列的结尾了!(感觉是不是有点使命调度办理的意思了?)

当然,各个使命函数调用的时刻不同,就造成了使命履行频率的不同。这也是时刻片的巨细商定,以及时刻片散布的问题,这需求从实践的使命考虑,并获得一个最佳的时刻片,以及合理的组织各个使命函数的联系。

别的一种时刻片轮调程序结构

其实,原理大致相同。履行机制不同算了,各种程序结构有它优缺点,有最适合运用的当地。

下面,简略了解。

程序结构:

关于时刻片轮询法的程序结构,无疑有比次序结构程序更多的长处,但使命函数有时分被拆分红多段,不方便了解程序全体思路。

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

为您推荐

联系我们

联系我们

在线咨询: QQ交谈

邮箱: kf@86ic.com

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

微信扫一扫关注我们

返回顶部