单片机培训机构讲解怎么实现单片机多任务执行

更新时间: 2019-07-26 15:18:49来源: 粤嵌教育浏览量:7923

       单片机是一种集成电路芯片,是采用超大规模集成电路技术把具有数据处理能力的中央处理器CPU随机存储器RAM、只读存储器ROM、多种I/O口和中断系统、定时器/计时器等功能集成到一块硅片上构成的一个小而完善的计算机系统。随着计算机技术的高速发展,单片机以其自身的特点,己广泛应用于工业控制、家用电器、智能仪器、电子玩具市场。那么单片机如何去实现多任务执行功能呢?下面听听单片机培训机构的讲师是怎么说的?
  一、 微机实现多任务的方式

  微机实现多任务的方式一般是由加载的操作系统来实现的。通过操作系统提供的函数来创建多进程或者多线程来实现多任务方式。由于多进程耗费的资源多,而多线程的开销相对小的多,因此我们采用单片机模仿多线程的方式来实现。

  操作系统创建多个线程后,将管理各个线程占用CPU的时间。操作系统以轮换方式向线程提供CPU时间片,从而使多个线程看起来是同时运行的,而不是等待一个线程执行结束后再去执行下一个线程。

  PC(Program Counter,程序计数器)是用于存放下一条指令地址的地方。某个线程正在占用CPU时间,其实是PC值指向该线程所占的内存,并正在逐条取到CPU寄存器中进行运算。该时间片结束后,PC值要指向下一个线程所占用的内存中,进行类似的运算。其他线程都轮流一遍后,将又回到原来那个线程暂停的位置继续运算。所以,从一个线程转换到另外一个线程去执行时,要保存此线程的“现场”,包括此线程下一条指令的位置(PC值)、此线程所使用的各个寄存器值等。当此线程又拥有CPU时间时,将保存的PC值赋给PC寄存器,保存的各个寄存器值再赋给各个寄存器。

  除了保存“现场”与恢复“现场”外,另外关键的一点是,操作系统能够改变PC值——强制把使用CPU的权限从一个任务切换到另一个任务,这就用到了中断。微机是用操作系统来管理中断的,用户只能间接使用中断。

  二、单片机实现多任务的思路

  由上面的介绍,我们知道微机中多线程轮流占用CPU时间,关键点在于:

  1、保存“现场”与恢复“现场”,即保存和恢复下一条指令的位置和通用寄存器的值。

  2、能够改变PC值,从而可以在多个线程中进行切换,以便同时运行。

  在51系列单片机中,如何实现上面的两个关键点呢?

  1、保存此“现场”,恢复另一“现场”

  给每个任务开辟一个堆栈,各个任务的堆栈不能交叉。各个任务的对应堆栈用于实现以下功能:

  1、保存“现场”,在PC离开此任务前保存该任务所用到的通用寄存器值(寄存器A、B、Rn和位寄存器C等)。

  2、恢复“现场”,先获得下一个任务的堆栈地址,然后取出堆栈中所保存的通用寄存器值;

  3、在调用子函数时,用以保存下一条指令的地址。

  三、 多任务切换的主循环

  进入某个任务进行死循环后,程序的主循环流程如图3所示。当程序进入到某个任务进行死循环时,如上面的任务i,定时器中断周期发生,发生时意味着该任务的时间片结束,准备执行下一个任务。这些准备工作是在中断里做的,如图3所示。首先,应保存此时用到的各个寄存器值,以便下次轮到该任务时取出继续执行,还要保存栈顶的位置,以便下次能取出所保存的值;然后通过全局变量TaskIndex取得下一个任务的序号,通过任务序号,得到下一个任务的堆栈栈顶的地址,赋给栈顶寄存器SP;然后通过SP取出保存的各个通用寄存器值;,重设定时器值,使中断能够再次进行任务切换。

  这里重要的是整个思路,没有比较难的代码,故没有贴出代码。值得提醒的是,保存通用寄存器值时,并不需要保存所有的通用寄存器值,只需要保存任务中用到的就可以。这里解释前面程序中提及的45H、55H、65H:各个任务堆栈的开始处存储各个任务的地址,然后再把要保护的寄存器值入栈,栈顶抬高;而要恢复下一个任务时,需将上次保护寄存器后的栈顶值赋给SP寄存器,然后逐个出栈赋值给各个寄存器值,直到栈底处存储的上次任务暂停处的地址。因为本文的验证程序只保护了A、B、R0、R2 4个寄存器值,堆栈刚好到达45H、55H、65H。

  总结

  单片机实现多任务的另一种常用方式是把任务切成小片,然后放在主循环里。这样,每个循环执行一次各个任务的一小片,从而看起来所有的任务都同时进行。切片的思想是把一个任务细分成多个步骤,而每次只执行其中一小步。如多段数码管的显示可以每次只显示一段,这是更常用的方式,但并不是每个任务都可以切片的。

  以上就是粤嵌科技的讲师给大家讲解的实现多任务执行的方法,如果有更多的关于单片机技术上的问题的话,那么粤嵌科技欢迎大家来我们公司和我们的讲师进行面对面的沟通和交流,也可以点击我们文章下面的获取试听资格按钮来获取我们的单片机培训免费资格。

免费预约试听课