Real-time embedded software development is based on a well-established set of paradigms, methodologies and technologies, evolved during our decades of activity in the field. Based on the solid foundations of computer science applied to embedded and real-time systems, our methodologies and technologies are constantly updated in line with the evolution of microcontrollers, related tools, and regulatory requirements.
Software is represented through the following coexistent and functional paradigms regarding software development in embedded, real-time applications.
- Software = data structures and algorithms that operates on them, formalized with pseudo language.
: “Algorithms + Data Structures = Programs”, by Niklaus Wirth, Prentice-Hall Series in Automatic Computation.
- Software = sequenced and structured processes. Rif.: “Structured Development for Real-Time Systems”, by Paul T. Ward, Stephen J. Mellor, Prentice-Hall.
- Software = finite state machines.
All processes related to the software are based on internal procedures, which regulate:
The software development process is based on of the following activities, managed within an iterative and incremental model:
- Specification of software requirements
- Software architectural design
- Software detailed design
- Implementation of software units
- Verification of software units
- Integration of software units and hardware-software integration
- Integration verifications
- System verifications
Furthermore, the following software-related processes are managed:
- Risk management
- Problem management
- Validation and release
The development and, more generally, the entire software life cycle is managed in compliance with, and with reference to, the most recent international standards, including:
- IEC 61508-3 – Functional safety of electrical/electronic/programmable electronic
safety-related systems – Part 3: Software requirements
- IEC 62304 – Medical device software – Software
As part of the processes related to the software, we use software tools to support the following activities:
- Specification of requirements
- Configuration management and versioning
- Static and dynamic code analysis
- Advanced debugging