12.4.1 操作系统
构成无线传感器操作系统(OS)的软件为上层中间件和应用程序层提供了系统管理功能和硬件接口。应该注意的是,由于每个节点上的内存和计算能力有限,无线节点上的操作系统与消费类PC上(例如,Windows、Mac OS和Linux)的操作系统明显不同。操作系统任务调度器的设计或选择需要仔细考虑,该软件根据优先级和时间确定任务何时执行。由于在任何给定时刻只有一个任务可以在处理器上运行,因此操作系统必须能够通过将抢占任务的当前状态移动到临时内存中并为抢占任务分配资源,尽快抢占任务(即中断低优先级任务以允许高优先级任务完成)。此功能允许微控制器立即为高优先级应用程序提供服务,即使低优先级应用程序仍在运行。然而,任务抢占会导致死锁和任务优先级反转等系统故障。前者导致处理器“冻结”,可以通过中概述的策略来缓解Coffman等人。(1971)后者导致美国宇航局火星探路者号宇宙飞船的失败;幸运的是,通过远程系统升级发现并修复了该错误(里夫斯,1998年).
强大的任务调度程序和执行远程系统升级的能力只是嵌入式操作系统应该包含的众多功能中的两个。操作系统应尽可能节省内存,因为与PC等大型计算系统相比,无线传感器节点设计中通常使用的微控制器内存有限。正如硬件设计一样,软件设计必须始终考虑功耗。队列中的所有任务完成后,处理器应进入低功耗空闲或睡眠状态,并在中断发生时再次唤醒。操作系统通常由WSN设计者选择而非设计。因此,操作系统应该有很好的文档记录,并且WSN设计者可以很容易地实现和/或开发中间件和应用程序层。除了文档化良好的应用程序编程接口(API)外,如果操作系统具有用于各种目标处理器的硬件抽象层(HAL)、强大的社区用户基础、可靠的专业支持以及用流行编程语言编写应用程序的能力,则固件开发时间将缩短(例如.,C/C++)。
嵌入式系统的普遍性导致了各种嵌入式操作系统的开发。由于对测量采样和无线电传输等外部事件的几乎瞬时响应对于无线传感器来说至关重要,因此实时操作系统(RTOS)已成为无线传感器的主流。RTOS可以在指定的时间限制内保证某些功能,并应自主处理常见的系统故障。自由RTOS(Real Time Engineers Ltd,2012年)和Micrium RTOS(Micrium公司,2012年)是免费提供的开源RTOS,允许用户修改源代码,并已在WSN中流行。例如,上述Xnode无线传感器平台采用FreeRTOS作为其嵌入式操作系统(Fu等人。,2016). 商业RTOS,如Keil RTX(ARM有限公司,2020)(用于ARM处理器)和Wind River VxWorks(Wind River Inc,2020年)广泛应用于工业,并提供专业支持和更丰富、更健壮的特征集。所有这些嵌入式RTOS都是多线程的。虽然不被视为RTOS,但TinyOS(TinyOS联盟,2020年)是专门为WSN开发的,并且是使用nesC编程语言(C的派生语言)进行唯一编程的。当使用非RTOS时,必须格外小心,以确保数据采集在整个网络中同步,并且以最小的抖动执行时间关键任务(例如,与结构励磁反馈控制相关的中断(即,从任务应该执行到实际执行之间的少量延迟)。这些问题已经通过定义良好的中间件解决了(Nagayama、Spencer和Rice,2009年)在运行TinyOS的iMote 2传感器中(Park等人。,2010;Rice&Spencer,2008年;Nagayama等人。,2007). 不幸的是,TinyOS不是多线程的,这是另一个限制。
通常与开源或商业RTOS相关的复杂性、费用和内存需求并不总是必需的。许多无线传感器节点已成功使用定制开发的简单中断状态机;这种方法简化了软件开发,同时允许节点设计者精确地计时事件发生的时间,从而提供实时服务。此策略已成功应用于那罗达无线传感器,低功耗8位微控制器,仅128个 外部存储器的kB(Swartz等人。,2005)与iMote 2.0上64位处理器相比 运行TinyOS的MB内存(Crossbow Technology,2012年). 状态机策略也可以通过中断进行适当设计,以便嵌入式固件能够有效地进行多线程处理,同时仍然能够进行实时操作。