STC8位单片机天山x51实时多任务操作系统简介
天山x51实时多任务操作系统:===(以下简称TSx51-RTOS)V1.3 版是专门为STC8H系列单片机设计的RTOS,采用Keil的C51编译器。TSx51-RTOS由天山x51前后台多任务操作系统(TSx51-FBOS)、天山x51基本输入输出系统(TSx51-BIOS)和实时多任务调度系统(TSx51-CORE)三个部分组成。这三个部分全部集成在一个“TSx51_SYS_RTOS_V13_STC8H.LIB”库文件中。TSx51-RTOSV1.3版最多支持15个实时任务,本文范例是在STC实验箱V9.3上运行的,具有15个实时任务,实验箱采用了只有8KB的XDATA存储空间的STC8H8K64U单片机。一、实时多任务调度系统(TSx51-CORE)(1)天山x51实时多任务操作系统只包括实时任务调度核心,不包括通常RTOS系统用于协调各个任务的事件、信号量和邮箱等模块。这是基于以下原因:首先历史上的RTOS是基于操作系统运行环境设计的。在操作系统环境下,假定各个任务是不同的程序员编写的,并且每个程序员也不能看到和使用别的任务的源程序。因此各个用户任务之间是不能直接交互的,只能通过规定的管道、信号、邮箱等操作系统机制来交流数据和同步操作。但是TSx51-RTOS是运行在单片机裸机环境下,程序员在同时编写多个任务程序的时候掌握全部的编程资源,可以通过全局变量来实现各个任务数据的共享,来作为信号量同步程序运行。因此程序员可以依据自己的规范来实现那些RTOS的扩展功能,TSx51-RTOS只需提供任务调度核心模块即可满足编程要求。其次TSx51-RTOS的TCB采用了固定线性表(非链表)形式,它在通常的RTOS的TCB基础上增加了一个任务当前使用的设备表(DCB),各种中断和各种设备程序都可以直接操作TCB,以实现不同优先级任务对同一个设备排队、运行和互锁等操作。这种结构的TCB允许TSx51-RTOS采用各种方法来解决任务调度中的传统的死锁等问题,TSx51-RTOS只需提供任务调度核心模块即可满足编程要求。(2)下图为TSx51-RTOS的TCB表结构:其中有关设备的表项有3个,“Device; //任务使用设备”用来指定该任务使用的设备编号,一共可以支持255个设备。其余两个参数提供给任务与设备交互用。比如对于串口设备的读写操作,4字节的“DevData;// 任务数据”作为指针,指向要输入输出的数据存储地址,2字节的“DevPara;// 任务设备参数”指定要输入输出数据的字节数目。这两个设备参数在设备完成操作后,也可以返回结果数据,供任务使用。对设备使用这种数据地址指针与数据长度作为参数的方法,可以方便地实现各种设备通讯协议。
(3)TSx51-RTOS可以为各个任务设置不同大小的静态堆栈空间。对于8051架构的单片机而言,每个任务的任务堆栈大小不得低于300字节。这是因为TSx51-RTOS没有专门的核心任务堆栈,在执行任务调度程序时,使用的是当前用户任务的任务堆栈。下图为本范例的部分任务定义程序:作为范例程序,为简单计,上面所有任务都用采用同样大小400个字节,总共占用6738个字节的XDATA空间。
(4)作为范例程序,除了任务0外,其他14个实时任务都采用了相同的程序结构,下图为任务1的程序:在TSx51-RTOS中,实时任务是静态的(每个任务堆栈都是以公共变量数组的形式定义的),每个实时任务都包含一个无限主循环,不允许退出。RTOS程序中,最重要和最基础的功能就是第135行程序的“Sleep”休眠函数了。它实现两个功能,一个是让出CPU执行权,让任务调度程序把CPU执行权调度给当前优先级最高的就绪任务,二是休眠指定的时间(这里是3000毫秒)后,通知任务调度程序自己睡够了,可以开始执行下面的程序了。至于休眠结束的任务能不能被立即执行,要看该任务的优先级是不是当前所有就绪任务中最高的了。
本文范例运行效果的视频见附件。二、基本输入输出系统(TSx51-BIOS)(5)每个RTOS都有一个固定节拍的系统中断,每次中断时就检查当前就绪任务中的最高优先级任务,如果这个任务是当前正在执行的任务,那么就退出中断,不进行任务调度,如果不是,就将当前任务的执行现场保护起来,终止当前任务的执行,然后恢复最高优先级任务的执行现场,将CPU执行权移交给该任务执行,直到下一次任务调度来临。由于每个系统中断都要检查决定是否进行任务调度,所以系统中断的周期是衡量一个任务从就绪到被响应的等待时间的标准。因此平均而言,RTOS的任务响应时间是二分之一系统中断周期时间,这个时间也是衡量一个RTOS的实时性的重要指标。本文范例TSx51-RTOS的中断频率为1KHz,任务响应时间为0.5毫秒。(6)由于单片机程序可能涉及到多个中断,如果系统中断发生时已经有低级别的中断正在执行,即系统中断时中断是“嵌套”的,这时还要不要进行任务调度,这是个重要的任务调度策略问题。如果中断嵌套时允许任务调度,如果这时最高优先级的就绪任务不是当前任务,那么将CPU执行权切换后,被嵌套的上一个中断服务程序就得不到继续执行,对应的中断退出指令“RETI”得不到执行,CPU就会认为前一个中断没有退出,从硬件上阻止更低级别的中断发生。发生这种情况是很危险的,比如被嵌套的中断是定时控制机电设备运行的,如果这种中断得不到完整的执行,就可能产生严重事故。在最常见的RTOS中,uCOS II和RT-RThread在有中断嵌套时不允许进行任务调度,而FreeRTOS则在有中断嵌套时仍然允许进行任务调度。(7)为实现高可靠性的目标,TSx51-RTOS采用在有中断嵌套时不允许进行任务调度的策略,这可以保证每个中断服务程序得到完整的执行。为此在TSx51-BIOS模块中,对所有中断进行了管理,每个中断发生时就将中断嵌入计数加1,退出就将中断嵌入计数减1,只有中断嵌入计数为1时才进行任务调度。(8)在TSx51-BIOS中对所有中断进行管理还有两个优点,首先是所有中断的现场是一样的,用户可以使用中断任务调度功能在自己的中断程序中直接切换到新任务中去,不必等到下一次系统中断的来临,这可以达到10微秒量级的任务响应,真正实现“实时响应”。
其次是由于TSx51-RTOS接管了所有中断,因此可以将STC8单片机独有的中断现场保护起来。下图是TSx51-BIOS中的部分现场保护程序:图中可以看到TSx51-BIOS现场保护包含了STC单片机特有的XSFR开关寄存器和第二个数据指针寄存器。(9)临界区保护。统一的现场保护和有中断嵌入不进行任务调度策略保证了在中断过程中“P_SW2”和双数据指针操作的完整性,但是当多个实时任务同时调用这些寄存器时,任务切换也可能导致涉及它们的操作不能全部完成,产生不可预料的后果。为此TSx51-BIOS还提供了临界区保护接口函数“TSX51_BIOS_ENTER_CRITICAL()”和“TSX51_BIOS_EXIT_CRITICAL()”,可以用它们对涉及这些关键的全局变量进行操作的完整性保护。 三、天山x51前后台多任务操作系统(TSx51-FBOS)一个完整的操作系统不仅只有任务调度和中断处理两个部分,还应该包括对单片机基本设备的管理和支持,也还要包含各种其他设备的驱动程序。TSx51-FBOS分为时间系统、8051基本设备驱动程序和命令行驱动程序以及数码管驱动程序等部分,它们的功能如下:(10)定时任务模块。利用1KHz系统中断,产生1KHz、500Hz、40Hz和4Hz四个定时任务,产生各种节拍,协调整个RTOS系统的运行。由于有中断嵌套时不进行任务调度,系统中断使用优先级最低的定时器4。(11)系统时间模块。产生时、分、秒系统时间和相应的服务功能。(12)8051基本设备驱动程序。包括对8个IO端口、5个定时器和1个串口的设置程序。(13)命令行驱动程序。基于中断的串口1命令行通讯程序,采用定时器2为可变波特率发生器,留出可定义优先级的定时器1给用户使用,同时也可以与串口2共用波特率发生器。命令行通讯程序是专门为多任务系统设计的,在多个任务同时使用串口1时可以有效地避免出现死锁问题。(14)数码管驱动程序。数码管是一种有效的实时信息显示设备,每次刷新只需要几个微秒的时间,TSx51-FBOS同时集成了8位和4位两个系列的数码管驱动程序。数码管驱动程序采用了特殊设计,可以匹配各种实验箱和开发板的数码管设备。(15)杨家枪驱动程序。杨家枪工作站是一个上位机软件,包括了串口助手、文字显示、状态栏和绘图板等人机交互显示设备。单片机通过串口发送命令,可在上位机显示各种工作信息。 四、结束语
由于篇幅限制,本文只简略介绍了天山x51实时多任务操作系统组成与特点,以后将专题介绍TSx51-RTOS的编程方法和应用案例。
刚认真读了全文,应是 STC8H系列 实时性较强的 简单而高可靠的专用 O/S{:4_246:}
能提供更多的例程就好了。
另外,吐槽一下KEIL C51。在larger模式时只利用区区9byte工作寄存器。白白浪费了128字节的空间。让300迈的跑车只开出30公里的速度。 真是百花齐放啊
这个相比其他RTOS有什么优势嘛! 感谢分享
页:
[1]