引 言
在简单的单片机应用系统中,前/后台系统被广泛应用。其中应用程序是一个无限循环,循环中调用相应的函数完成相应的操作。这部分可以看作后台行为,也称为任务级;中断服务程序处理异步事件,可以看作前台,也叫中断级,时间相关性很强的操作靠中断服务程序来保证。中断服务程序提供的信息一直要等到后台程序运行到该处理这个信息时才能得到处理,最坏情况下,响应时间等于整个循环的执行时间。随着单片机应用系统的复杂化,前/后台系统已不能满足系统实时性的要求,这就需要一个嵌入式的实时操作系统来管理和协调多个任务和中断。
目前在单片机上运行的实时多任务操作系统主要有μC/OS、RTX51 Full和RTX51 Tiny。μC/OS是Jean J.Labrosse先生编写的源码开放的实时内核,可适用于8/16/32位的单片机、ARM和DSP等微控制器和微处理器,在诸多领域得到广泛应用。但是μC/Os实时操作系统规模较大,相对于处理能力有限的单片机来说有些勉强,并且大多需要外扩RAM运行,这给应用系统软硬件设计都带来不便。 RTX51是德国Keil公司开发的一种小型的专门应用于McS-51系列单片机的实时多任务操作系统,它有RTX51 Full和RTX51 Tiny两个版本。RTX51 Full无源码,自身代码有6 KB多,运行时需要大量的外部RAM,不利于学习和使用;RTX51 Tiny较为简单,但是任务没有优先级和中断管理,很多时候并不实用。SmallRTOS51是陈明计先生为51系列单片机编写的源码公开的实时操作系统,支持任务优先级和中断管理,RAM需求量小,非常适合在单片机上运行。本文将在简要介绍Small RTOS51实时操作系统的基础上,结合具体应用实例详细说明Small RTOS51环境下的多任务串行通信。
1 Small RTOS51简介
Small RTOS51嵌入式实时操作系统具有以下特点:
①公开源代码,任何人都可以免费获取。
②可移植、可固化,虽然是为51系列单片机编写,但是比较容易移植到其他MECU上,并可以固化到产品中,成为产品的一部分。
③占先式,支持16个优先级不同的用户任务以抢占式运行。
④中断管理,系统支持中断管理功能,中断嵌套层数可达255层。
⑤RAM需求量小,Small RTOS51为小RAM系统设计,128个RAM单元就可以运行。通常单片机不需要外扩RAM就能运行Small RTOS51实时操作系统。
下面简要介绍Small RTOS51的任务管理和任务间的通信与同步。
1.1 Small RTOS51的任务管理
Small RTOS51实时操作系统中,任务必须是一个无限循环,每个任务必须赋予不同的优先级,优先级数值越小,优先级越高。在任意时刻,任务的状态必处于以下4种状态之一:
①运行,任务获得CPU后开始执行;
②就绪,任务只等待系统分配CPU资源;
③等待或挂起,任务因等待时隙、信号量或者消息等资源而被阻塞;
④被中断态,发生中断时,CPU提供相应中断服务,原来正在运行的任务暂不能运行,就进入了被中断态。
系统中任务状态的转换关系如图1所示。
1.2 Small RTOS51中任务间的通信与同步
Small RTOS51中,任务间的通信与同步主要有两种方式:信号量和消息队列。
信号量由两部分组成:一个是信号量的计数值,它是一个8位无符号的整数;另一个是由等待该信号量的任务组成的等待任务表,所有对信号量的访问都必须通过信号量索引来实现。信号量索引是一个0到OS_MAX_SEMS-1的数值,其中OS_MAX_SEMS为用户自定义的最大信号量数目。
消息队列实际上是一个8位无符号的字节变量数组。向队列发送一个消息,实质上是将O~255之间的一个数值存储到消息队列中;从消息队列中获得一个消息就是获取一个O~255之间的数值。
2 多任务串行通信研究
下面以一个应用实例详细说明Small RTOS51环境下包含多任务的串行通信,该应用的硬件设计以NXP公司的P89V51RD2单片机为核心,包含了键盘电路、看门狗电路和显示电路等几个部分。硬件设计简图如图2所示,主要完成以下功能:从串口接收数据,经P89V51RD2单片机处理,并通过I2C总线输出到由LED发光二极管与 8574T组成的显示电路,由P89V51RD2扫描键盘,检测到按键被按下时,进行相应的处理并生成一串命令数据通过串口向远端发送。