Software engineering for embedded systems methods, practical techniques, and applications

Software Engineering for Embedded Systems: Methods, Practical Techniques, and Applications, Second Edition provides the techniques and technologies in software engineering to optimally design and implement an embedded system. Written by experts with a solution focus, this encyclopedic reference give...

Descripción completa

Detalles Bibliográficos
Otros Autores: Oshana, Robert, author (author), Oshana, Robert, editor (editor), Kraeling, Mark, editor
Formato: Libro electrónico
Idioma:Inglés
Publicado: Oxford : Elsevier [2019]
Edición:Second edition
Materias:
Ver en Biblioteca Universitat Ramon Llull:https://discovery.url.edu/permalink/34CSUC_URL/1im36ta/alma991009630595406719
Tabla de Contenidos:
  • Front Cover
  • Software Engineering for Embedded Systems
  • Copyright
  • Contents
  • Contributors
  • Acknowledgments
  • 1 Software Engineering for Embedded and Real-Time Systems
  • 1 Software Engineering
  • 2 Embedded Systems
  • 2.1 Embedded Systems Are Reactive Systems
  • 3 Real-Time Systems
  • 3.1 Types of Real-Time Systems-Soft and Hard
  • 3.2 Differences Between Real-Time and Time-Shared Systems
  • 4 Example of a Hard Real-Time System
  • 4.1 Based on Signal Sample, Time to Perform Actions Before Next Sample Arrives
  • 4.2 Hard Real-Time Systems
  • 5 Real-Time Event Characteristics
  • 5.1 Real-Time Event Categories
  • 5.2 Efficient Execution and the Execution Environment
  • 5.2.1 Efficiency Overview
  • 5.2.2 Resource Management
  • 6 Challenges in Real-Time System Design
  • 6.1 Response Time
  • 6.2 Recovering From Failures
  • 7 The Embedded System's Software Build Process
  • 8 Distributed and Multiprocessor Architectures
  • 9 Software for Embedded Systems
  • 9.1 Super Loop Architecture
  • 9.2 Power-Saving Super Loop
  • 9.3 Window Lift Embedded Design
  • 10 Hardware Abstraction Layers for Embedded Systems
  • 2 Software Development Process
  • 1 Getting Started
  • 1.1 Project Planning
  • 1.2 Risk Management
  • 1.3 Kicking Off the Project
  • 2 Requirements
  • 2.1 User Requirements
  • 2.2 System Requirements
  • 3 Architecture
  • 3.1 Safety-Critical Elements
  • 3.2 Operating Performance
  • 3.3 Security
  • 3.4 Reliability and Availability
  • 4 Design
  • 4.1 Object-Oriented Programming
  • 4.1.1 System Context
  • 4.1.2 Class Identification
  • 4.1.3 Design Modeling
  • 4.2 Real-Time Design
  • 5 Implementation
  • 6 Testing
  • 6.1 Validation and Verification
  • 6.2 Integration Testing
  • 6.3 Release Testing
  • 6.4 Performance Testing
  • 7 Rolling It Together: Agile Development.
  • 7.1 Scaling for Complexity/Organization
  • 7.2 Roles
  • 7.3 Keep Your Plans!
  • 7.4 Meetings for Planning
  • 7.4.1 Quarterly Release Planning
  • 7.4.2 Sprint Planning
  • 7.5 Plan for Your Unplanned
  • 7.6 Documentation
  • 7.6.1 Requirements vs. Acceptance Criteria
  • 7.7 Go With the Flow
  • 7.7.1 Agile Ceremonies Promote and Increase Flow
  • 7.7.1.1 Feature Writing, Decomposition, and Grooming
  • 7.7.1.2 Detailed Documents and Meetings
  • 7.7.1.2.1 Sprint Backlog Grooming
  • 7.7.1.2.2 Daily Scrum
  • 7.7.1.2.3 Sprint Demo
  • 7.7.1.2.4 Release Demo
  • 7.7.1.2.5 Sprint Retro
  • 7.7.2 Agile Flow Exists Within and Between Sprints
  • 7.7.2.1 Within Sprints
  • 7.7.2.1.1 Work Item Fields and States
  • 7.7.2.1.1.1 User Story Cycle
  • 7.7.2.1.1.2 How Do We Write User Stories and How Granular Should They Be?
  • 7.7.2.1.2 Vertical Slices
  • 7.7.2.2 Between Sprints
  • 7.7.3 Product vs. Project Teams Have Different Flows
  • 7.7.4 Supporting the Team's Flow
  • 7.7.5 ART Flow
  • 8 Advanced Topics
  • 8.1 Metrics and Transparency
  • 8.1.1 Metrics: Some is Better Than None
  • 8.1.2 Getting Comfortable With Data
  • 8.1.3 The Export vs. Live Data Paradigm
  • 8.1.3.1 Inspecting and Adapting With Metrics
  • 8.2 Tooling
  • 8.2.1 Tooling and Metrics
  • 8.3 Agile and Alignments
  • 9 Conclusion
  • Exercises
  • References
  • Further Reading
  • 3 Embedded and Multicore System Architecture-Design and Optimization
  • 1 Introduction
  • 2 The Right Way and the Wrong Way
  • 3 Understanding Requirements
  • 4 Mapping the Application
  • 4.1 Performance Calculations to Map the Application to Hardware
  • 4.1.1 How Many Channels Can the Core Handle?
  • 4.1.2 Are the I/O and Memory Capable of This Many Channels?
  • 4.2 How the Estimation Results Drive Options
  • 5 Helping the Compiler and Build Tools.
  • 5.1 Choosing Algorithmic Components to Work With Compilers and Architectures
  • 6 Power Optimization
  • 4 Basic Programming Techniques
  • 1 Introduction
  • 2 Reference Platform Overview
  • 2.1 Understanding Hardware
  • 3 SDK Installation
  • 3.1 Download and Installation
  • 3.2 Building a Project
  • 3.3 Debugging the Project
  • 4 Target System Configuration and Initialization
  • 4.1 System Reset
  • 4.2 Clock Configuration
  • 4.3 I/O Pin Configuration
  • 4.4 I/O Pin Initialization
  • 4.5 SDK I/O Helper Routines
  • 5 Programming Examples
  • 5.1 General Purpose I/O-Blinking LED
  • 5.2 Basic Serial I/O-Polled UART Send/Receive
  • 5.3 Overview of Interrupt Handlers
  • 5.4 Basic Timer Operation-Low-Power Timer (LPTMR)
  • 6 Summary
  • Questions and Answers
  • 5 Programming and Implementation Guidelines
  • 1 Introduction
  • 1.1 Principles of High-Quality Programming
  • 1.1.1 Readability
  • 1.1.2 Maintainability
  • 1.1.3 Testability
  • 1.2 What Sets Embedded Apart From General Programming
  • 2 Starting the Embedded Software Project
  • 2.1 Hardware Platform Input
  • 2.2 Project Files/Organization
  • 2.2.1 Source Files Written Locally
  • 2.2.2 Source Files From Company Libraries
  • 2.2.3 Libraries From Third Parties
  • 2.2.4 Libraries From Compiler/Linker Toolsets
  • 2.3 Team Programming Guidelines
  • 2.4 Syntax Standard
  • 2.4.1 Code WhiteSpace
  • 2.4.2 Tabs in Source Files
  • 2.4.3 Alignment Within Source
  • 2.5 Safety Requirements in Source Code
  • 3 Variable Structure
  • 3.1 Variable Declarations
  • 3.1.1 Global Variables
  • 3.1.2 File-Scope Variables
  • 3.1.3 Local Variables
  • 3.2 Data Types
  • 3.3 Definitions
  • 3.3.1 Conditional Compilation
  • 3.3.2 #Define
  • Content Learning Exercises
  • 6 Operating Systems
  • 1 Foreground/Background Systems
  • 2 Real-Time Kernels.
  • 3 RTOS (Real-Time Operating System)
  • 3.1 Critical Sections
  • 3.2 Task Management
  • 4 Assigning Task Priorities
  • 5 Determining the Size of a Stack
  • 5.1 The Idle Task
  • 5.2 Priority Levels
  • 5.3 The Ready List
  • 6 Preemptive Scheduling
  • 7 Scheduling Points
  • 8 Round-Robin Scheduling
  • 9 Context Switching
  • 10 Interrupt Management
  • 10.1 Handling CPU Interrupts
  • 10.2 NonKernel-Aware Interrupt Service Routine (ISR)
  • 10.3 Processors with Multiple Interrupt Priorities
  • 10.4 All Interrupts Vector to a Common Location
  • 10.5 Every Interrupt Vectors to a Unique Location
  • 11 The Clock Tick (or System Tick)
  • 11.1 Wait Lists
  • 11.2 Time Management
  • 12 Resource Management
  • 12.1 Resource Management-Disable/Enable Interrupts
  • 12.2 Resource Management-Semaphores
  • 12.3 Resource Management-Notes on Semaphores
  • 12.4 Resource Management-Priority Inversions
  • 12.5 Resource Management-Mutual Exclusion Semaphores (Mutex)
  • 12.6 Resource Management-Deadlocks (or Deadly Embrace)
  • 13 Synchronization
  • 13.1 Synchronization-Semaphores
  • 13.2 Synchronization-Credit Tracking
  • 14 Bilateral Rendez-vous
  • 15 Message Passing
  • 15.1 Messages
  • 15.2 Message Queues
  • 16 Flow Control
  • 17 Clients and Servers
  • 17.1 Memory Management
  • 18 Summary
  • 7 Open-Source Software
  • 1 Linux
  • 1.1 History of Linux
  • 1.1.1 Reason for the Exponential Acceptance of Linux
  • 1.1.2 Linux and Embedded Systems
  • 1.2 How Embedded Linux is Different From Linux?
  • 1.3 Major Features of Linux
  • 1.3.1 Portability
  • 1.3.1.1 Supported CPU Architectures
  • 1.3.1.2 POSIX Compliance
  • 1.3.2 Support of a Wide Variety of Peripheral Devices
  • 1.3.3 Complete Network Stack Solution
  • 1.3.4 Variety of Task Schedulers
  • 1.3.5 Security
  • 1.3.6 User Space Drivers
  • 1.3.7 Endianness
  • 1.3.8 Debuggability.
  • 1.4 Benefits of Using Linux
  • 1.4.1 Free of Cost
  • 1.4.2 Time to Market
  • 1.4.3 No "Vendor Lock-in"
  • 1.4.4 Highly Stable Operating System
  • 1.4.5 Low Maintenance
  • 1.4.5.1 Supporting Software Releases After Shipping the Product
  • 1.4.5.2 Keeping Your Own Drivers up to Date With the Latest Kernel
  • 1.5 Linux Architecture
  • 1.5.1 Linux Kernel Components
  • 1.5.1.1 Device Driver Framework
  • 1.5.1.2 Schedulers
  • 1.5.1.3 Interrupt
  • 1.5.1.4 Memory Management
  • 1.5.1.5 Communication Protocol Stack
  • 1.5.1.6 User Interface (UI)
  • 1.6 Build Environment
  • 1.6.1 Kernel Compilation
  • 1.6.2 Root Filesystem
  • 1.6.2.1 Yocto
  • 1.7 Customizing Linux
  • 1.7.1 Low Memory Footprint
  • 1.7.2 Boot Performance
  • 1.7.3 High Throughput Performance
  • 1.7.3.1 Core Affinity
  • 1.7.3.2 Interrupt Coalescing
  • 1.7.3.3 User Space Mapping of Buffers
  • 1.7.3.4 User Space Drivers
  • 1.7.4 Latencies
  • 1.8 Linux Development and its Open-Source Ecosystem
  • 1.8.1 Linux Versions
  • 1.8.2 Long-Term Support (LTS) Linux Version
  • 1.8.3 Related Open-Source Communities
  • 1.8.3.1 Linux Foundation
  • 1.8.3.2 Linaro
  • 1.8.4 Linux-Based Distributions
  • 1.8.4.1 Android
  • 1.8.4.2 Ubuntu
  • 1.9 Coding Guidelines
  • 1.10 Code Review in the Upstream Community
  • 1.11 License
  • 2 U-Boot
  • 2.1 U-Boot and its Applicability to Several Types of Devices
  • 2.2 Major Features of U-Boot
  • 2.2.1 Multiple Boot Source Support
  • 2.2.2 Shell (User Interface)
  • 2.2.3 Environment Variables
  • 2.2.4 Scripts
  • 2.2.5 Stand-Alone Applications
  • 2.2.6 Operating System Boot Commands
  • 2.2.7 Autoboot
  • 2.2.8 Sandbox U-Boot
  • 2.3 U-Boot Directory Organization
  • 2.4 U-Boot Architecture and Memory Footprint
  • 2.4.1 Single-Stage Boot Loader
  • 2.4.2 Two-Stage Boot Loader
  • 2.5 Fast Boot Approach
  • 2.6 Secure Boot.
  • 2.7 Supported Architectures and Operating Systems.