导言
早在20世纪60年代,就现已有人开端研讨和开发嵌入式操作体系。但直到最近,它才在国内被越来越多的提及,在通讯、电子、自动化等需求实时处理的范畴所曰益闪现的重要性招引了人们越来越多的留意力。可是,人们所议论的往往是一些闻名的商业内核,比方VxWorks、PSOS等。这些商业内核性能优越,但价格昂贵,首要用于16位和32位处理器中,针对国内大部分用户运用的51系列8位单片机,能够挑选免费的ucos ii。
ucos ii的特色
1.ucos ii是由Labrosse先生编写的一个开放式内核,最首要的特色便是源码揭露。这一点关于用户来说可谓利害参半,长处在于,一方面它是免费的,另一方面用户能够依据自己的需求对它进行修正。缺陷在于它缺少必要的支撑,没有功用强大的软件包,用户一般需求自己编写驱动程序,特别是假设用户运用的是不太常用的单片机,还有必要自己编写移植程序。
2.ucos ii是一个占先式的内核,即现已准备安排妥当的高优先级使命能够掠夺正在运转的低优先级使命的CPU运用权。这个特色使得它的实时性比非占先式的内核要好。一般咱们都是在中止服务程序中使高优先级使命进入安排妥当态(例如发信号),这样退出中止服务程序后,将进行使命切换,高优先级使命将被履行。拿51单片机为例,比较一下就能够发现这样做的长处。假设需求用中止办法收集一批数据并进行处理,在传统的编程办法中不能在中止服务程序中进行杂乱的数据处理,由于这会使得关中止时刻过长。所以常常选用的办法是置一标志位,然后退出中止。由于主程序是循环履行的,所以它总有时机检测到这一标志并转到数据处理程序中去。可是由于无法确认发生中止时程序究竟履行到了什么地方,也就无法判别要通过多长时刻数据处理程序才会履行,中止呼应时刻无法确认,体系的实时性不强。假设运用μC/OS-II的话,只需把数据处理程序的优先级设定得高一些,并在中止服务程序中使它进入安排妥当态,中止结束后数据处理程序就会被当即履行。这样能够把中止呼应时刻约束在必定的范围内。关于一些对中止呼应时刻有严格要求的体系,这是必不可少的。但应该指出的是假设数据处理程序简略,这样做就未必适宜。由于ucos ii要求在中止服务程序结尾运用OSINTEXIT函数以判别是否进行使命切换,这需求花费必定的时刻。
3.ucos ii和咱们所熟知的Linux等分时操作体系不同,它不支撑时刻片轮转法。ucos ii是一个根据优先级的实时操作体系,每个使命的优先级有必要不同,剖析它的源码会发现,ucos ii把使命的优先级作为使命的标识来运用,假设优先级相同,使命将无法区别。进入安排妥当态的优先级最高的使命首要得到CPU的运用权,只需等它交出CPU的运用权后,其他使命才干够被履行。所以它只能说是多使命,不能说是多进程,至少不是咱们所了解的那种多进程。清楚明了,假设只考虑实时性,它当然比分时体系好,它能够确保重要使命总是优显患有CPU。可是在体系中,重要使命毕竟是有限的,这就使得区分其他使命的优先权变成了一个让人费心的问题。别的,有些使命替换履行反而对用户更有利。例如,用单片机操控两小块显现屏时,无论是编程者仍是运用者必定期望它们一同作业,而不是显现完一块显现屏的信息今后再显现另一块显现屏的信息。这时分,要是ucos ii即支撑优先级法又支撑时刻片轮转法就更适宜了。
4.ucos ii对共享资源供给了维护机制。正如上文所说到的,ucos ii是一个支撑多使命的操作体系。一个完好的程序能够区分红几个使命,不同的使命履行不同的功用。这样,一个使命就相当于模块化规划中的一个子模块。在使命中增加代码时,只需不是共享资源就不用忧虑相互之间有影响。而关于共享资源(比方串口),ucos ii也供给了很好的处理办法。一般状况下运用的是信号量的办法。简略地说,先创立一个信号量并对它进行初始化。当一个使命需求运用一个共享资源时,它有必要先请求得到这个信号量,而一旦得到了此信号量,那就只需等运用完了该资源,信号量才会被开释。在这个进程中即便有优先权更高的使命进入了安排妥当态,由于无法得到此信号量,也不能运用该资源。这个特色的长处清楚明了,例如当显现屏正在显现信息的时分,外部发生了一个中止,而在中止服务程序中需求显现屏显现其他信息。这样,退出中止服务程序后,原有的信息就可能被破坏了。而在μC/OS-II中选用信号量的办法时,只需显现屏把原有信息显现结束后才干够显现新信息,然后能够防止这个现象。不过,选用这种办法是以献身体系的实时性为价值的。假设显现原有信息需求消耗很多时刻,体系只好等候。从成果上看,等于延长了中止呼应时刻,这关于未显现信息是报警信息的状况,无疑是丧命的。发生这种状况,在μC/OS-II中称为优先级回转,便是高优先级使命有必要等候低优先级使命的完结。在上述状况下,在两个使命之间发生优先级回转是无法防止的。所以在运用ucos ii时,有必要对所开发的体系了解清楚,才干决议关于某种共享资源是否运用信号量。
ucos ii在单片机运用中的一些特色
1.在单片机体系中嵌入ucos ii将增强体系的可靠性,并使得调试程序变得简略。以往传统的单片机开发作业中常常遇到程序跑飞或是堕入死循环。能够用看门狗处理程序跑飞问题,而关于后一种状况,特别是其间牵扯到杂乱数学核算的话,只需设置断点,消耗很多时刻来渐渐剖析。假设在体系中嵌入 ucos ii的话,作业就简略多了。能够把整个程序分红许多使命,每个使命相对独立,然后在每个使命中设置超时函数,时刻用完今后,使命有必要交出 CPU的运用权。即便一个使命发生问题,也不会影响其他使命的运转。这样既提高了体系的可靠性,一同也使得调试程序变得简略。
2.在单片机体系中嵌入ucos ii将增加体系的开支。现在所运用的51单片机,一般是指87C51或许89C51,其片内都带有必定的RAM和 ROM。关于一些简略的程序,假设选用传统的编程办法,现已不需求外扩存储器了。假设在其间嵌入ucos ii的话,在只需求运用使命调度、使命切换、信号量处理、延时或超时服务的状况下,也不需求外扩ROM了,可是外扩RAM是有必要的。由于ucos ii是可削减的操作体系,其所需求的RAM巨细就取决于操作体系功用的多少。举例来说,μC/OS-II答应用户界说最大使命数。由于每树立一个使命,都要发生一个与之相对应的数据结构TCB,该数据结构要占用很大一部分内存空间。所以在界说最大使命数时,必定要考虑实践状况的需求。假设定得过大,势必会形成不用要的糟蹋。嵌入ucos ii今后,总的RAM需求能够由如下表达式得出:
RAM总需求=应用程序的RAM需求+内核数据区的RAM需求+(使命栈需求+最大中止嵌套栈需求)·使命数
所幸的是,μC/OS-II能够对每个使命别离界说仓库空间的巨细,开发人员可依据使命的实践需求来进行栈空间的分配。但在RAM容量有限的状况下,仍是应该留意一下对大型数组、数据结构和函数的运用,别忘了,函数的形参也是要推入仓库的。
3.ucos ii的移植也是一件需求值得留意的作业。假设没有现成的移植实例的话,就有必要自己来编写移植代码。尽管只需求改动两个文件,但仍需求对相应的微处理器比较了解才行,最好参照已有的移植实例。别的,即便有移植实例,在编程前最好也要阅览一下,由于里边牵扯到仓库操作。在编写中止服务程序时,把寄存器推入仓库的次序有必要与移植代码中的次序相对应。
4.和其他一些闻名的嵌入式操作体系不同,ucos ii在单片机体系中的发动进程比较简略,不像有些操作体系那样,需求把内核编译成一个映像文件写入ROM中,上电复位后,再从ROM中把文件加载到RAM中去,然后再运转应用程序。ucos ii的内核是和应用程序放在一同编译成一个文件的,运用者只需求把这个文件转换成HEX格局,写入ROM中就能够了,上电后,会像一般的单片机程序相同运转。
结语
由以上介绍能够看出,ucos ii具有免费、运用简略、可靠性高、实时性好等长处,但也有移植困难、缺少必要的技术支撑等缺陷,特别不像商用嵌入式体系那样得到广泛运用和继续的研讨更新。但开放性又使得开发人员能够自行削减和增加所需的功用,在许多应用范畴发挥着共同的效果。当然,是否在单片机体系中嵌入ucos ii应视所开发的项目而定,关于一些简略的、低成本的项目来说,就没必要运用嵌入式操作体系了。