Practical UML statecharts in C/C++ : event-driven programming for embedded systems /

Practical UML Statecharts in C/C++ Second Edition bridges the gap between high-level abstract concepts of the Unified Modeling Language (UML) and the actual programming aspects of modern hierarchical state machines (UML statecharts). The book describes a lightweight, open source, event-driven infras...

Full description

Saved in:
Bibliographic Details
Main Author: Samek, Miro
Format: Electronic eBook
Language:English
Published: Amsterdam ; Boston : Newnes/Elsevier, ©2009.
Edition:2nd ed.
Subjects:
Online Access:CONNECT
Table of Contents:
  • Preface
  • PART I STATECHARTS
  • Chapter 1 Whirlwind Tour of Programming with Statecharts
  • 1.1 Why Bother?
  • 1.2 The Traditional Event-Action Paradigm
  • 1.3 State Machines? A Better Way of Programming
  • 1.3.1 The Time Bomb Example
  • 1.3.2 The Calculator Example
  • 1.5 Object-Oriented Analogy
  • 1.6 The Event-driven Framework
  • 1.6 Summary
  • Chapter 2 A Crash Course in Statecharts
  • 2.1 The Essence of Finite State Machines
  • 2.2 The Essence of UML Statecharts
  • 2.3 Examples of State Models
  • 2.4 Summary
  • Chapter 3 Standard State Machine Implementations
  • 3.1 State Machine Interface
  • 3.2 Nested switch Statement
  • 3.3 State Table
  • 3.4 State Design Pattern
  • 3.5 Optimal FSM Implementation
  • 3.6 State Machines and C++ Exception Handling
  • 3.7 Role of Pointer-to-Member Functions
  • 3.8 Implementing Guards, Junctions, and Choice Points
  • 3.9 Implementing Entry and Exit Actions
  • 3.10 Dealing with State Hierarchy
  • 3.11 Summary
  • Chapter 4 QEP: A Minimal Hierarchical Event Processor
  • 4.1 General Structure of the QEP Event Processor
  • 4.2 An Annotated Example (QHsm)
  • 4.3 QEP Structure
  • 4.3.1 QEP Source Code Structure
  • 4.3.2 Internal Representation of a State Machine
  • 4.3.3 Initialization of a State Machine
  • 4.3.4 Dispatching Events to a FSM
  • 4.3.5 Executing a Transition in a FSM
  • 4.3.6 Dispatching Events to a HSM
  • 4.3.7 Executing a Transition in a HSM
  • 4.3.8 Static Transition Optimization in a HSM
  • 4.4 Porting and Configuring QEP
  • 4.5 Caveats
  • 4.6 Summary
  • Chapter 5 Implementing State Machines with QEP
  • 5.1 Implementing a HSM with QEP
  • 5.1.1 Step 1: Enumerating Signals
  • 5.1.2 Step 2: Defining Events
  • 5.1.3 Step 3: Defining the QCalc State Machine
  • 5.1.4 Step 4: Declaring the QCalc States
  • 5.1.5 Step 5: Initializing the HSM
  • 5.1.6 Step 6: Implementing the State Handler Functions
  • 5.2 Implementing a FSM with QEP
  • 2.5 Pitfalls to Avoid While Coding State Machines with QEP
  • 2.5.1 Incomplete State Handlers2-37
  • 2.5.2 Confusing Statecharts with Flowcharts2-38
  • 2.5.3 Ill-Formed State Handlers2-39
  • 2.5.4 Suboptimal Signal Granularity2-42
  • 2.5.5 Violating the Run To Completion Semantics2-42
  • 4.6 Summary
  • Chapter 6 State Patterns
  • 6.1 Ultimate Hook
  • 6.2 Reminder
  • 6.3 Deferred Event
  • 6.4 Orthogonal Component
  • 6.5 Transition to History
  • 6.6 Summary
  • PART II EVENT-DRIVEN FRAMEWORK
  • Chapter 7 QF: A Minimal Event-Driven Embedded Framework
  • 7.1 Conventional Approach to Multithreading
  • 7.2 Computing Model of QF
  • 7.3 Annotated Example
  • 7.3.1 The?Airplane in the Tunnel? Game
  • 7.3.2 The Active Object Design
  • 7.3.3 The Implementation
  • 7.3.4 The Port for ARM Cortex-M3
  • 7.3.5 Testing
  • 7.4 Summary
  • Chapter 8 Design of QF
  • 8.1 Handling Errors and Exceptional Conditions
  • 8.2 Memory Management
  • 8.3 Mutual Exclusion and Blocking
  • 8.4 Active Objects
  • 8.5 Event Management in QF
  • 8.6 Event Delivery Mechanisms in QF
  • 8.9 Deferring and Recalling Events in QF
  • 8.7 Time Events
  • 8.8 Summary
  • Chapter 9 Implementation of QF
  • 9.1 Code Organization
  • 9.2 Critical Section in QF
  • 9.3 General QF Policies Enforced by Assertions
  • 9.4 Active Object class
  • 9.5 Native QF Event Queue
  • 9.6 Native QF Memory Pool
  • 9.7 Native QF Priority Set
  • 9.8 Native QF Scheduler
  • Chapter 10 Porting QF
  • 10.1 QF Porting Guide
  • 10.2 QF on Bare-Metal Targets (the Vanilla Port)
  • 10.3 Using QF with a preemptive Real-Time Kernel (æC/OS-II)
  • 10.4 QF port to a POSIX-Compliant OS (Linux)
  • 10.5 Summary
  • Chapter 11 Conclusion
  • 11.2 Rules for Developing Event-Driven Embedded Applications
  • 11.3 Heuristics
  • 11.4 Sizing Event Queues and Event Pools
  • 11.5 System Integration
  • 11.6 Summary of Key Elements
  • 11.7 An Invitation
  • Appendix A QK: A Single-Stack Preemptive Kernel
  • A.2 Run-to-Completion Processing
  • A.3 Synchronous and Asynchronous Preemptions
  • A.4 Stack Utilization
  • A.4 Comparison with a Traditional RTOS
  • A.5 Summary
  • Appendix B QS: Software Tracing for Event Driven Systems
  • B.1 Software Tracing Concepts
  • B.2 Structure of QS Trace Records
  • B.3 QS Filters
  • B.4 QS Data Protocol
  • B.5 QS Trace Buffer
  • B.6 Configuring and Porting QS
  • B.7 Summary
  • Appendix C Inheriting Entire State Models in C++
  • C.1 Statechart Refinement Example in C++
  • C.3 Caveats
  • C.4 Summary
  • Appendix D Guide to Notation
  • D.1 Class Diagrams
  • D.2 Statechart Diagrams
  • D.3 Sequence Diagrams
  • D.4 Timing Diagrams
  • Appendix E CD-ROM
  • E.1 Source Code Structure
  • E.2 Installation
  • E.3 Licensing
  • E.4 Answers to the Exercises
  • E.5 QP Reference Guide (Doxygen)
  • E.6 Resources
  • Bibliography
  • Index.