



A Selection Of Features Supported Out-of-the-Box







Cleaned Up C99 A cleaned up version of C99 helps avoid low-level bugs. For example, the preprocessor is not supported and all its legitimate uses are supported by first-class concepts such as a robust module system. mbeddr also supports a native boolean type, enforces the use of the size-aware integral types and also has a cleaned up syntax for function types, function pointers and lambdas.



Reporting and Logging Reporting and logging is important for embedded applications. mbeddr contains rich frameworks for reporting program events and logging data. While they use stderr by default, both can be retargeted to arbitrary other systems including serial ports or error storage. Log statements can be selectively disabled with zero runtime footprint.



Testing Testing is extremely important in embedded software. In mbeddr, test cases are first class concepts, and they support a set of different assert statements. Tests can be grouped into suites and invoked, from the main function reporting the number of failures to the operating system via main's return value. A special DSL for describing mocks is also available for the components language.









Physical Units Many embedded systems deal with quantities from the real world, and mbeddr comes with an extension for phyiscal units to help represent such quantities. Types as well as literals can be annotated with units. The seven SI units are predefined, and users can define there own derived or convertible units. The type system computes with these units and reports errors in the IDE. There is zero runtime overhead, since the generated code has no representation of the units.



State Machines State-based behavior is ubiquitous in embedded software. mbeddr natively supports state machines that have events, variables, states and transitions with guards. States have entry, exit and do actions, transitions can have actions as well. State machines can be hierarchical and use epsilon transitions. State machines can be triggered from C code and themselves interact with C code in actions. State machines can be edited as text and tables, and can be visualized. Verification is available via model checking.



Interfaces and Components Modularization is critical for building flexible, testable and maintainable software. To this end, mbeddr supports interfaces with contracts (pre- and postconditions, protocol state machines). Similar to AUTOSAR, Components can provide or require interfaces. Contracts can be verified at runtime or statically. Components support mocks for testing. Translation to C can happen in various ways, some of them with very little overhead. Relationships between interfaces and components can be visualized.









Requirements, Tracing and Docs In spite of the goal to describe systems formally, prose still plays an important role. mbeddr supports a language for capturing requirements that looks document-like, but is highly structured. Arbitrary DSLs can be mixed with the requirements in various ways. Tracing from arbitrary design, architecture or implementation elements is supported. A documentation language helps with creating code-integrated documents, exportable as HTML or LaTeX.



Product Line Variability Almost all embedded systems are developed in the context of product lines. mbeddr supports describing variability via feature models. Feature model configurations are checked for compliance with the constraints expressed in the feature model. Artifacts can be adapted to the variant statically (via presence conditions) and at runtime (via specialized switch statements). The presence conditions can be overlaid over programs expressed in any language.



Formal Verification mbeddr's high-level DSLs lend themselves to verification. mbeddr integrates several verification tools, among them symbolic model checking of state machines, model checking/data flow analysis of C code for contract analysis as well as SMT solving for decision tables and feature models. The input to the verification tools is generated from mbeddr languages, and the result of the verification is lifted back up to the extension level.









Execution and Debugging Programs can be executed directly from within the mbeddr IDE. Failing assertions (in test cases) are hyperlinked to the code that caused the failure, simplifying tracking down problems in tests. Debugging is available on the level of the extension; for example, one can step through components or state machines. The low-level implementation of the extension is not shown. The Watch window is aware of mbeddr-specific types.



IDE Support mbeddr provides state-of-the-art IDE support including syntax coloring, code completion, go to definition, realtime type-system checks, quick fixes (intentions), refactorings, customizable find-usages, and automated synchronization between related parts of the code. These features are available for C, its extensions, the requirements and documentation languages and all languages or extensions developed by users.



Version Control All code is stored in XML files, and thereby integrates with mainstream version control systems, among them SVN and git. To be able to see differences and merge conflicts, mbeddr/MPS supports a diff/merge view that uses the projectional editor, it works for any syntax. In addition, the IDE supports the vast majority of version control system operations, such as commit, update or reverting changes. A local history is available as well.





