What is Embedded?
The term "embedded" is used by different people to mean different things, from 8-bit microcontrollers with a couple of IO pins and a few bytes of RAM all the way up to application processors in smart phones with access to multiple gigabytes of RAM.
In his Meeting Cpp 2017 Keynote, Wouter van Ooijen attempted to classify the range of applications that are called embedded. I've taken a few screenshots below which illustrate how wide the spread is between applications in this space.
Until the last few years, there was a clear distinction between the processing power available in a small handheld or fixed-function appliance and the CPUs used in general purpose computers and servers. However, the availability of 32-bit ARM processors has blurred this line from both sides - appliances can use low cost Cortex M series microcontrollers whilst smartphones and tablets have comparable power to desktops by using Cortex A series microprocessors with off-chip storage.
"Deeply embedded systems are single-purpose devices that detect something in the environment, perform a basic level of processing, and then do something with the results" (ElectronicDesign.com).
Niall Cooling says that the difference is that in deeply embedded systems, the
main() function never returns
there isn't really a system that calls it and expects a return value.
I would put it this way: deeply embedded systems may be multi-tasking but they are not multi-user and do not run multiple user-installable applications on general purpose operating systems. This leads to a technical difference in the processor architecture because full OSes require MMUs for process isolation. Often, deeply embedded systems have a hard real time requirement.