Embedded System Characteristics
The only way to eliminate (software) system instability is to attach it
at its roots. That is to say we must eliminate the design and coding
practices (however entrenched) which subvert system stability.
The direct or indirect use of general purpose dynamic memory allocation
schemes are a primary enemy to systems which must execute indefinitely.
While general purpose dynamic memory allocation has its place in
processes that are finite by design (e.g. compilers and other commands
which run to completion within their own process memory space), these
techniques have no place in systems whose requirements include
indefinite (by design) execution times. This includes, but is not
limited to most (but not all) embedded systems.
Here I limit my definition of an embedded system to have the following
characteristics, the first of which is paramount.