Embedded software is significantly more complex than non-embedded software, because it needs to interact with the physical world while performing the functionalities it was designed for. The great majority of all embedded applications face some or all of these constraints:
- Real-Time constraints
It needs to respond in a timeframe that is compatible with the real-world events that concern it. This may include keeping up with: - the rotations of the motor for engine control
- while controling the radio frequency modulation for a mobile phone or GPS
- calculating trajectory and regulating thrust for a rocket
- calculating contrast and color saturation for an image on a television (before the next frame)
- Safety constraints
Many embedded applications are safety-critical, which means that a software error would pose serious problems, depending on the application. This includes navigational/flight control for avionics, trajectory control for an automobile, production control at a power plant, etc. - Power constraints
Any embedded system that is not connected to a permanent power source needs to manage the energy that it uses. This includes shutting off memory that is not in use, programming technniques that use less power, incorporating knowledge about the real world to predict when power will become available (eg: for a satelite which knows when sunlight will be available), etc. - Cost constraints
The overall costs related to both development and production play a significant role in the design choices when developing an embedded system in a competitive market. - Overall complexity constraints
The size and complexity of embedded applications is now becoming difficult to manage. While the adoption of model-based techniques has allowed developers to work at higher levels of abstraction (and keep better control over complexity), this remains an important issue. - Other resources constraints
Other resources, such as total memory, network bandwidth, expected performance, time to market, etc.
The amount and complexity of embedded software is growing every day. This embedded software is critical to the product's operation and increasingly the main determinant of its differentiation. To help address the growing importance of embedded software and the associated challenges to develop it, developers are turning to Model Driven Development (MDD).