第12章 C51下的RTX-51实时多任务操作系统
在C51语言中,除了可以编写一般的单进程程序外,还可以实现多任务操作系统设计。在51系列单片机上能够运行的实时多任务操作系统为RTX-51,可以在单个51系列单片机上管理多个进程或者任务。RTX-51使得复杂的多任务程序设计变得简单,因此在51系列单片机中应用很广泛。
本章主要介绍RTX-51实时多任务操作系统的种类,并以RTX-51 Tiny为主介绍RTX-51的系统函数、RTX-51的任务管理及配置等。最后,对RTX-51 FULL系统进行介绍。
12.1 RTX-51实时多任务操作系统简介
在简单的单片机程序中,采用单一进程并配以中断处理则可以完成大部分的设计需求。但是,对于一些复杂的应用程序,需要同时执行多个进程或者任务。传统的程序设计方式使得程序比较复杂,且程序的运行性能难以满足多任务实时性的要求。此时,便需要实时多任务操作系统(RTOS)。
实时多任务操作系统(RTOS)可以灵活地为各个任务分配系统资源,包括CPU、内存以及时间等。因此,CPU同时执行多个任务或者进程,在一定程度上实现多任务并行工作。
在51内核单片机中,可以使用RTX-51多任务实时操作系统来实现多任务并行工作。实时多任务操作系统RTX-51使用标准的C51语言来编写,其自身提供了灵活的时间分配和简单有效的系统函数,可以实现多任务的及时响应和切换。
12.1.1 单任务程序与多任务程序的比较
对于一般的C51程序,均包含main主函数。程序从main主函数开始执行,是一个单任务单进程的程序。如果程序中使用了中断,则可以在中断发生的时候转向中断服务例程。对于RTX-51实时多任务操作系统,其中可以使用多个任务,则允许多个任务并行地执行。下面将举例介绍单任务程序和RTX-51多任务程序的区别。
1.简单的单任务程序
前面介绍过的程序均为简单的单任务程序,从main主函数开始执行语句。简单的单任务程序示例如下。在该程序中,首先定义变量count,然后在while主循环中,循环将变量count加1,然后通过串口打印输出count的数值。程序代码如下所示。
include<reg52.h>
include<stdio.h>
void main()//主函数
{
int count;//定义变量
while(1)//主循环
{
count++;//计数器加1
printf(“count=%d”,count);//打印输出
}
}
2.多任务循环程序
如果有两个或多个任务需要处理,且系统要求不高,这些任务可以在main函数中逐个执行,即所谓的多任务循环程序。多任务循环程序仍然采用main函数开始,为了实现多个任务的操作,需要在程序中按照一定的顺序循环切换任务的执行,或者采用中断系统。多任务循环程序示例如下。在该程序中,首先定义两个变量,在while主循环中,两个变量逐个循环加1并通过串口打印输出。程序代码如下所示。
include<reg52.h>
include<stdio.h>
void main()//主函数
{
int count0;
int count1;
while(1)//主循环
{
count0++;//变量count0加1
printf(“count0=%d\n”,count0);
count1++;//变量count1加1
printf(“count1=%d\n”,count1);
}
}
3.RTX-51实时多任务程序
RTX-51实时多任务操作系统将CPU时间划分为时间片,然后将时间片合理地分配给多个任务。程序中每个任务执行预定数量的时间片,然后切换到另一个任务的时间片上执行。RTX-51多任务程序执行多个任务或者进程的调度,RTX-51任务切换的时间很短,因此可以实现多任务准并行执行。RTX-51多任务系统执行的速度在很大程度上依赖于单片机的CPU频率,对于高性能的程序通常选择高速的单片机来执行。
对于上面的多任务循环程序,如果采用RTX-51实时多任务程序来实现,则程序示例如下。
include<RTX51TNY.h>
include<reg52.h>
include<stdio.h>
int count0;//定义变量count0
int count1;//定义变量count1
Task0()_task_0//任务0
{
os_create_task(1);//创建任务1为准备执行
while(1)
{
printf(“count0=%d\n”,count0++);//打印输出变量count0
}
}
Task1()_task_1//任务1
{
while(1)
{
printf(“count1=%d\n”,count1++);//打印输出变量count1
}
}
在该程序中,使用“task”定义了两个任务,任务0的执行函数为Task0,任务1的执行函数为Task1。RTX-51实时多任务操作系统首先从任务0开始执行程序,并创建任务1为准备执行。当任务0的时间片执行完毕后,RTX-51内核将程序转向任务1开始执行另一个时间片。当任务1的时间片结束后,将重新指向任务0执行。因此,两个任务无限循环切换,实现准并行执行。