

for the Greater New England Area
Embedded Systems Consulting Services
"No project too small, no microcontroller technology too old or too new"
Call
T: 978 838-2339
ESCS Embedded Software Engineering
​
When you clicked on the FIRMWARE button on the ESCS Home page, you were presented with a short discussion designed to help clarify the differences between Embedded Firmware and Embedded Software development. For the purpose of discussing Embedded Software development, we need to revisit the concept of abstraction.
​
Embedded software engineers who develop drivers and supporting API-level code for drivers are said to be abstracting the details of the driver-level code: the work they do can thus be considered Embedded Firmware. The users of the API-level driver code are said to be developing Embedded Software as they are working at a higher abstraction layer. Embedded software can involve both Middleware and Systems-level code depending upon the application being developed.
If one is developing C/C++ code that runs in user space under the control of a High-level Operating Systems such as Linux, they are most likely developing systems-level applications code. It is said that code abstracted from the hardware layer, such as middleware or application-level code, is typically considered to be Embedded Software.
​
I consider myself to be an Embedded Hardware/Firmware Engineer also capable of developing code using C/C++ that is abstracted from the hardware layer. Here are some examples of the Embedded Software that I have developed in the past, the bulk of this code was applications-level code written in C/C++ and ran under either Embedded Linux or an RTOS:​

​
-
Systems-level applications code for interfacing 2 dissimilar hardware architectures, e.g. one microcontroller running Embedded Linux to a second microcontroller running an RTOS using applications code written in C and running in user space to move bidirectional data between both microcontrollers using a SPI interface.
-
Test Applications-level code for a microcontroller running an RTOS and communicating with a microcontroller running Embedded Linux using a SPI interface.
-
Systems-level applications code running under Embedded Linux for interfacing a microcontroller to an FPGA to acquire data from the FPGA and save it to a shared memory protected using a simple memory locking scheme (semaphore).
-
Interprocessor Communications Code (IPC) running under Embedded Linux using local Sockets to move data acquired from a SPI interface to a GUI process for real-time graphical display. This code was later modified to use shared memory instead of local Sockets.
-
Test applications code written in the BASH scripting language along with a terminal-based menuing system used for setup and testing of Blue Tooth and WiFi communications for an Embedded Linux-based product.
-
Test applications code running under an RTOS for testing the API and driver-level code that I developed for a Real Time Clock used for time and date stamping records saved in log files.
-
Test applications code running under an RTOS for testing the API and driver-level code that I developed for an Accelerometer used to control the orientation of a graphics display.
-
Applications-level code that performed Initialization and Calibration functions required to bring up a real-time measurement system running under an RTOS.
-
Applications code running under control of an RTOS used for functional testing of scientific instrumentation prior to shipment to customers. Testing was performed in an environmental chamber whereby the system under test was subjected to varying temperature and humidity levels while test code was running and logging the pass/fail results along with the time and date of the logged results.