论文部分内容阅读
摘要:采用嵌入式单片机设计的多任务处理设备在工业控制领域应用十分广泛。本文介绍了一种基于实时操作系统RTX51的多任务处理设备的通用设计方法,特别是适用于RTX51操作系统的多任务规划和任务队列管理方法,进一步提升了设备核心性能。本文介绍的方法稍加适应性设计即可适于多种应用。
关键词:单片机;多任务;RTX51;任务队列
中图分类号:TP391文献标识码:A文章编号:1007-9599 (2010) 09-0000-02
The Multitask Processing Equipment Design Based on Real-time Operating System (RTOS) RTX51
Liu Rui
(North China Institute of Computing Technology,Beijing100083,China)
Abstract:The embedded and multitask processing equipments are widely used in the industrial control field.This thesis presents a implementation of design that is based on multitask RTOS RTX51 equipments.Especially it is a management system which adopts multitask programming and task queue in cooperating with RTX51 RTOS. It further improves the core capabilities of the equipment.This implementation can be used in various ways once making some small adjustments.
Keywords:SCM;Multitask;RTX51;Task queue
一、引言
基于嵌入式单片机系统的多任务处理设备在工业控制领域应用十分广泛,如现场数据采集、现场控制等等,在很多应用中需要并行执行多个任务,同时又要求设备在满足需求的基础上尽可能的经济耐用,采用MCS51内核系列单片机和能在其上运行的实时多任务操作系统RTX51实现该类设备是一个很好的解决方案。RTX51是美国Keil公司开发的一种小型的、应用于MCS51内核系列单片机的实时多任务操作系统,RTX51有完全(Full)和最小(Tiny)两种模式。Tiny模式短小精炼,完全集成在Keil C51编译器中,在不需要任何外部RAM的条件下,很容易地运行在8051系统上。比起其它小型操作系统来讲,RTX51 Tiny具有运行速度快、对硬件要求不高、使用方便灵活等优点,越来越广泛地应用到单片机的软件开发中。本文介绍的基于RTX51的多任务处理设备,是基于RTX51 Tiny操作系统,采用多任务规划和任务队列的方法,增强设备总体处理能力,这种设计方法丰富了RTX51 Tiny的功能,并且稍加适应性设计即可适用于多种应用。
二、多任务处理设备
多任务处理设备通过现场总线实现数据采集,采集到的数据经过单片机计算处理、存储,并通过外部总线上报,同时单片机还可以对采集到的数据进行计算判断,并按照预设算法驱动控制输出。数据采集现场总线可根据具体需求连接RS232、RS422、GPIO、SPI、CAN、I2C等,数据类型可以是各种总线连接的各类传感器数据,如烟雾传感器、红外对射检测装置、红外扰动检测等开关量传感器,下文简称单体传感器;温度、湿度、位移等简单数据量传感器,称为简单传感器;物品在位检测传感器等组合数据传感器,称为组合传感器。
多任务处理设备的数据采集、计算、存储、上报、控制输出等功能是并行工作的,如果采用传统的串行工作方式很难实现,因而采用基于RTX51操作系统,多任务规划和任务队列的方法,实现多任务处理设备的设计。
设备对硬件平台的要求不高,51系列单片机都适用,现场总线和上报总线形式可根据具体需求设计,硬件部分本文就不作详细介绍了,下面重点介绍设备软件设计。
三、软件设计
(一)多任务设计
软件设计要根据设备功能进行任务划分,设计信号处理和通信任务进程,包括系统资源镜像表访问维护进程、任务需求循环链队列维护进程、系统分时任务激发时钟维护进程、传感器维护进程、外部通信链路维护进程、现场通信总线通信链路维护进程。各个任务进程及与任务之间的通信相关进程关系如图1所示。
下面具体介绍每个进程的功能:
1.系统资源镜像表访问维护进程。
资源状态镜像表为每个传感器定义状态镜像,设定同各个检测传感器进行通信的时间间隔,并将其在设备内资源状态镜像表存储的状态信息进行更新维护。
系统资源镜像表访问维护进程是其它进程访问系统资源镜像表的统一接口。其它进程可以以统一或相近似的方式访问系统资源镜像表的内容;其中,按照各个传感器更新周期,发起更新需求的是传感器数据状态更新需求维护子进程,该子进程提供传感器数据状态更新需求,并将此更新需求推入任务队列中,以异步信号方式启动其它进程。
2.任务需求循环链队列维护进程。
任务需求循环链队列是逻辑上首尾相接的数据队列,各个进程将任务需求推入队列,维护进程负责任务需求处理,通过RTX51的任务消息触发相关进程。此队列长度以单片机能在设定周期内异步处理的通信访问任务最大处理能力来确定。在设定周期内未能完成全部推入的任务,队列头将被新的任务需求覆盖。
3.系统分时任务激发时钟维护进程。
系统分时任务激发时钟维护进程是由系统时钟(默认为TIMER0)作为时间基准(默认0.05s),通过维护各个进程的轮询周期时钟来提供其周期唤醒信号的进程。此外,还为各进程的延时等待提供时间基准。
4.传感器维护进程。
传感器维护进程的功能是周期更新检测传感器数据和状态,按照要求定时上汇检测传感器数据和状态,执行远程访问命令(调试、配置、检查、测试)。不同类型的传感器数据更新周期、数据计算方法、状态判断方法不同。
5.外部通信链路维护进程。
外部通信链路维护进程是设备对上进行数据交换和配置通信的唯一通信接口。实现报文上传下送、收发信号维护等功能,从而使相关进程从收发控制中解脱出来。为确保与上端通信连接,确定的时间间隔启动本子进程。
通过远程总线自动登录和登录状态维护,从RS232端口上向上以约定身份登录,定期检查登录状态,并在登录超时或错误退出后自动重建连接。
6.现场通信总线通信链路维护进程。
现场通信总线通信链路维护进程是设备同通过现场通信总线链路联接的各类型传感器达成通信的服务管理程序。自动发起同下联各传感器链路联接、传感器发现、注册、注销和状态维护,并将链路联接状况向相关进程报告。
通过现场总线对现场传感器进行参数配置、按照设定的时间间隔同各个检测传感器进行通信,采集数据、并对其工作状况进行监视。确定现场数据关联逻辑和算法,可在现场对各类检测传感装置和输出驱动进行有简单逻辑关系的连锁逻辑设置,实现控制功能。
(二)任务队列数据结构
任务需求循环链队列维护进程通过RTX51的任务消息触发相关进程,由于RTX51 Tiny操作系统短小精炼,任务调度仅支持单数据位消息机制,无法传递更多的参数,但是多任务处理设备的各个任务之间需要传递的参数信息比较多,采用任务队列和任务邮箱的方法,可以很方便的实现参数传递。
以设备实际功能为例,说明任务队列的工作方式。例如,更新单体传感器定时到,需求维护子进程将一个任务需求推入任务队列,并同时通过RTX51 Tiny发送一个系统消息给单体传感器维护进程;简单传感器维护进程收到系统消息后启动,并到任务队列中取出任务,打开任务邮箱,根据任务要求,更新单体传感器数据,并将更新资源镜像表的任务需求推入任务队列,并同时通过RTX51 Tiny发送一个系统消息给资源镜像表访问维护进程;资源镜像表访问维护进程收到系统消息后,到任务队列中取出任务,打开任务邮箱,将要更新的传感器数据写入资源镜像表。
任务队列是内存中的逻辑上首尾相接的数据队列。待执行的任务在任务队列中排队,单片机按照RTX51操作系统调度处理,处理完成的任务移除队列。任务队列数据结构定义如下:
struct Task_Loop_Queue {
unsigned int Queue_Head;
unsigned int Queue_Tail;
unsigned int Queue_Size;
struct Task_Queue_Member Member
[_Max_Task_Member ];
};
每个任务需求由任务ID、任务状态、访问类型、配属任务邮箱四段构成。任务状态表示任务未处理、处理中和处理结束;访问类型用来区分需要同一进程处理的不同类型的操作;任务邮箱是具体的任务需求。其数据结构如下:
struct Task_Queue_Member { unsigned char Task_ID;
unsigned char Task_State;
unsigned char Access_Type;
union Task_MailBox * ptMailBox;
/*任务会话邮箱指针*/
};
任务邮箱的定义概括了任务的各类信息和参数,每个任务利用任务邮箱交换信息。任务邮箱基本数据结构如下:
union Task_MailBox {
unsigned int Srouce_Task_ID;
/* 信件发送进程ID */
unsigned int Destination_Task_ID;
/* 信件接收进程ID */
unsigned char Length;
/* 邮箱内容实际长度 */
unsigned char Type;
/* 邮箱消息参数类型 */ union Dailogue_Contents Dailogue;
/* 邮箱消息参数 */
};
其中Dailogue_Contents消息参数用来传递各个任务之间需要交互的数据,根据传递参数的特点定义,由邮箱消息参数类型(Type)进行区别。例如前面例子中,简单传感器维护进程需要资源镜像表访问维护进程更新数据,那么简单传感器维护进程,将需要更新的简单传感器数据作为消息参数,传递给资源镜像表访问维护进程。消息参数可为简单传感器数据定义适合的数据结构。
四、结语
本文在实时操作系统RTX51基础上,按照多任务处理设备较为通用的功能需求,实现了任务规划以及管理任务执行、传递任务参数的任务队列,能够在简单、经济的硬件平台上实现相对丰富而强大的功能。本文介绍的方法稍加适应性设计即可适于多种应用。
参考文献:
[1]刘明路,王亮生,李世煜.基于RTX51的单片机软件设计[J].单片机与嵌入式系统应用,2005,3
[2]周程.RTX51 Tiny在核数据采集系统中的应用[J].核电子学与探测技术,2008,5,599-601
[3]刘光德,林莘,王群.基于RTX51嵌入式实时操作系统的智能称重仪表的研究[J].科技应用,2004,3,7-9
关键词:单片机;多任务;RTX51;任务队列
中图分类号:TP391文献标识码:A文章编号:1007-9599 (2010) 09-0000-02
The Multitask Processing Equipment Design Based on Real-time Operating System (RTOS) RTX51
Liu Rui
(North China Institute of Computing Technology,Beijing100083,China)
Abstract:The embedded and multitask processing equipments are widely used in the industrial control field.This thesis presents a implementation of design that is based on multitask RTOS RTX51 equipments.Especially it is a management system which adopts multitask programming and task queue in cooperating with RTX51 RTOS. It further improves the core capabilities of the equipment.This implementation can be used in various ways once making some small adjustments.
Keywords:SCM;Multitask;RTX51;Task queue
一、引言
基于嵌入式单片机系统的多任务处理设备在工业控制领域应用十分广泛,如现场数据采集、现场控制等等,在很多应用中需要并行执行多个任务,同时又要求设备在满足需求的基础上尽可能的经济耐用,采用MCS51内核系列单片机和能在其上运行的实时多任务操作系统RTX51实现该类设备是一个很好的解决方案。RTX51是美国Keil公司开发的一种小型的、应用于MCS51内核系列单片机的实时多任务操作系统,RTX51有完全(Full)和最小(Tiny)两种模式。Tiny模式短小精炼,完全集成在Keil C51编译器中,在不需要任何外部RAM的条件下,很容易地运行在8051系统上。比起其它小型操作系统来讲,RTX51 Tiny具有运行速度快、对硬件要求不高、使用方便灵活等优点,越来越广泛地应用到单片机的软件开发中。本文介绍的基于RTX51的多任务处理设备,是基于RTX51 Tiny操作系统,采用多任务规划和任务队列的方法,增强设备总体处理能力,这种设计方法丰富了RTX51 Tiny的功能,并且稍加适应性设计即可适用于多种应用。
二、多任务处理设备
多任务处理设备通过现场总线实现数据采集,采集到的数据经过单片机计算处理、存储,并通过外部总线上报,同时单片机还可以对采集到的数据进行计算判断,并按照预设算法驱动控制输出。数据采集现场总线可根据具体需求连接RS232、RS422、GPIO、SPI、CAN、I2C等,数据类型可以是各种总线连接的各类传感器数据,如烟雾传感器、红外对射检测装置、红外扰动检测等开关量传感器,下文简称单体传感器;温度、湿度、位移等简单数据量传感器,称为简单传感器;物品在位检测传感器等组合数据传感器,称为组合传感器。
多任务处理设备的数据采集、计算、存储、上报、控制输出等功能是并行工作的,如果采用传统的串行工作方式很难实现,因而采用基于RTX51操作系统,多任务规划和任务队列的方法,实现多任务处理设备的设计。
设备对硬件平台的要求不高,51系列单片机都适用,现场总线和上报总线形式可根据具体需求设计,硬件部分本文就不作详细介绍了,下面重点介绍设备软件设计。
三、软件设计
(一)多任务设计
软件设计要根据设备功能进行任务划分,设计信号处理和通信任务进程,包括系统资源镜像表访问维护进程、任务需求循环链队列维护进程、系统分时任务激发时钟维护进程、传感器维护进程、外部通信链路维护进程、现场通信总线通信链路维护进程。各个任务进程及与任务之间的通信相关进程关系如图1所示。
下面具体介绍每个进程的功能:
1.系统资源镜像表访问维护进程。
资源状态镜像表为每个传感器定义状态镜像,设定同各个检测传感器进行通信的时间间隔,并将其在设备内资源状态镜像表存储的状态信息进行更新维护。
系统资源镜像表访问维护进程是其它进程访问系统资源镜像表的统一接口。其它进程可以以统一或相近似的方式访问系统资源镜像表的内容;其中,按照各个传感器更新周期,发起更新需求的是传感器数据状态更新需求维护子进程,该子进程提供传感器数据状态更新需求,并将此更新需求推入任务队列中,以异步信号方式启动其它进程。
2.任务需求循环链队列维护进程。
任务需求循环链队列是逻辑上首尾相接的数据队列,各个进程将任务需求推入队列,维护进程负责任务需求处理,通过RTX51的任务消息触发相关进程。此队列长度以单片机能在设定周期内异步处理的通信访问任务最大处理能力来确定。在设定周期内未能完成全部推入的任务,队列头将被新的任务需求覆盖。
3.系统分时任务激发时钟维护进程。
系统分时任务激发时钟维护进程是由系统时钟(默认为TIMER0)作为时间基准(默认0.05s),通过维护各个进程的轮询周期时钟来提供其周期唤醒信号的进程。此外,还为各进程的延时等待提供时间基准。
4.传感器维护进程。
传感器维护进程的功能是周期更新检测传感器数据和状态,按照要求定时上汇检测传感器数据和状态,执行远程访问命令(调试、配置、检查、测试)。不同类型的传感器数据更新周期、数据计算方法、状态判断方法不同。
5.外部通信链路维护进程。
外部通信链路维护进程是设备对上进行数据交换和配置通信的唯一通信接口。实现报文上传下送、收发信号维护等功能,从而使相关进程从收发控制中解脱出来。为确保与上端通信连接,确定的时间间隔启动本子进程。
通过远程总线自动登录和登录状态维护,从RS232端口上向上以约定身份登录,定期检查登录状态,并在登录超时或错误退出后自动重建连接。
6.现场通信总线通信链路维护进程。
现场通信总线通信链路维护进程是设备同通过现场通信总线链路联接的各类型传感器达成通信的服务管理程序。自动发起同下联各传感器链路联接、传感器发现、注册、注销和状态维护,并将链路联接状况向相关进程报告。
通过现场总线对现场传感器进行参数配置、按照设定的时间间隔同各个检测传感器进行通信,采集数据、并对其工作状况进行监视。确定现场数据关联逻辑和算法,可在现场对各类检测传感装置和输出驱动进行有简单逻辑关系的连锁逻辑设置,实现控制功能。
(二)任务队列数据结构
任务需求循环链队列维护进程通过RTX51的任务消息触发相关进程,由于RTX51 Tiny操作系统短小精炼,任务调度仅支持单数据位消息机制,无法传递更多的参数,但是多任务处理设备的各个任务之间需要传递的参数信息比较多,采用任务队列和任务邮箱的方法,可以很方便的实现参数传递。
以设备实际功能为例,说明任务队列的工作方式。例如,更新单体传感器定时到,需求维护子进程将一个任务需求推入任务队列,并同时通过RTX51 Tiny发送一个系统消息给单体传感器维护进程;简单传感器维护进程收到系统消息后启动,并到任务队列中取出任务,打开任务邮箱,根据任务要求,更新单体传感器数据,并将更新资源镜像表的任务需求推入任务队列,并同时通过RTX51 Tiny发送一个系统消息给资源镜像表访问维护进程;资源镜像表访问维护进程收到系统消息后,到任务队列中取出任务,打开任务邮箱,将要更新的传感器数据写入资源镜像表。
任务队列是内存中的逻辑上首尾相接的数据队列。待执行的任务在任务队列中排队,单片机按照RTX51操作系统调度处理,处理完成的任务移除队列。任务队列数据结构定义如下:
struct Task_Loop_Queue {
unsigned int Queue_Head;
unsigned int Queue_Tail;
unsigned int Queue_Size;
struct Task_Queue_Member Member
[_Max_Task_Member ];
};
每个任务需求由任务ID、任务状态、访问类型、配属任务邮箱四段构成。任务状态表示任务未处理、处理中和处理结束;访问类型用来区分需要同一进程处理的不同类型的操作;任务邮箱是具体的任务需求。其数据结构如下:
struct Task_Queue_Member { unsigned char Task_ID;
unsigned char Task_State;
unsigned char Access_Type;
union Task_MailBox * ptMailBox;
/*任务会话邮箱指针*/
};
任务邮箱的定义概括了任务的各类信息和参数,每个任务利用任务邮箱交换信息。任务邮箱基本数据结构如下:
union Task_MailBox {
unsigned int Srouce_Task_ID;
/* 信件发送进程ID */
unsigned int Destination_Task_ID;
/* 信件接收进程ID */
unsigned char Length;
/* 邮箱内容实际长度 */
unsigned char Type;
/* 邮箱消息参数类型 */ union Dailogue_Contents Dailogue;
/* 邮箱消息参数 */
};
其中Dailogue_Contents消息参数用来传递各个任务之间需要交互的数据,根据传递参数的特点定义,由邮箱消息参数类型(Type)进行区别。例如前面例子中,简单传感器维护进程需要资源镜像表访问维护进程更新数据,那么简单传感器维护进程,将需要更新的简单传感器数据作为消息参数,传递给资源镜像表访问维护进程。消息参数可为简单传感器数据定义适合的数据结构。
四、结语
本文在实时操作系统RTX51基础上,按照多任务处理设备较为通用的功能需求,实现了任务规划以及管理任务执行、传递任务参数的任务队列,能够在简单、经济的硬件平台上实现相对丰富而强大的功能。本文介绍的方法稍加适应性设计即可适于多种应用。
参考文献:
[1]刘明路,王亮生,李世煜.基于RTX51的单片机软件设计[J].单片机与嵌入式系统应用,2005,3
[2]周程.RTX51 Tiny在核数据采集系统中的应用[J].核电子学与探测技术,2008,5,599-601
[3]刘光德,林莘,王群.基于RTX51嵌入式实时操作系统的智能称重仪表的研究[J].科技应用,2004,3,7-9