固件和嵌入式软件之间的真正区别是什么

What is real difference between Firmware and Embedded Software

我正在寻找固件和嵌入式软件之间的真正区别。

网上写的是固件,固件是一种嵌入式软件,反之则不然。除了那个经典的 BIOS 示例之外,它非常古老。

它们都运行在非易失性存储器中。一个区别是嵌入式软件,例如具有 rtos 和文件系统的应用程序,并且可以 运行 在 RAM 上。

如果我不使用 rtos 和 RAM,只使用闪存,这意味着我的嵌入式软件是固件,这是真的吗?

是什么真正改变了它的内存布局。

网上的回答缺乏技术说明,不满意

非常感谢。

它们不是截然不同的事物,甚至也不是明确定义的。 固件软件 的子集;术语 通常 意味着它在只读存储器中:

  • 软件是指任何机器可执行代码 - 包括"firmware".
  • 固件是指软件在只读内存

此上下文中的只读存储器包括可重写存储器,例如闪存或 EPROM,它们需要特定的 erase/write 操作并且不是简单的随机访问可写。

RAM和ROM的区别执行其实并不是固件和软件的区别。出于性能原因,许多嵌入式系统从 ROM 加载可执行代码并从 RAM 执行,而其他系统则直接从 ROM 执行。相反,如果最终用户在没有特殊工具或引导加载程序的情况下不能轻易修改或替换软件,那么它可能会被视为 "firm"。另一方面,如果普通最终用户可以使用系统本身的工具修改、更新或替换软件(例如,通过从可移动媒体或网络复制文件),那么它是 not 固件。考虑操作上的差异,例如更新 PC 的 BIOS 和更新 Microsoft Office - 前者需要一个不同于正常操作系统服务的特殊程序来加载和 运行 软件。

例如,智能 phone 的操作系统、引导加载程序和 BIOS 可能被视为固件。用户从应用商店加载的应用肯定不是固件。

在其他上下文中,"firmware" 可能指的是可编程逻辑设备(例如 FPGA)的配置,而不是顺序执行的处理器指令。但这是一个相当小的区别,但在采用可编程逻辑和软件执行的系统中很有用。

最终,您会使用术语 "firmware" 来暗示系统中某种级别的 "permanence" 软件,但存在一个范围,因此您可以以任何有用的方式使用该术语您的特定系统的上下文。例如,我在一个所有代码都从闪存运行的系统上工作,所以只使用术语 software 来指代它,因为没有必要将它与任何其他类型区分开来系统中的软件数量。