I've started learning about embedded coding. The words 'firmware' and 'software' are a bit ambiguous to me still. My understanding is that software is high level language tailored for user interaction, loaded into the CPU and modified frequently; whereas firmware is low level language, modified infrequently and loaded into a microcontroller for direct hardware control? What are the differences in terms of speed, timers, memory, peripherals, compiler, debugging etc.?
In my industry, aerospace/defense, code written for a processor of any sort is considered software and has to follow a rigorous SW development process. This is irrespective of the complexity or size of the software product (1,000 SLOC or 1,000,000), and irrespective of what it executes on (uC, uP, SBC, etc).
FPGA/ASIC designs, since they are almost always done with a language such as VHDL or Verilog, are now considered to be firmware. I don't necessarily agree with this, but it is what it is. And as firmware, these designs have to follow many of the same processes that formal deliverable software has to follow. This is true even though as of today all FPGA and ASIC designs are done in our hardware group, and not by our software folks.
Back in the early days of FPGAs, that was not the case. I remember designers using the Xilinx PIP editor to program the early Xilinx devices, and I used schematic based tools to do some FPGA designs way back when. Those designs were never considered firmware, as they were more akin to a board level schematic-based design flow. The morphing of FPGA designs into the firmware lexicon happened over time as language based tools took over design task.
The Jargon File is as close to a reference as we have, it has even been cited by major English dictionaries as a a definitive reference for technical lexicology.
Firmware is a type of software, the distinction usually applies at the level at which the information is stored and updated. There are no special techniques to develop one vs the other, it depends on the project scope and definition and all software technologies should be considered in scope until you eliminate them .
Firmware: Embedded software contained in EPROM or flash memory. It isn't quite hardware, but at least doesn't have to be loaded from a disk like regular software. Hacker usage differs from straight techspeak in that hackers don't normally apply it to stuff that you can't possibly get at, such as the program that runs a pocket calculator. Instead, it implies that the firmware could be changed, even if doing so would mean opening a box and plugging in a new chip. A computer's BIOS is the classic example, although nowadays there is firmware in disk controllers, modems, video cards and even CD-ROM drives.
fun fact, in firefighting and rescue, software refers to the webbing and rope materials vs hardware the metal carabiners and other hard pieces :) context matters.
I encourage you , Your organization, project, or team developing complex software to identify to your own satisfaction how you want to handle the hardware layer and a distinction if any between firmware and software to you
In the past, Firmware has had several different definitions, but today the most common one is that it is the code loaded into a FPGA device to define its internal configuration (i.e., what it appears to be structurally) rather than code that is executed by a microprocessor.
Firmware is the software for embedded systems Software is meant for Windows or Linux or FreeBSD
Back in the 80', directly from Wikipedia:
Ascher Opler coined the term "firmware" in a 1967 Datamation article. Originally, it meant the contents of a writable control store (a small specialized high-speed memory), containing microcode that defined and implemented the computer's instruction set, and that could be reloaded to specialize or modify the instructions that the central processing unit (CPU) could execute.
Firmware was the microcode executed by CPU's and it was stored in a non-volatile memory.
Software was meant for PC's and MAC