I’ve been curious about Particle and how they developed their products (ethernet, wi-fi, and cellular Internet of Things product development hardware and tool chains). I’m going to write a short essay to see if I understand things correctly, hopefully someone can correct me where I’m wrong.
I think it’s fair to say that most of the work that Particle does is in the realms of server-side web development, developing the Particle IDEs, Particle CLI, Particle Firmware, and of course the hardware like the Photon and Electron.
Particle’s MCU operating system is based on a SDK called WICED that was developed by Broadcom, which was recently bought by Cypress.
WICED is basically a software development kit for microcontroller applications that use Broadcom Wi-Fi modules. In other words, Broadcom provided Particle with a microcontroller solution that comprised the microcontroller’s operating system, and the physical Wi-Fi chip when they were developing the Photon.
To add another layer of abstraction, Broadcom’s WICED kit is based on the FreeRTOS microcontroller operating system, which is the de-facto operating system used on most microcontrollers worldwide.
After the success of the Photon, Particle moved on to produce the Electron, which uses the same WICED / FreeRTOS operating system left as a legacy of the Photon which provides for backward compatibility.
Most of what we see as engineers coding the Electron is the Wiring framework, which is basically the “Arduino Language” C++ based IDE and libraries that one uses to write a program. Particle has ported the Wiring IDE into their Particle Dev PC based IDE and Particle Build, their Web IDE.
The part that I don’t understand at the moment is how the compiler works in conjunction with the various releases of Particle Firmware and the FreeRTOS. Is the compiler essentially a product of FreeRTOS that is configured to add in Wiring libraries and Particle Firmware (based on target build of the device you are compiling for)? Is this essentially what is happening behind the scenes when I create a hello world program?