VxWorks Programmer’s Guide

Content Overview

This book is one of the “VxWorks Developer’s Guide Series”: the VxWorks Programmer’s Guide, translated from the technical documentation “VxWorks Programmer’s Guide” by Wind River.

Main topics include: Introduction to VxWorks, fundamentals of operating systems, POSIX standard interfaces, input/output interface technologies, local file systems, usage of target debugging tools, C++ development techniques, flash memory module driver design and applications, VxDCOM applications, distributed message queues, standard storage objects, virtual memory interfaces, and more.

This book is written in a clear and organized manner, with detailed content aimed at embedded system developers working with the VxWorks operating system as the core kernel. It serves as a guide for understanding VxWorks and applying it in development projects.

Click “Read the original text” to download the eBook!

Chapter 1  Introduction
1.1  Overview
1.2  Related Document Resources
1.3  VxWorks Configuration and Setup
1.4  Wind River Code Conventions
1.5  Documentation Conventions
Chapter 2  Basic Operating System
2.1  Introduction
2.2  VxWorks Tasks
2.2.1  Multitasking
2.2.2  Task State Transitions
2.2.3  Wind Task Scheduling
2.2.4  Task Control
2.2.5  Task Extension Functions
2.2.6  Task Error States: errno
2.2.7  Task Exception Handling
2.2.8  Shared Code and Reentrancy
2.2.9  VxWorks Operating System Tasks
2.3  Inter-Task Communication
2.3.1  Shared Data Structures
2.3.2  Mutexes
2.3.3  Semaphores
2.3.4  Message Queues
2.3.5  Pipes
2.3.6  Inter-Task Network Communication
2.3.7  Signals
2.4  VxWorks Events
2.4.1  pSOS Events
2.4.2  VxWorks Events
2.4.3  API Comparison
2.5  Watchdog Timers
2.6  Interrupt Service Code: Interrupt Service Routines
2.6.1  Interrupt Handler Connection
2.6.2  Interrupt Stack
2.6.3  Writing and Debugging Interrupt Service Routines
2.6.4  Special Restrictions on Interrupt Service Routines
2.6.5  High-Level Interrupts
2.6.6  Reserved High-Level Interrupts
2.6.7  Additional Restrictions on High-Level Interrupt Service Routines
2.6.8  Interrupts and Task Communication
Chapter 3  POSIX Standard Interfaces
3.1  Introduction
3.2  POSIX Clocks and Timers
3.3  POSIX Memory Locking Interfaces
3.4  POSIX Threads
3.4.1  POSIX Thread Attributes
3.4.2  Thread Private Data
3.4.3  Thread Cancellation
3.5  POSIX Scheduling Interfaces
3.5.1  Comparison of POSIX and Wind Scheduling Methods
3.5.2  Getting and Setting POSIX Task Priorities
3.5.3  Getting and Displaying Current Scheduling Policies
3.5.4  Getting Scheduling Parameters: Priority Limits and Time Slices
3.6  POSIX Semaphores
3.6.1  Comparison of POSIX and Wind Semaphores
3.6.2  Using Unnamed Semaphores
3.6.3  Using Named Semaphores
3.7  POSIX Mutexes and Condition Variables
3.8  POSIX Message Queues
3.8.1  Comparison of POSIX and Wind Message Queues
3.8.2  POSIX Message Queue Attributes
3.8.3  Displaying Message Queue Attributes
3.8.4  Communicating with Message Queues
3.8.5  Notifying Tasks of Waiting Messages
3.9  POSIX Queue Signals
Chapter 4  Input/Output System
4.1  Introduction
4.2  Files, Devices, and Drivers
4.2.1  File Names and Default Device Types
4.3  Basic I/O Interfaces
4.3.1  File Descriptors
4.3.2  Standard Input, Output, and Error Devices
4.3.3  Opening and Closing File Operations
4.3.4  Creating and Deleting File Operations
4.3.5  Read and Write Operations
4.3.6  File Truncation Operations
4.3.7  I/O Control Operations
4.3.8  Multi-File Descriptor Based Suspend Operations: Select Functionality
4.4  Buffered I/O Devices: stdio
4.4.1  Using stdio Devices
4.4.2  Standard Input, Output, and Error Devices
4.5  Other Formatted I/O Operations
4.5.1  Special Cases: printf(), sprintf(), and sscanf() Functions
4.5.2  Other Functions: printErr() and fdprintf() Functions
4.5.3  Information Logging
4.6  Asynchronous Input/Output Operations
4.6.1  POSIX Standard Asynchronous Input/Output Programs
4.6.2  Asynchronous Input/Output Control Blocks
4.6.3  Using Asynchronous Input/Output Operations
4.7  Devices in the VxWorks Operating System
4.7.1  Serial I/O Devices (Terminals and Pseudo-Terminal Devices)
4.7.2  Pipe Devices
4.7.3  Pseudo Storage Devices
4.7.4  Network File System (NFS) Devices
4.7.5  Non-NFS Network Devices
4.7.6  CBIO Interface
4.7.7  Block Access Devices
4.7.8  Sockets
4.8  Differences Between I/O Systems in VxWorks and Host Operating Systems
4.9  Internal Structure
4.9.1  Drivers
4.9.2  Driver Devices
4.9.3  File Descriptors
4.9.4  Block Access Devices
4.9.5  Driver Support Libraries
4.10  PCMCIA Interface
4.11  External Device Interconnection Interface: PCI
Chapter 5  Local File System
5.1  Introduction
5.2  MS-DOS Compatible File System: dosFs File System
5.2.1  Creating dosFs File System
5.2.2  Configuring User Systems
5.2.3  Initializing dosFs File System
5.2.4  Creating Block Access Devices
5.2.5  Creating Disk Buffers
5.2.6  Creating and Using Disk Partitions
5.2.7  Creating dosFs File System Devices
5.2.8  Formatting Disk Volumes
5.2.9  Mounting Disk Volumes
5.2.10  Examples
5.2.11  Operating on Disks and Disk Volumes
5.2.12  Directory Operations
5.2.13  File Operations
5.2.14  Methods for Allocating Disk Space
5.2.15  Disaster Recovery and Disk Volume Consistency Issues
5.2.16  I/O Control Functions Supported by dosFsLib Files
5.3  Booting from Local dosFs File System Using SCSI Devices
5.4  Raw File System: rawFs File System
5.4.1  Disk Organization
5.4.2  Initializing rawFs File System
5.4.3  Configuring Devices to Use rawFs File System
5.4.4  Mounting Disk Volumes
5.4.5  File I/O Operations
5.4.6  Changing Disks
5.4.7  I/O Control Functions Supported by rawFsLib Files
5.5  Tape File System: tapeFs File System
5.5.1  Organization in Tapes
5.5.2  Initializing tapeFs File System
5.5.3  Mounting Tape Volumes
5.5.4  File I/O Operations
5.5.5  Changing Disks
5.5.6  I/O Control Functions Supported by tapeFsLib Files
5.6  CD-ROM File System: cdromFs
5.7  Target Server File System: TSFS
Chapter 6  Target Machine Tools
6.1  Introduction
6.2  Target Machine Based Shell
6.2.1  Differences Between Host and Target Machine Shells
6.2.2  Configuring VxWorks with Target Machine Shell
6.2.3  Help and Control Characters in Target Machine Shell
6.2.4  Loading and Unloading Target Modules from Target Machine Shell
6.2.5  Debugging Target Machine Shell
6.2.6  Terminating Programs Running in Target Machine Shell
6.2.7  Remote Login to Target Machine Shell
6.2.8  Allocating Demangler
6.3  Target Machine Based Loader
6.3.1  Configuring VxWorks Loader
6.3.2  Target Machine-Loader API
6.3.3  Summary of Loader Options
6.3.4  Loading C++ Modules
6.3.5  Specifying Memory Allocation for Loaded Modules
6.3.6  Limitations Affecting Loader Behavior
6.4  Target Machine Based Symbol Table
6.4.1  Configuring VxWorks System Symbol Table
6.4.2  Generating an Internal System Symbol Table
6.4.3  Generating a Downloadable System Symbol Table
6.4.4  Using VxWorks System Symbol Table
6.4.5  Synchronizing Host and Target Machine Symbol Tables
6.4.6  Generating User Symbol Tables
6.5  Demonstration Functions
6.6  Common Issues
Chapter 7  C++ Language Development
7.1  Introduction
7.2  Using C++ Language in VxWorks System
7.2.1  Implementing C Code Accessible from C++
7.2.2  Adding Support Components
7.2.3  C++ Combinators
7.3  Initializing and Determining Static Targets
7.3.1  Refining (munch) C++ Application Modules
7.3.2  Interactively Calling Static Constructors and Destructors
7.4  Using GNU C++ Programming
7.4.1  Template Instantiation
7.4.2  Exception Handling
7.4.3  Run-Time Type Information
7.4.4  Namespaces
7.5  Using Diab C++ Programming
7.5.1  Template Instantiation
7.5.2  Exception Handling
7.5.3  Run-Time Type Information
7.6  Using C++ Libraries
7.7  Running Example Demonstrations
Chapter 8  Flash Block Device Drivers
8.1  Introduction
8.1.1  Choosing TrueFFS as the Medium
8.1.2  TrueFFS Layer
8.2  Building Systems Supporting TrueFFS
8.3  Selecting MTD Components
8.4  Determining Socket Drivers
8.5  Setting Up and Building Projects
8.5.1  Including File System Components
8.5.2  Including Core Components
8.5.3  Including Application Components
8.5.4  Including MTD Components
8.5.5  Including Conversion Layers
8.5.6  Adding Socket Drivers
8.5.7  Building System Projects
8.6  Device Formatting
8.6.1  Specifying Drive Numbers
8.6.2  Formatting Devices
8.7  Creating Areas for Writing Boot Images
8.7.1  Write-Protecting Flash Memory
8.7.2  Creating Boot Image Areas
8.7.3  Writing Boot Images to Flash Memory
8.8  Installing Drivers
8.9  Running Shell Commands
8.10  Writing Socket Drivers
8.10.1  Transmitting Socket Driver Stub Files
8.10.2  Understanding Socket Driver Functionality
8.11  Using MTD Supported Flash Devices
8.11.1  Supporting Common Flash Interfaces (CFI)
8.11.2  Supporting Other MTDs
8.11.3  Obtaining Support for On-Chip Disks
8.12  Writing MTD Components
8.12.1  Writing MTD Identification Functions
8.12.2  Writing MTD Mapping Functions
8.12.3  Writing MTD Read, Write, and Erase Functions
8.12.4  Defining MTD as Components
8.12.5  Registering Identification Functions
8.13  Flash Memory Functionality
8.13.1  Block Allocation and Data Strings
8.13.2  Read and Write Operations
8.13.3  Erase Cycles and Garbage Collection
8.13.4  Optimization Methods
8.13.5  Fault Recovery in TrueFFS
Chapter 9  VxDCOM Applications
9.1  Introduction
9.2  Overview of COM Technology
9.2.1  COM Components and Software Reusability
9.2.2  VxDCOM and Real-Time Distributed Technology
9.3  Using Wind Target Template Library
9.3.1  Classification of WOTL Template Classes
9.3.2  CoClass True Template Class
9.3.3  Lightweight Object Class Template
9.3.4  Single Instance Class Macro
9.4  Reading WOTL-Generated Code
9.4.1  WOTL CoClass Definitions
9.4.2  Macro Definitions Used in Generated Files
9.4.3  Interface Mapping
9.5  Configuring DCOM Performance Parameters
9.6  Using Wind IDL Compiler
9.6.1  Command Line Format
9.6.2  Generated Code
9.6.3  Data Types
9.7  Reading IDL Files
9.7.1  IDL File Structure
9.7.2  Defining Properties
9.8  Adding Real-Time Extensions
9.8.1  Using Priority Schemes on VxWorks
9.8.2  Configuring Client Priority Transfer on Windows
9.8.3  Using Thread Pools
9.9  Using OPC Interfaces
9.10  Writing VxDCOM Server and Client Applications
9.10.1  Programming
9.10.2  Writing Service Programs
9.10.3  Writing Client Code
9.10.4  Querying Servers
9.10.5  Executing Client Code
9.11  Comparing VxDCOM and ATL Execution
9.11.1  CcomObjectRoot
9.11.2  CcomClassFactory
9.11.3  CcomCoClass
9.11.4  CcomObject
9.11.5  CComPtr
9.11.6  CComBSTR
9.11.7  VxComBSTR
9.11.8  Ccom Variant
Chapter 10  Distributed Information Queues
10.1  Introduction
10.2  Configuring VxWorks with VxFusion
10.3  Using VxFusion
10.3.1  System Architecture of VxFusion
10.3.2  Initializing VxFusion
10.3.3  Configuring VxFusion
10.3.4  Distributed Name Database
10.3.5  Operating Distributed Information Queues
10.3.6  Operating Group Information Queues
10.3.7  Operating Adapters
10.4  System Limitations
10.5  Node Startup
10.6  Messages and Notifications
10.6.1  Comparison of Messages and Notifications
10.6.2  Message Buffers
10.7  Designing Adapters
10.7.1  Designing Network Headers
10.7.2  Writing an Initialization Program
10.7.3  Writing a Startup Program
10.7.4  Writing a Sending Program
10.7.5  Writing an Input Program
10.7.6  Writing an I/O Control Program
Chapter 11  Shared Memory Objects
11.1  Introduction
11.2  Using Shared Memory Objects
11.2.1  Name Database
11.2.2  Shared Semaphores
11.2.3  Shared Message Queues
11.2.4  Shared Memory Allocators
11.3  Internal Considerations
11.3.1  System Requirements
11.3.2  Spin Lock Mechanism
11.3.3  Interrupt Latency
11.3.4  Constraints
11.3.5  Cache Coherency
11.4  Configuration
11.4.1  Shared Memory Objects and Shared Memory Network Drivers
11.4.2  Shared Memory Areas
11.4.3  Initializing Shared Memory Object Packages
11.4.4  Configuration Examples
11.4.5  Initialization Steps
11.5  Fault Discovery and Solutions
11.5.1  Configuration Issues
11.5.2  Tips for Discovering and Resolving Faults
Chapter 12  Virtual Memory Interfaces
12.1  Introduction
12.2  Basic Virtual Memory Support
12.3  Virtual Memory Configuration
12.4  General Applications
12.5  Using Programmatic MMU
12.5.1  Virtual Memory Contexts
12.5.2  Private Virtual Memory
12.5.3  Non-Cached Memory Areas
12.5.4  Non-Writable Memory
12.5.5  Fault Checking
12.5.6  Issues to Watch Out For

Leave a Comment