Book description
Real-time Systems Development is a text for computing students who want to understand more about the development of software for real-time applications, involving concurrent programming, multi-tasking, data i/o and embedded processors.The book has been written to cover single semester final year undergraduate options or MSc modules in the area of real-time systems design and implementation. Assuming a certain level of general systems design and programming experience, this text will extend students knowledge and skills into an area of computing which has increasing relevance in a modern world of telecommunications and ‘intelligent’ equipment using embedded microcontrollers.
* Concise treatment delivers material in manageable sections
* Includes handy glossary, references and practical exercises based on familiar scenarios
* Supporting website contains slides, solutions to problems and software examples
Table of contents
- Cover
- Real-Time Systems Development
- Contents
- Preface
- Recommended lab sessions
- Acknowledgements and thanks
-
1 Introduction to real-time systems
- 1.1 Chapter overview
- 1.2 Real-time systems development
- 1.3 System complexity
- 1.4 Microprocessors and real-time applications
- 1.5 Definition of a real-time system (1/2)
- 1.5 Definition of a real-time system (2/2)
- 1.6 Programming structures
- 1.7 Response latency
- 1.8 Relative speeds
- 1.9 Software timing
- 1.10 High speed timing
- 1.11 Output timing overload
- 1.12 Debugging real-time systems
- 1.13 Access to hardware
- 1.14 Machine I/O
- 1.15 Programmed I/O
- 1.16 Hardware/software cost tradeoff
- 1.17 Hard, soft and firm
- 1.18 Software Quality Assurance (SQA)
- 1.19 Experience and history
- 1.20 Futures?
- 1.21 Chapter summary
- 1.22 Problems and issues for discussion
- 1.23 Suggestions for reading
-
2 Implementing simple real-time systems
- 2.1 Chapter overview
- 2.2 Multi-tasking
- 2.3 Task loops
- 2.4 Code timing problems
- 2.5 Interrupt-driven tasks
- 2.6 Task swapping: How? When? Which?
- 2.7 Task re-entry
- 2.8 Causes of task swapping
- 2.9 Resource sharing
- 2.10 Using the printer port for digital I/O
- 2.11 Electric motors
- 2.12 Operational details of stepper motors
- 2.13 Lifecycle of a professional programmer
- 2.14 Chapter summary
- 2.15 Problems and issues for discussion
- 2.16 Suggestions for reading
-
3 Basic input and output
- 3.1 Chapter overview
- 3.2 Memory-mapped ports
- 3.3 I/O mapped ports
- 3.4 Port registers – the programmers’ view
- 3.5 Port polling
- 3.6 I/O access permissions
- 3.7 To block or not to block
- 3.8 Exception and interrupt processing – service on demand
- 3.9 Multiple interrupt sources
- 3.10 Powerfail detection
- 3.11 Interrupt structure on the PC
- 3.12 Deferred interrupt processing
- 3.13 Use of exceptions and interrupts
- 3.14 Interrupt unpredictability
- 3.15 Critical data protection – how to communicate with interrupts
- 3.16 Bu.ered I/O – interrupt device drivers
- 3.17 Chapter summary
- 3.18 Problems and issues for discussion
- 3.19 Suggestions for reading
-
4 Cyclic executives for bare hardware
- 4.1 Chapter overview
- 4.2 The basic system
- 4.3 System tick
- 4.4 Extended tasks
- 4.5 Implementation of a cyclic executive
- 4.6 Cyclic executive execution pattern
- 4.7 Demonstation cyclic executive code
- 4.8 Keypad application
- 4.9 Chapter summary
- 4.10 Problems and issues for discussion
- 4.11 Suggestions for reading
-
5 Finite state machines – design tool
- 5.1 Chapter overview
- 5.2 Defining the perimeter
- 5.3 Channel bandwidths
- 5.4 Finite State Diagrams (FSD)
- 5.5 Auxiliary variables
- 5.6 Vehicle detection
- 5.7 Simplification techniques
- 5.8 Input data and trigger events
- 5.9 Teas-made
- 5.10 Hierarchical state charts
- 5.11 Concurrent FSMs
- 5.12 OO design patterns and state machines
- 5.13 Chapter summary
- 5.14 Problems and issues for discussion
- 5.15 Suggestions for reading
-
6 Finite state machines – implementation options
- 6.1 Chapter overview
- 6.2 Implementing an FSD
- 6.3 Implementation by direct sequential coding
- 6.4 THE SWITCH-CASE IMPLEMENTATION MODEL
- 6.5 The GOTO/LABEL implementation model
- 6.6 FST implementation model (1/2)
- 6.6 FST implementation model (2/2)
- 6.7 An object-oriented approach to implementation (1/2)
- 6.7 An object-oriented approach to implementation (2/2)
- 6.8 FSM scheduling issues
- 6.9 More FST (1/2)
- 6.9 More FST (2/2)
- 6.10 Run-time environment
- 6.11 Chapter summary
- 6.12 Problems and issues for discussion
- 6.13 Suggestions for reading
-
7 Why multi-task?
- 7.1 Chapter overview
- 7.2 Recognizing a real-time application
- 7.3 Multi-tasking and multi-threading
- 7.4 Run-time support environment
- 7.5 Run-time scheduling
- 7.6 Justifying the use of multi-tasking
- 7.7 Responsiveness
- 7.8 Intellectual simplicity of design
- 7.9 Rigour of implementation
- 7.10 Unit testing
- 7.11 System integrity
- 7.12 System integration testing
- 7.13 Exploitation of multi-processor hardware
- 7.14 Processor support for task swapping
- 7.15 Starting new tasks in Linux
- 7.16 Chapter summary
- 7.17 Problems and issues for discussion
- 7.18 Suggestions for reading
-
8 Task communication and synchronization
- 8.1 Chapter overview
- 8.2 Data sharing
- 8.3 Event flags
- 8.4 Semaphores
- 8.5 Lock files
- 8.6 Intercept signals (1/2)
- 8.6 Intercept signals (2/2)
- 8.7 Shared data buffers
- 8.8 Pipes (1/2)
- 8.8 Pipes (2/2)
- 8.9 Control queues
- 8.10 Sockets
- 8.11 Remote Procedure Calls (RPC)
- 8.12 ADA rendezvous
- 8.13 Java synchronization
- 8.14 Chapter summary
- 8.15 Problems and issues for discussion
- 8.16 Suggestions for reading
-
9 Real-time executives
- 9.1 Chapter overview
- 9.2 Real-time systems implementations
- 9.4 Porting application code for RTEs
- 9.5 Hardware support for an RTE
- 9.6 RTE facilities
- 9.7 Linux
- 9.8 POSIX facilities (1/2)
- 9.8 POSIX facilities (2/2)
- 9.9 Scheduling
- 9.10 Unix Filesystem Hierarchy Standard (FHS)
- 9.11 Configuring and building the Linux kernel
- 9.12 Linux for embedded applications
- 9.13 Booting embedded Linux
- 9.14 Language support
- 9.15 Licensing issues
- 9.16 Chapter summary
- 9.17 Problems and issues for discussion
- 9.18 Suggestions for reading
-
10 Using input/output interfaces
- 10.1 Chapter overview
- 10.2 Input and output operations
- 10.3 Categories
- 10.4 Operating system support
- 10.5 Raw I/O
- 10.6 I/O with Linux
- 10.7 Direct device driver
- 10.8 Device drivers under interrupt
- 10.9 Queuing theory
- 10.10 Chapter summary
- 10.11 Problems and issues for discussion
- 10.12 Suggestions for reading
-
11 Structured design for real-time systems
- 11.1 Chapter overview
- 11.2 Design methods
- 11.3 Incremental functional decomposition
- 11.4 Use of diagrams in design
- 11.5 Data Flow Diagrams (DFD)
- 11.6 Implementing a DFD (1/2)
- 11.6 Implementing a DFD (2/2)
- 11.7 Reading structure charts
- 11.8 Yourdon structured analysis and design for real-time systems
- 11.9 Implementing an event-based DFD
- 11.10 Stored data modelling – EAR modelling
- 11.11 Transforming ERD to DFD
- 11.12 Normalizing stored data
- 11.13 Chapter summary
- 11.14 Problems and issues for discussion
- 11.15 Suggestions for reading
-
12 Designing for multi-tasking
- 12.1 Chapter overview
- 12.2 SA/SD for multi-tasking
- 12.3 Partitioning into tasks
- 12.4 Cohesion and coupling
- 12.5 Designing for intertask communication
- 12.6 Device interfacing
- 12.7 Task diagrams
- 12.8 The CODARTS method
- 12.9 Re-entrant code
- 12.10 Setting task priorities
- 12.11 Execution timing
- 12.12 Run-time support
- 12.13 Chapter summary
- 12.14 Problems and issues for discussion
- 12.15 Suggestions for reading
-
13 UML for real-time systems
- 13.1 Chapter overview
- 13.2 A Unified Modelling Language
- 13.3 Use-cases
- 13.4 Objects and classes
- 13.5 Object collaboration diagrams
- 13.6 Class diagrams
- 13.7 Interobject messaging
- 13.8 Interaction diagrams
- 13.9 Activity diagrams
- 13.10 Chapter summary
- 13.11 Problems and issues for discussion
- 13.12 Suggestions for reading
-
14 Object-oriented approach for real-time systems
- 14.1 Chapter overview
- 14.2 Real-time object-oriented design and development
- 14.3 Designing for real-time
- 14.4 Objects, objects
- 14.5 Finding the objects
- 14.6 Analysis class stereotypes
- 14.7 Tasking
- 14.8 Multi-threading with Java
- 14.9 Design patterns
- 14.10 Chapter summary
- 14.11 Problems and issues for discussion
- 14.12 Suggestions for reading
-
15 System integrity
- 15.1 Chapter overview
- 15.2 Software crisis
- 15.3 Fault tolerance
- 15.4 System requirements
- 15.5 Requirements analysis techniques
- 15.6 Verification and validation
- 15.7 Good design
- 15.8 Simulation studies
- 15.9 Petri nets
- 15.10 Design for security – source code checking: lint
- 15.11 Code reuse
- 15.12 Compile-time checking
- 15.13 Code testing
- 15.14 System integration testing
- 15.15 Run-time error trapping
- 15.16 Run-time checking: assert
- 15.17 Run-time checking: exceptions and hardware watchdog
- 15.18 Run-time checking: stack length checking
- 15.19 Visual assistance
- 15.20 A wet Monday morning
- 15.21 Concurrent version control system (CVS)
- 15.22 Setting up a CVS repository
- 15.23 Conducting design and code reviews
- 15.24 Extreme Programming
- 15.25 Software standards
- 15.26 MISRA
- 15.28 Chapter summary
- 15.29 Problems and issues for discussion
- 15.30 Suggestions for Reading
-
16 Languages for RTS development – C, Ada and Java
- 16.1 Chapter overview
- 16.2 The choice
- 16.3 General criteria for programming languages
- 16.4 Special criteria for real-time compilers
- 16.5 Compiler optimization
- 16.6 C for real-time
- 16.7 Ada
- 16.8 Java
- 16.9 Cross-compilers
- 16.10 Chapter summary
- 16.11 Problems and issues for discussion
- 16.12 Suggestions for reading
-
17 Cross-development techniques
- 17.1 Chapter overview
- 17.2 Host–target development
- 17.3 Cross-compilers and linkers
- 17.4 The gcc compilation process
- 17.5 Startup code
- 17.6 GNU linker, ld and linker script file
- 17.7 Entry point
- 17.8 Building a gcc cross-compiler
- 17.9 Tips!
- 17.10 Executable and Linking Format (ELF)
- 17.11 C++ global constructors and destructors in ELF
- 17.12 Debugging techniques
- 17.13 Program memory options
- 17.14 Flash memory
- 17.15 Installing target code
- 17.16 Chapter summary
- 17.17 Problems and issues for discussion
- 17.18 Suggestions for reading
-
18 Microcontroller embedded systems
- 18.1 Chapter overview
- 18.2 Microprocessors and microcontrollers
- 18.3 Intel 8051 8 bit family
- 18.4 Automatic vending technology
- 18.5 ARM 32 bit family
- 18.6 StrongARM processor
- 18.7 Puppeteer StrongARM microcomputer
- 18.8 Application
- 18.9 FPGA usage
- 18.10 Serial access memory
- 18.11 Chapter summary
- 18.12 Problems and issues for discussion
- 18.13 Suggestions for reading
-
19 Linux device drivers
- 19.1 Chapter overview
- 19.2 Embedded Linux
- 19.3 Porting Linux
- 19.4 The role of device drivers
- 19.5 Major and minor numbers
- 19.6 Index blocks, the Unix inode (1/2)
- 19.6 Index blocks, the Unix inode (2/2)
- 19.7 Types of Linux device drivers (1/2)
- 19.7 Types of Linux device drivers (2/2)
- 19.8 The new devfs
- 19.9 Chapter summary
- 19.10 Problems and issues for discussion
- 19.11 Suggestions for reading
- 20 Hardware/software co-design
- Appendix A: Using an oscilloscope for software debugging
- Index
Product information
- Title: Real-Time Systems Development
- Author(s):
- Release date: October 2005
- Publisher(s): Butterworth-Heinemann
- ISBN: 9780080456409
You might also like
book
Real-Time Systems
The presence and use of real-time systems is becoming increasingly common. Examples of such systems range …
book
Technical Java™: Developing Scientific and Engineering Applications
TechnicalJava™ Developing Scientific and Engineering Applications Grant Palmer The practical, example-rich guide to Java technical programming …
book
Embedded Linux®: Hardware, Software, and Interfacing
Embedded Linux will help the user: select an Embedded Linux platform based on hardware requirements; build …
book
How to Use Objects: Code and Concepts
While most developers today use object-oriented languages, the full power of objects is available only to …