作为嵌入式开发人员,在网上搜索"嵌入式软件定义"、"什么是嵌入式软件?"或者嵌入式软件的定义,你会发现许多文章陈述了如下内容:
"嵌入式软件是计算机软件,用于控制通常不被认为是计算机的机器或设备,通常称为嵌入式系统。它通常专用于运行它的特定硬件,并且有时间和内存限制。"
"嵌入式软件是一种嵌入在硬件或非PC设备中的软件。它是专门为运行它的特定硬件编写的,由于设备的计算能力有限,通常会受到处理和内存的限制。"
这些定义模糊地抓住了嵌入式软件的概念,但是它们没有告诉我们它是什么!
什么是嵌入式软件?
嵌入式软件是设计和构建为运行在专门的、应用特定的硬件上的代码,该硬件通过各种形式的输入、处理、输出和存储来管理数据。嵌入式软件通常是确定性的,有软、硬实时调度期限。
对嵌入式开发人员来说,上述定义更接近嵌入式软件和固件*用来描述嵌入式软件的定义。请注意,定义的*部分类似于一般定义:
嵌入式软件是设计和构建为在专门的、特定于应用的硬件上运行的代码
然而,定义中的关键差异出现在这句话的第二部分:
"通过各种形式的输入、处理、输出和存储来管理数据."
两个基本原则可以区分成功和不成功的设计。通过明确讨论数据,这两个原则在上面的嵌入式软件定义中得到了强调。让我们快速探讨一下这两个原则。
原则1——数据决定设计
*个原则是"数据决定设计"。嵌入式软件开发人员经常被硬件、事件、状态和其他干扰所困扰。
每个嵌入式软件设计的核心都是数据。数据才是嵌入式软件真正的意义所在。甚至可以更进一步说,嵌入式系统就是关于数据的。每个系统都有输入,这些输入经过处理后产生期望的输出。这些输入和输出通常以某种易失性或非易失性的方式存储。如果嵌入式开发人员遵循这些数据,设计将会到位。
原则2——没有硬件(只有数据)
直接源于我们嵌入式软件定义的第二个原则是,没有硬件,只有数据。现在可能会认为这是没有意义的。然而,我们定义中的*句话指出:
嵌入式软件是设计和构建为在专门的、特定于应用的硬件上运行的代码。
这里说,它是为硬件设计的!用这种方式来表达这个定义,因为大多数嵌入式软件设计师还没有准备好放弃这个定义。现代成功的嵌入式软件开发*编写的软件是独立于硬件的。对硬件进行抽象,以消除硬件依赖性并将硬件从应用程序代码中分离出来。
硬件只是作为检索、输出和存储数据的路径。因此,LED应用不应直接访问GPIO线路。相反,LED应用程序应该获取表示LED的数据对象。然后,对数据进行处理,并在适当的时间传递给特定于硬件的例程,这些例程知道如何将LED对象映射到硬件并将其设置为正确的状态。
仅仅根据数据来设计和构建嵌入式软件是一个非常现代的概念,团队应该充分利用这个概念。
嵌入式软件定义结论
嵌入式软件是为确定性运行而设计和构建的代码,通常具有实时截止期,通过各种形式的输入、处理、输出和存储来管理数据。
我们在今天的帖子中已经看到,通常用来描述嵌入式软件的定义是不恰当的。这些定义没有触及嵌入式系统的核心,也没有触及我们在设计它们时应该关注的问题。然而,我们已经成功地澄清了事实,并为嵌入式软件提供了几个现代定义。我们还定义了几个原则,嵌入式开发人员可以用来改进自己的嵌入式软件设计。