Real-time systems development

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 und...

Ausführliche Beschreibung

Gespeichert in:
Bibliographische Detailangaben
1. Verfasser: Williams, Rob
Format: E-Book Buch
Sprache:Englisch
Veröffentlicht: Amsterdam ; Tokyo Elsevier Butterworth-Heinemann 2006
Elsevier Science & Technology
Butterworth-Heinemann
Ausgabe:1
Schlagworte:
ISBN:0750664711, 9780750664714
Online-Zugang:Volltext
Tags: Tag hinzufügen
Keine Tags, Fügen Sie den ersten Tag hinzu!
Inhaltsangabe:
  • 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 -- 6.7 An object-oriented approach to implementation -- 6.8 FSM scheduling issues -- 6.9 More FST -- 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
  • 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.6 Programming structures -- 1.7 Response latency -- 1.8 Relative speeds -- 1.8.1 Polling an input too fast -- 1.8.2 Polling an input too slowly -- 1.8.3 Light sensing -- 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
  • 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 -- 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
  • 17.12 Debugging techniques
  • 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
  • 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 -- 8.7 Shared data buffers -- 8.8 Pipes -- 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 -- 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