- Distributed real-time and embedded applications
- C and C++ for the embedded hardware
- Java for supervisory components
- UDP and TCP communications between the embedded hardware and the supervisory components
- RS-232 and RS-485 communications
- Windows and Linux
- SQL for applications requiring access to a back-end database
- SSH and SFTP for remote access and control
My experience of software design and implementation goes back to 1974.
My first work with real-time systems was in 1978, working with radar.
Current projects include control systems for both hydroponics and aquaponics
systems, and for electronic signage of floodways, both running Linux on a
single-board computer. The hydroponics system also includes a supervisor
application written in Java running on a desktop computer. It uses both UDP
and TCP to communicate with the single-board computers.
Previous work includes a multi-function scoreboard for a sports facility. The system
includes the sign itself, a desktop computer, and an Android tablet. Communications
technologies include fibre-optic and WiFi. The application on the desktop is written
in Java, and the application on the Android is written in Java for Android.
At about the same time I designed and implemented a single-board computer solution to
allow remote control of price poles at petrol stations. The principle function was to
convert the price information into a form used by the communication protocol used by the
LED signs themselves. Technologies included C, Linux, RS-232, RS-485, wired ethernet,
WiFi and SSH.
The activity of software development has changed dramatically since the 1970s, that
change driven by large changes in technology. The methodology presented below is what I
currently use and recommend for embedded systems, and it is subject to revision with
changes in business practices and available technology.
- Identification of processes
- Identification of process dependencies
- Allocation of processes to hardware platforms
- Design of inter-process communications
- Selection of development environments
- Development of test schema
- Component design
- Data storage design
- Coding and testing of embedded components against specification
- Coding and testing of supervisory components against specification
- Iterate the above as far back as required
- Customer review
- Field trials
- Support and maintenance