没有合适的资源?快使用搜索试试~ 我知道了~
首页Practical UML StateCharts in C/C++, Second Edition.pdf
New book released in 2009. Almost all computer systems in general, and embedded systems in particular, are eventdriven, which means that they continuously wait for the occurrence of some external or internal event such as a time tick, an arrival of a data packet, a button press, or a mouse click. After recognizing the event, such systems react by performing the appropriate computation that may include manipulating the hardware or generating “soft” events that trigger other internal software components. (That’s why event-driven systems are alternatively called reactive systems.) Once the event handling is complete, the software goes back to waiting for the next event.
资源详情
资源评论
资源推荐


Preface
To create a usable piece of software, you have to fight for every fix, every feature, every little
accommodation that will get one more person up the curve. There are no shortcuts. Luck is involved, but
you don’t win by being lucky, it happens because you fought for every inch.
—Dave Winer
For many years, I had been looking for a book or a magazine article that would describe
a truly practical way of coding modern state machines (UML
1
statecharts) in a
mainstream programming language such as C or C++. I have never found such a
technique.
In 2002, I wrote Practical Statecharts in C/C++: Quantum Programming for
Embedded Systems (PSiCC), which was the first book to provide what had been missing
thus far: a compact, efficient, and highly maintainable implementation of UML state
machines in C and C++ with full support for hierarchical nesting of states. PSiCC was
also the first book to offer complete C and C++ source code of a generic, state machine-
based, real-time application framework for embedded systems.
To my delight, PSiCC continues to be one of the most popular books about
statecharts and event-driven programming for embedded systems. Within a year of
its publication, PSiCC was translated into Chinese, and a year later into Korean.
I’ve received and answered literally thousands of e-mails from readers who successfully
used the published code in consumer, medical, industrial, wireless, networking,
research, defense, robotics, automotive, space exploration, and many other
applications worldwide. In 2003 I started to speak about the subject matter at
1
UML stands for Unified Modeling Language and is the trademark of Object Management Group.
www.newnespress.com

the Embedded Systems Conferences on both U.S. coasts. I also began to consult to
companies. All this gave me additional numerous opportunities to find out firsthand
how engineers actually use the published design techniques in a wide range of
application areas.
What you’re holding in your hands is the second edition of PSiCC. It is the direct result
of the plentiful feedback I’ve received as well as five years of the “massive parallel
testing” and scrutiny that has occurred in the trenches.
What’s New in the Second Edition?
As promised in the first edition of PSiCC, I continued to advance the code and refine
the design techniques. This completely revised second edition incorporates these
advancements as well the numerous lessons learned from readers.
New Code
First of all, this book presents an entirely new version of the software, which is now
called Quantum Platform (QP) and includes the hierarchical event processor (QEP) and
the real-time framework (QF) as well as two new components. QP underwent several
quantum leaps of improvement since the first publication six years ago. The
enhancements introduced since the first edition of PSiCC are too numerous to list here,
but the general areas of improvements include greater efficiency and testability and
better portability across different processors, compilers, and operating systems. The two
new QP components are the lightweight, preemptive, real-time kernel (QK) described
in Chapter 10 and the software-tracing instrumentation (QS) covered in Chapter 11.
Finally, I’m quite excited about the entirely new, ultralight, reduced-feature version of
QP called QP-nano that scales the approach down to the lowest-end 8- and 16-bit
MCUs. I describe QP-nano in Chapter 12.
Open Source and Dual Licensing
In 2004, I decided to release the entire QP code as open source under the terms of the
GNU General Public License (GPL) version 2, as published by the Free Software
Foundation. Independent of the open-source licensing, the QP source code is also
available under the terms of traditional commercial licenses, which expressly supersede
the GPL and are specifically designed for users interested in retaining the proprietary
www.newnespress.com
xviii Preface

status of their applications based on QP. This increasingly popular strategy of
combining open source with commercial licensing, called dual licensing, is explained
in more detail in Appendix A.
C as the Primary Language of Exposition
Most of the code samples in the first edition of PSiCC pertained to the C++
implementation. However, as I found out in the field, many embedded software
developers come from a hardware background (mostly EE) and are often unnecessarily
intimidated by C++.
In this edition, I decided to exactly reverse the roles of C and C++. As before, the
companion Website contains the complete source code for both C and C++ versions.
But now, most of the code examples in the text refer to the C version, and the C++ code
is discussed only when the differences between it and the C implementation become
nontrivial and important.
As far as the C source code is concerned, I no longer use the C+ object-oriented
extension that I’ve applied and documented in the first edition. The code is still
compatible with C+, but the C+ macros are not used.
More Examples
Compared to the first edition, this book presents more examples of event-driven
systems and the examples are more complete. I made a significant effort to come up
with examples that are not utterly trivial yet don’t obscure the general principles in too
many details. I also chose examples that don’t require any specific domain knowledge,
so I don’t need to waste space and your attention explaining the problem specification.
Preemptive Multitasking Support
An event-driven infrastructure such as QP can work with a variety of concurrency
mechanisms, from a simple “superloop” to fully preemptive, priority-based
multitasking. The previous version of QP supported the simple nonpreemptive
scheduling natively but required an external RTOS to provide preemptive multitasking,
if such capability was required.
In Chapter 10, I describe the new real-time kernel (QK) component that provides
deterministic, fully preemptive, priority-based multitasking to QP. QK is a very special,
www.newnespress.com
xixPreface

super-simple, run-to-completion, single-stack kernel that perfectly matches the
universally assumed run-to-completion semantics required for state machine execution.
Testing Support
A running application built of concurrently executing state machines is a highly
structured affair where all important system interactions funnel through the event-
driven framework that ties all the state machines together. By instrumenting just this
tiny “funnel” code, you can gain unprecedented insight into the live system. In fact, the
software trace data from an instrumented event-driven framework can tell you much
more about the application than any traditional real-time operating system (RTOS)
because the framework “knows” so much more about the application.
Chapter 11 describes the new QS (“spy”) component that provides a comprehensive
software-tracing instrumentation to the QP event-driven platform. The trace data
produced by the QS component allows you to perform a live analysis of your running
real-time embedded system with minimal target system resources and without stopping
or significantly slowing down the code. Among other things, you can reconstruct
complete sequence diagrams and detailed, timestamped state machine activities for all
active objects in the system. You can monitor all event exchanges, event queues,
event pools, time events (timers), and preemptions and context switches. You can also
use QS to add your own instrumentation to the application-level code.
Ultra-Lightweight QP-nano Version
The event-driven approach with state machines scales down better than any
conventional real-time kernel or RTOS. To address really small embedded systems, a
reduced QP version called QP-nano implements a subset of features supported in QP/C
or QP/C++. QP-nano has been specifically designed to enable event-driven
programming with hierarchical state machines on low-end 8- and 16-bit
microcontrollers (MCUs), such as AVR, MSP430, 8051, PICmicro, 68HC(S)08, M16C,
and many others. Typically, QP-nano requires around 1-2KB of ROM and just a few
bytes of RAM per state machine. I describe QP-nano in Chapter 12.
Removed Quantum Metaphor
In the first edition of PSiCC, I proposed a quantum-mechanical metaphor as a way of
thinking about the event-driven software systems. Though I still believe that this
www.newnespress.com
xx Preface
剩余720页未读,继续阅读






安全验证
文档复制为VIP权益,开通VIP直接复制

评论20