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.


Paradigms
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.

Processes
All processes related to the software are based on internal procedures, which regulate:
- Objectives
- Inputs
- Outputs
- Responsibilities
- Methodologies
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
- Maintenance
- Validation and release

Standards
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
life-cycle processes.

Tools
As part of the processes related to the software, we use software tools to support the following activities:
- Specification of requirements
- Verification/Testing
- Traceability
- Configuration management and versioning
- Static and dynamic code analysis
- Advanced debugging