1 option
Software engineering for embedded systems : methods, practical techniques, and applications / edited by Robert Oshana, Mark Kraeling.
- Format:
- Book
- Author/Creator:
- Oshana, Robert, author.
- Language:
- English
- Subjects (All):
- Software engineering.
- Embedded computer systems.
- Physical Description:
- 1 online resource (648 pages) : illustrations
- Edition:
- Second edition.
- Place of Publication:
- Oxford : Elsevier, [2019]
- System Details:
- text file
- Summary:
- 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 gives an indispensable aid on how to tackle the day-to-day problems encountered when using software engineering methods to develop embedded systems. New sections cover peripheral programming, Internet of things, security and cryptography, networking and packet processing, and hands on labs. Users will learn about the principles of good architecture for an embedded system, design practices, details on principles, and much more. Provides a roadmap of key problems/issues and references to their solution in the text Reviews core methods and how to apply them Contains examples that demonstrate timeless implementation details Users case studies to show how key ideas can be implemented, the rationale for choices made, and design guidelines and trade-offs
- Contents:
- 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
- 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.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.
- Notes:
- Includes bibliographical references and index.
- Description based on online resource; title from PDF title page (ebrary, viewed July 1, 2019).
- ISBN:
- 9780128094334
- 0128094338
- OCLC:
- 1108874717
The Penn Libraries is committed to describing library materials using current, accurate, and responsible language. If you discover outdated or inaccurate language, please fill out this feedback form to report it and suggest alternative language.