我已经为PIC和x86处理器编写了大量裸机代码。有人可以告诉我如何以及何时需要操作系统吗?相反,在没有操作系统的情况下也可以处理哪些应用程序或情况?
我已经为PIC和x86处理器编写了大量裸机代码。有人可以告诉我如何以及何时需要操作系统吗?相反,在没有操作系统的情况下也可以处理哪些应用程序或情况?
Answers:
我的经验法则是,如果产品需要以下一项或多项功能,则应考虑使用操作系统:TCP / IP堆栈(或其他复杂的网络堆栈),复杂的GUI(可能带有窗口和事件之类的GUI对象) )或文件系统。
如果您已经完成了一些裸机编码,那么您可能已经熟悉超级循环程序架构。如果产品的固件要求非常简单,可以通过可维护的超级循环来实现(并希望可以进行某种程度的扩展),则您可能不需要操作系统。
随着软件需求的增加,超级循环变得越来越复杂。当软件需求如此之多,以至于超级循环变得过于复杂或无法满足系统的实时需求时,就该考虑另一种架构了。
RTOS体系结构允许您将软件需求划分为任务。如果做得正确,这将简化每个任务的执行。通过任务优先级,RTOS可以更轻松地满足实时要求。但是,RTOS不是万能的。RTOS会增加整个系统的复杂性,并使您容易遇到新型错误(例如死锁)。作为RTOS的替代方案,您可以考虑使用基于事件的状态机体系结构(例如QP)。
如果您的产品具有网络,复杂的GUI和文件系统,那么您可能正在考虑使用功能齐全的操作系统,例如VxWorks,Windows或Linux。功能齐全的操作系统将包括用于底层细节的驱动程序,并使您可以专注于应用程序。
这实际上取决于您对“嵌入式系统”的定义。可能有人会声称,如果它不是裸机编程,那么它就不是嵌入式的(这排除了您的问题),但是我不同意这一点-我认为任何旨在执行一项功能的系统,即,仅运行一个特定的“应用程序”,可以称为嵌入式系统。
也就是说,应该很容易想象会从全面运行的OS的服务中受益的情况。例如,在我工作的地方,人们经常在运行于Windows之上的仪器设计套件之上构建测试设备。这些系统被配置为引导到测试站配置并锁定一般用法(以防止站损坏),因此可以说是嵌入式系统。
但是,仅购买现成的I / O模块,将其插入机架式PC并在GUI中修改配置可能无法被某些人视为嵌入式系统设计。对于较不常见的情况,请考虑使用带有FPGA的自定义过程控制器,您要对其进行一些精美的数据记录。您可能会嵌入软核处理器系统(具有现有的BSP)并运行实时linux,以便运行网络堆栈(用于日志记录和NTP等),并进行逻辑上的所有其他操作。
我(非常模糊)的经验法则是,如果您需要多个控制线程(例如至少一个涉及协议或状态机的设备以及其他需要执行的操作),那么某些OSish软件将使您的生活更轻松
switch
基于状态的机器的努力超过了这些,否则基于机器的状态switch
会变得更好。此外,在8x51和TMS2000平台上,我都实现了一个简单的基于堆栈的协作任务切换器。无需操作系统逻辑来决定何时切换-每当一个“线程”认为可能需要休息一下,便会切换到另一个。如果该其他线程看到尚未等待的内容尚未发生,则它可以在比普通OS决定是否进行切换所花费的时间短的时间内切换回第一个。