在单片机中嵌入操作系统的利弊
西北工业大学民航学院王铁勇吴盘龙刘振宝
摘要:近年来,在单片机系统中嵌入操作系统已经成为人们越来越关注的话题。通过对一个开源的嵌入式实时操作系统μc/os-ii的分析,以51系列单片机为例,阐述了在单片机中使用该嵌入式操作系统的优缺点,以及在应用中应注意的一些问题。

导言
早在20世纪60年代,就有人开始研究和开发嵌入式操作系统。但是直到最近,它在中国被越来越多的提及,并且它在通信、电子、自动化和其他需要实时处理的领域中的重要性越来越受到关注。然而,人们经常谈论一些著名的业务核心,如vxworks、psos等。这些商用内核性能优越,但价格昂贵,主要用于16位和32位处理器。对于大多数国内用户使用的51系列8位单片机,您可以选择免费的μc/os-ii。

μc/OS-ii的特性
1.μ c/OS-ii是labrosse先生编写的一个开放内核,其主要特点是开放源代码。这对用户有好处也有坏处。一方面,它是免费的,另一方面,用户可以根据自己的需要修改它。缺点是缺乏必要的支持和强大的软件包,所以用户通常需要编写自己的驱动程序,特别是如果使用不常用的单片机,他们还必须编写自己的移植程序。

2.μ C/OS-II是一个抢占式内核,即准备好的高优先级任务可以剥夺正在运行的低优先级任务的cpu使用权。这一特性使其实时性能优于非抢占式内核。通常,我们在中断服务程序中将高优先级任务置于就绪状态(例如,信令),这样在退出中断服务程序后,任务将被切换,高优先级任务将被执行。以51单片机为例,通过比较可以发现这样做的好处。如果需要以中断方式采集和处理一批数据,传统的编程方法无法在中断服务程序中进行复杂的数据处理,因为这会使中断时间过长。因此,通常的方法是设置一个标志位,然后退出中断。由于主程序是循环执行的,所以它总是有机会检测到这个标志,并将其传送给数据处理程序。然而,由于无法确定中断发生时程序在何处执行,也无法判断数据处理程序执行需要多长时间,也无法确定中断响应时间,因此系统的实时性不强。如果使用μc/os-ii,只要数据处理程序的优先级设置得更高,并且在中断服务程序中进入就绪状态,数据处理程序将在中断后立即执行。这可以在一定程度上限制中断响应时间。这对于一些对中断响应时间有严格要求的系统来说是必要的。但是,应该指出,如果数据处理程序简单,这可能不合适。因为μc/os-ii要求在中断服务程序的末尾使用OS int函数来判断是否切换任务,所以需要一定的时间。

3.μ C/OS-II与众所周知的分时操作系统如linux不同,它不支持时间片轮换方法。μc/os-ii是一个基于优先级的实时操作系统,每个任务的优先级必须不同。通过分析其源代码,可以发现μc/os-ii使用任务的优先级作为任务的标识,如果优先级相同,则无法区分任务。进入就绪状态的优先级最高的任务首先获得使用cpu的权利,其他任务只有在放弃使用cpu的权利后才能执行。因此,它只能说是多任务,而不是多过程,至少不是大家熟悉的多过程。显然,如果只考虑实时性,它比时间系统更好,并且它可以确保重要的任务总是优先于cpu。然而,在系统中,重要的任务毕竟是有限的,这使得划分其他任务的优先级成为一个麻烦的问题。此外,用户交替执行一些任务更为有利。例如,当用单片机控制两个小显示屏时,程序员和用户肯定都希望它们同时工作,而不是先显示一个显示屏的信息,再显示另一个显示屏的信息。此时,μc/os-ii更适合支持优先级方法和时间片轮换方法。

4.μ C/OS-II为共享资源提供了一种保护机制。如上所述,μc/os-ii是一个支持多任务的操作系统。一个完整的程序可以分成几个任务,不同的任务执行不同的功能。这样,任务就相当于模块化设计中的一个子模块。向任务添加代码时,只要不是共享资源,就不必担心相互影响。对于共享资源(如串口),μc/os-ii也提供了一个很好的解决方案。通常,使用信号量的方法。简单地说,首先创建一个信号量并初始化它。当任务需要使用共享资源时,它必须首先申请信号量。一旦获得信号量,信号量将不会被释放,直到资源用完。在这个过程中,即使具有较高优先级的任务进入就绪状态,由于无法获得信号量,资源也无法使用。这个特性的优势是显而易见的。例如,当显示屏显示信息时,会产生外部中断,并且需要在中断服务程序的显示屏上显示其他信息。这样,在退出中断服务程序后,原始信息可能会被破坏。在μc/os-ii中使用信号量方法时,新信息只能在原始信息显示在显示屏上后才能显示,从而避免了这种现象。然而,采用这种方法是以牺牲系统的实时性能为代价的。如果显示原始信息需要很长时间,系统将不得不等待。从结果来看,这等于延长了中断响应时间,这对于未显示的信息是报警信息的情况无疑是致命的。这种情况在μc/os-ii中称为优先级反转,即高优先级任务必须等待低优先级任务完成。在上述情况下,两个任务之间不可避免地会发生优先级反转。因此,在使用μc/os-ii时,我们必须清楚地了解开发的系统,然后才能决定是否对某些共享资源使用信号量。

μc/OS-ii在单片机使用中的一些特点
1。在单片机系统中嵌入μ C/OS-II可以提高系统的可靠性,简化调试程序。过去,在传统的单片机开发中,程序经常会失控或陷入无限循环。看门狗可以用来解决程序失控的问题,但在后一种情况下,特别是当涉及复杂的数学计算时,只设置断点,这需要大量时间来缓慢分析。如果μc/os-ii嵌入系统,事情会简单得多。整个程序可以分成许多任务,每个任务相对独立,然后在每个任务中设置一个超时功能。时间用完后,任务必须移交cpu的使用权。即使一个任务有问题,也不会影响其他任务的运行。这不仅提高了系统的可靠性,而且使程序调试变得容易。

2.在单片机系统中嵌入μc/os-ii会增加系统开销。现在使用的51单片机一般指87c51或89c51,其芯片有一定量的ram和rom。对于一些简单的程序,如果采用传统的编程方法,就不需要扩展内存。如果在其中嵌入μc/os-ii,当只需要任务调度、任务切换、信号量处理、延迟或超时服务时,不需要扩展rom,但有必要扩展ram。由于μc/os-ii是一个可以削减的操作系统,它需要的ram大小取决于操作系统的功能。例如,μc/os-ii允许用户定义最大任务数。因为每个任务都会被创建,所以会生成一个相应的数据结构tcb,这占用了大部分内存空.因此,在定义最大任务数时,我们必须考虑实际情况的需要。如果设置得太大,将不可避免地导致不必要的浪费。嵌入μc/os-ii后,总ram需求可通过以下表达式获得:

总ram需求=应用程序的ram需求+内核数据区的ram需求+(任务堆栈需求+最大中断嵌套堆栈需求)任务数量
幸运的是,μc/os-ii可以为每个任务定义堆栈空的大小,开发人员可以根据任务的实际需求进行堆栈,/但是,在ram容量有限的情况下,我们应该注意大型数组、数据结构和函数的使用。不要忘记,函数的参数也应该被推入堆栈。

3.μ C/OS-II的移植也是一项值得关注的工作。如果没有现成的移植实例,您必须编写自己的移植代码。虽然只需要修改两个文件,但仍然需要熟悉相应的微处理器,最好参考已有的移植实例。此外,即使有移植的例子,最好在编程之前阅读它,因为它涉及堆栈操作。编写中断服务程序时,将寄存器推入堆栈的顺序必须与移植代码中的顺序一致。

4.与其他一些著名的嵌入式操作系统不同,μc/os-ii在单片机系统中的启动过程相对简单。与某些操作系统不同,有必要将内核编译成一个映像文件,并将其写入rom。上电复位后,文件从rom加载到ram中,然后运行应用程序。μc/os-ii的内核与应用程序一起编译成一个文件。用户只需要将这个文件转换成十六进制格式,并将其写入只读存储器。开机后,它将像普通的单片机程序一样运行。

结论
从以上介绍可以看出,μc/os-ii具有免费、易用、可靠性高、实时性好等优点,但也存在移植困难、缺乏必要的技术支持等缺点,尤其是没有像商用嵌入式系统那样得到广泛应用和不断研究更新。然而,开放性允许开发人员自己剪切和添加所需的功能,这在许多应用领域发挥着独特的作用。当然,是否在单片机系统中嵌入μc/os-ii取决于开发的项目。对于一些简单和低成本的项目,没有必要使用嵌入式操作系统。

参考文献
1邵蓓蓓译。μc/os-ii开放式实时嵌入式操作系统。
中国电力出版社
2。μC/OS-iitheretime内核
今天的电子产品
上一篇:智能超声波探伤仪
下一篇:适应实时多任务的微控制器高效指
标题:在单片机中嵌入操作系统的利弊 地址:http://www.zgshouguang.cn/article/6628.html
