Tech Focus: Designing with patterns in mind
Design Principles and Design Patterns
Useful design patterns for building embedded multicore systems
Jack Ganssle's recent column on “Design Patterns” prompted some vigorous discussion on Embedded.com this week about the usefulness of this technique in embedded systems design.
In software engineering, a design pattern is a general framework description of a set of possible solutions to a given programming problem within a given design context. It is not a finished design that can be transformed directly into code, but rather a generalized template that can be adapted for use – and reuse – in many different situations.
As Jack has pointed out in other columns, if embedded programming is to move from an essentially ad hoc seat-of-the-pants technique to a discipline that deserves to be called software engineering,such structured approaches are an essential step developers will have to take.
“sharps_eng” commented on Jack's discussion and reacted to some of the negative comments, especially about the apparent dependence of design patterns on object-oriented languages such as C++ and the unified modeling language. He made the point that one of the best places to look for more information on other alternatives is in Embedded Systems Design and on Embedded.com. I couldn't have said it better myself!
Collected here are some of the articles from our 20 year knowledge base on line about the use of design patterns in everything from multicore parallel programmin g and communications to safety-critical systems . Some of my Editor's Top Picks include:
Design principles and design patterns
Task design patterns in a real time system
Designing virtual machines using design patterns
Read what interests you on this topic and let us know what you think, either online at the end of Jack's column or in the form of design articles and/or blog contributions. I look forward to hearing from you.
Useful design patterns for building embedded multicore systems
Anderson MacKay provides a brief tutorial on design patterns you may find useful as starting points for thinking about how to implement a multicore into your embedded system.
Using design patterns to identify and partition RTOS tasks: Part 1
In the first of a three part series, the authors describe the basics of design patterns as a way to organize and structure your software development and use the structures derived to avoid mistakes and uncover useful ways to more efficiently organize your code.
Design Patterns for High Availability
It is possible to achieve five-nines reliability with everyday commercial-quality hardware and software. The key is the way in which these components are combined.
Pay attention to design patterns in embedded high availability net systems
Uninterrupted service is expected from many of the connected embedded systems that surround us every day: the phone system, automated banking and credit card verification.
An architecture for designing reusable embedded systems software, Part 1
Want to make your application software more reusable? Don't change the hardware, operating system, or your tools. Instead change the architectural framework within which you do your design.
Efficiently Coding Communications Protocols in C++
Harvey Sugar describes how to efficiently code communications protocols using C++, using C++ classes to implement a layered protocol and demonstrates how the tasking/queuing model can be separated from the layered implementation.
Executable and Translatable UML
Executable and translatable UML separates models from design. It enables you to test the model before you have a target, then generate an optimal target-specific design. Here's how to put it into practice.
Using finite state machines to design software
A straightforward guide to adding structure to your software project using a finite state machine design pattern, requiring no exceptional knowledge other than basic programming and some common sense.
State machine shortcuts
A subset of the UML statechart notation leads to relatively simple code implementations. This article will show you which subset to use and how to go about it.
Tricks and techniques for performance tuning your embedded system using patterns: Part 1
In this series, Peter Barry and Gerard Hartnett of Intel share some of the tricks and techniques they have picked up from their experience with real-life embedded systems they have designed. This week: A review of general patterns
Software Design Issues for Multi-core/Multiprocessor Systems
Steve Daly of Intel looks at how different configurations of cores and processors may affect the design of a multicore, multiprocessor system with a particular focus on on-chip cache conflicts.
Why C++ is a viable alternative to C in embedded systems design
While C enjoys a good reputation as a strong and powerful language for embedded development, C++ does not have quite such a broad appeal. With today's capable and sophisticated C++ environments this is often an incorrect belief.
Architecture of safety-critical systems
It's one thing to know your system is safety-critical; it's another to know how to deal with it. The author explains how to evaluate errors, categorize them, and safely handle them when they happen.
Design Patterns for FPGA/ASIC development in industrial applications
This paper discusses the application of design patterns to FPGA and ASIC design. The design service team of NetModule has successfully completed many designs over the past years using its own, proven set of design patterns. This has shown good results regarding design productivity, design reliability, reuse and maintenance.
Embedded Systems Bookshelf
Embedded Books Reading Room
Bernard Cole's favorite links to book excerpts.
Airport fiction blows. A look at books other engineers are reading and why you should read them, too. Recommend and write a review yourself. E-mail Brian Fuller.
Jack Ganssle's Bookshelf
A list of book reviews by Jack Ganssle, contributing technical editor of Embedded Systems Design and Embedded.com.
Max's Cool Beans
Clive “Max” Maxfield, the editor on Programmable Logic DesignLine, often writes about interesting books.
Klocwork debuts on-the-fly source code analysis
Klocwork's new Insight 9.5 tool creates new benchmark for fast, developer-friendly source code analysis
IAR Embedded Workbench for ARM touts major enhancements for ARM Cortex Users
A new version of IAR Embedded Workbench for ARM (IAR Systems) adds significant speed optimizations and several new features.
GrammaTech CodeSonar and Lattix LDM integration enhances architecture management for complex C/C++ systems
GrammaTech, Inc. and Lattix Inc. have teamed to integrate GrammaTech CodeSonar and Lattix LDM. The new CodeSonar integration with Lattix provides precise and accurate architecture analysis to enable teams to review, refactor and maintain the architecture of complex C/C++ software systems.
LDRA tool suite integrates MISRA AC for verification of auto-generated code
LDRA's MISRA AC provides independent verification of the auto-generated code, a critical factor in stringent certification requirements.
New version of PLS Universal Debug Engine simplifies multicore control and debugging
PLS Universal Debug Engine (UDE) 3.2 features new functions for multicore control, unique visualization capabilities at system level, and dedicated support for a wide range of the latest 32-bit SoCs from different manufacturers.