From my studies until now, I have been dealing with many systems. By system, I would like to cover hardware, kernel, executive and operating systems.
Bare systems or Bare Metal
These are "systems" that do not rely on another layer of software. I have been dealing with a wide range of equipment where the only software provided was code I developed.
The most rudimentary devices I had to "program" was by wiring relays and electromechanical components. Or even by connecting pneumatics equipments. A bit more evolved was to design automations usings electronic NAND gates or SR latches.
Anyway, nowadays, microcontrollers are very accessible and so powerful they made everything easier. And still, in many applications, using a system without the overhead of an operating system can be very powerful. In my "Internet of Building" project, I use an Arduino to control a latch for access control and a Raspberry to collect data, format and upload them to the cloud.
PLC: Programmable logic controller
In my early jobs, I had to write code for those PLCs. These are industrial devices where you usually program using Grafcet (EN 60848). They are used to control actuators based on input values like controlling the relays to start/stop an asynchronous 3-phases motor.
Computers with operating systems
This is a very common platform to work on. The range of computer I worked on includes Raspberry, Desktops and Servers. I have been writing programs in the most common operating systems :
- Linux - various flavor
During a couple of years, I programmed industrial robots from ABB (S3 and S4 control systems). I programmed robots to apply coatings in automotive industry and to handle TVs in a manufacturing industry.