Embedded vs. Enterprise
Traditionally, the enterprise software development community has considered the embedded folks to be a bit conservative and somewhat boring. "Bitcounters" they were often called :-). And indeed, traditioinally the embedded field hasn't been very eager to adapt new technologies, especially language adoption was very slow. Per-unit cost was often more important than inital software development cost, so complex one-off systems had to be built. As a consequence of (often premature) optimization for small devices, there was often no room for "nice design".
However, for the last couple of years, things have been changing dramatically. As a consequence of the fast growing complexity and size of (distributed) embedded systems the requirements for embedded software development are changing. The effort spent on developing the system becomes more important, compared to the per-unit cost of the device. There are more things pushing into the same direction: product lines, shorter time to market.
So, the embedded software development community is forced to consider more explicitly things such as software architecture, variability management, reuse and other similar topics. And since frameworks and "classic" OO technology often isn't a good fit (for reasons of performance and/or resource scarcity in general) and because the complexities involved are getting so big that classes aren't enough of an abstraction anyway, the embedded world is rapidly embracing model-driven development.
Using MDD, embedded developers can build meaningful abstractions to manage the system complexity, handle variabilities on the model level and in the generators and even simulate aspects of the system. And from these models, they can generate their tried and trusted C code ... that runs on their tried and trusted infrastructures (RTOSs).
Note that MDD has been used in the embedded world for ages (maybe not by that name), as exemplified by tools such as Ascet or Matlab/Simulink. However, these tools often addressed mainly algorithmic aspect of the target system. Using models to describe the system as a whole, including processors, networks, distribution, deployment and quality of service is a more recent development.
In
my talk at OOP 2007, I will elaborate on these topics ... the slides aren't finished yet, so let me know at
voelter@acm.org what you want me to talk about in the session :-)