2

I am searching real difference between firmware and embedded software.

On the internet it is written for firmware is firmware is a type of embedded software but not vice versa. In addition to that a classic BIOS example it is very old.

They both run in non-volatile memory. One difference is Embedded software like an application programming that has an rtos and file system and can be run on RAM.

If i dont use rtos and RAM and only uses flash memory it means my embedded software is a firmware, it is true?

What actually makes real difference its memory layout.

The answers on the internet are lack of technical explanations and not satisfied.

Thank you very much.

Nazim
  • 406
  • 1
  • 6
  • 20
  • There is no formal definition for these terms. Firmware typically just means something that's stored in NVM, making it "firm". – Lundin Dec 10 '19 at 07:29
  • Yes, you are right but all embedded software including firmware uses NVM some of them uses eeprom and some of them uses flash memory. ıt is really diffucult to understand they a hierarchy like this: Hardware->Firmware->Embedded Software – Nazim Dec 10 '19 at 07:35
  • I think the different terms appeared in items where there are several layers. A phone for example, will have apps + OS but also tons of firmware drivers handling radio transmission, memories, screen + touch and so on. – Lundin Dec 10 '19 at 07:39
  • Thank you it is concrete example, then may I say an Embedded system consists of both firmware and also high level software. In firmware view, it is consider very low level task, like signal handling processor within its tiny eeprom? Well with that respect the firmware has a federated structure or a part of integrated structure by means of your example. – Nazim Dec 10 '19 at 08:13
  • No, embedded system does not necessarily consist of both. It could just be firmware ie bare metal. Terms like these aren't important. – Lundin Dec 10 '19 at 13:37
  • System level and application level are an aspect of software architecture not one of firmware vs software. They are different concepts. Your system code (such as RTOS, device drivers, bootloader) and application code could all be "firmware". Things are seldom one thing or another. Firmware is just a matter of how the code is stored on a system and who can replace/modify/update it and the tools required to do that. It is not about its _function_. – Clifford Dec 11 '19 at 10:48

1 Answers1

3

They are not distinctly separate things, or even well defined. Firmware is a subset of software; the term typically implies that it is in read-only memory:

  • Software refers to any machine executable code - including "firmware".
  • Firmware refers to software in read-only memory

Read-only memory in this context includes re-writable memory such as flash or EPROM that requires a specific erase/write operation and is not simply random-access writable.

The distinction between RAM and ROM execution is not really a distinction between firmware and software. Many embedded systems load executable code from ROM and execute from RAM for performance reasons, while others execute directly from ROM. Rather if the end-user cannot easily modify or replace the software without special tools or a bootloader, then it might be regarded as "firm". If on the other hand a normal end-user can modify, update or replace the software using facilities on the system itself (by copying a file from removable media or network for example), then it is not firmware. Consider the difference in operation for example in updating your PC's BIOS and updating Microsoft Office - the former requires a special procedure distinct from normal operating system services for loading and running software.

For example, the operating system, bootloader and BIOS of a smart phone might be considered firmware. The apps a user loads from an app-store are certainly not firmware.

In other contexts "firmware" might refer to the configuration of a programmable logic device such as an FPGA as opposed to sequentially executed processor instructions. But that is rather a niche distinction, but useful in systems employing both programmable logic and software execution.

Ultimately you would use the term "firmware" to imply some level of "permanence" of software in a system, but there is a spectrum, so you would use the term in whatever manner is useful in the context of your particular system. For example, I am working on a system where all the code runs from flash, so only ever use the term software to refer to it because there is no need to distinguish it from any other kind of software in the system.

Clifford
  • 88,407
  • 13
  • 85
  • 165