Professional embedded ARM development
A practical Wrox guide to ARM programming for mobile devices With more than 90 percent of mobile phones sold in recent years using ARM-based processors, developers are eager to master this embedded technology. If you know the basics of C programming, this guide will ease you into the world of embedd...
Saved in:
| Main Author: | |
|---|---|
| Format: | eBook |
| Language: | English |
| Published: |
Indianapolis
Wiley
2013
John Wiley & Sons, Incorporated Wrox Wiley-Blackwell Wrox/John Wiley & Sons |
| Edition: | 1st ed. |
| Subjects: | |
| ISBN: | 9781118788943, 1118789016, 111878894X, 9781118789018, 1118887824, 9781118887820 |
| Online Access: | Get full text |
| Tags: |
Add Tag
No Tags, Be the first to tag this record!
|
Table of Contents:
- Saturating Arithmetic -- QADD -- QSUB -- QDADD -- QDSUB -- Data Transfer -- LDR -- STR -- Example: memcpy -- Logical -- AND -- EOR -- ORR -- BIC -- CLZ -- Compare -- CMP -- CMN -- TST -- TEQ -- Branch -- B -- BL -- BX -- BLX -- Example: Counting to Zero -- Example: Thumb Interworking -- What Is MOV pc, lr? -- Multiply -- MUL -- MLA -- UMULL -- UMLAL -- SMULL -- SMLAL -- Divide -- SDIV -- UDIV -- Multiple Register Data Transfer -- STM -- LDM -- Barrel Shifter -- LSL -- LSR -- ASR -- ROR -- RRX -- Stack Operations -- PUSH -- POP -- Example: Returning from a Subroutine -- Coprocessor Instructions -- MRC -- MCR -- Miscellaneous Instructions -- SVC -- NOP -- MRS -- MSR -- Summary -- Chapter 8: NEON -- What Are the Advantages of NEON? -- What Data Types Does NEON Support? -- Using NEON in Assembly -- Presenting the Registers -- Loading and Storing Data -- Optimized memcpy -- NEON Instructions -- Using NEON in C -- Presenting Intrinsics -- Using NEON Intrinsics -- Converting an Image to Grayscale -- Summary -- Chapter 9: Debugging -- What Is a Debugger? -- What Can a Debugger Do? -- ARM Debugging Capabilities -- Types of Debugging -- Loops -- Routines -- Interrupt Controllers -- Bootloaders -- Debuggers -- GNU Debugger -- J-Link GDB Debugger -- Example Debugging -- Infinite Loop -- Unknown Exception -- Dividing by Zero -- In-Depth Analysis -- Data Abort -- Corrupted Serial Line -- 64-Bit Calculations -- A Timely Response -- Summary -- Chapter 10: Writing Optimized C -- Rules for Optimized Code -- Don't Start with Optimization -- Know Your Compiler -- Profiling -- Profiling Inside an Operating System -- Profiling on a Bare Metal System -- C Optimizations -- Basic Example -- Count Down, Not Up -- Integers -- Division -- Don't Use Too Many Parameters -- Pointers, Not Objects -- Don't Frequently Update System Memory -- Alignment -- Assembly Optimizations
- JTAG Debug (D) -- Enhanced DSP (E) -- Vector Floating Point (F) -- EmbeddedICE (I) -- Jazelle (J) -- Long Multiply (M) -- Thumb (T) -- Synthesizable (S) -- TrustZone -- NEON -- big.LITTLE -- Summary -- Chapter 4: ARM Assembly Language -- Introduction to Assembly Language -- Talking to a Computer -- Why Learn Assembly? -- Speed -- Size -- Fun! -- Compilers Aren't Perfect -- Understanding Computer Science through Assembly -- Shouldn't You Just Write in Assembly? -- Uses of Assembly -- Writing Bootloaders -- Reverse Engineering -- Optimization -- ARM Assembly Language -- Layout -- Instruction Format -- Condition Codes -- Updating Condition Flags -- Addressing Modes -- ARM Assembly Primer -- Loading and Storing -- Setting Values -- Branching -- Mathematics -- Understanding an Example Program -- Summary -- Chapter 5: First Steps -- Hello World! -- Taking the World Apart -- Hello World, for Real This Time! -- Software Implementation -- Memory Mapping -- Real World Examples -- Silicon Labs STK3800 -- Silicon Labs STK3200 -- Atmel D20 Xplained Pro -- Case Study: U-Boot -- Machine Study: Raspberry Pi -- Boot Procedure -- Compiling Programs for the Raspberry Pi -- What's Next? -- Summary -- Chapter 6: Thumb Instruction Set -- Thumb -- Thumb-2 Technology -- How Thumb Is Executed -- Advantages of Using Thumb -- Cores Using Thumb -- ARM-Thumb Interworking -- Introduction to Thumb-1 -- Register Availability -- Removed Instructions -- No Conditionals -- Set Flags -- No Barrel Shifter -- Reduced Immediates -- Stack Operations -- Introduction to Thumb-2 -- New Instructions -- Coprocessor -- DSP -- FPU -- Writing for Thumb -- Summary -- Chapter 7: Assembly Instructions -- Movement -- MOV -- MVN -- MOVW -- MOVT -- NEG -- Example: Loading a 32-Bit Constant from the Instruction Stream -- Arithmetic -- ADD -- ADC -- SUB -- SBC -- RSB -- RSC -- Example: Basic Math
- Specialized Routines -- Handling Interrupts -- Hardware Configuration Optimizations -- Frequency Scaling -- Configuring Cache -- Summary -- Part 2: Reference -- Appendix A: Terminology -- Branch Prediction -- Cache -- Cache Hit -- Cache Line -- Cache Miss -- Coprocessors -- CP10 -- CP11 -- CP14 -- CP15 -- Cycle -- Exception -- Interrupt -- Jazelle -- JTAG -- MIPS -- NEON -- Out-of-Order Execution -- Pipeline -- Register -- SIMD -- SOC -- Synthesizable -- Trustzone -- Vector Tables -- Appendix B: ARM Architecture Versions -- ARMV1 -- ARMV2 -- ARMV3 -- ARMV4 -- ARMV5 -- ARMV6 -- ARMV6-M -- ARMV7-A/R -- ARMV7-M -- ARMV8 -- Appendix C: ARM Core Versions -- ARM6 -- ARM7 -- ARM7TDMI -- ARM8 -- StrongARM -- ARM9TDMI -- ARM9E -- ARM10 -- XSCALE -- ARM11 -- Cortex -- Cortex-A -- Cortex-R -- Cortex-M -- Appendix D: NEON Intrinsics and Instructions -- Data Types -- Lane Types -- Assembly Instructions -- Intrinsic Naming Conventions -- Appendix E: Assembly Instructions -- ARM Instructions -- Arithmetic Instructions -- Parallel Arithmetic -- Movement -- Load -- Store -- Logical -- Comparison -- Saturate -- Branch -- Extend -- Miscellaneous -- Thumb Instructions on Cortex-M Cores -- Index
- Intro -- Professional Embedded ARM Development -- Copyright -- About the Author -- About the Technical Editors -- Acknowledgments -- Contents -- Introduction -- Who This Book Is For -- What This Book Covers -- How This Book Is Structured -- What You Need to Use This Book -- Conventions -- Source Code -- Errata -- P2P.Wrox.Com -- Part 1: Arm Systems and Development -- Chapter 1: The History of ARM -- The Origin of ARM -- Why Acorn Decided to Create a New Processor -- Why Acorn Became ARM -- Why ARM Doesn't Actually Produce Microprocessors -- ARM Naming Conventions -- How to Tell What Processor You Are Dealing With -- Differences between ARM7TDMI and ARM926EJ-S -- Differences between ARM7 and ARMv7 -- Differences between Cortex-M and Cortex-A -- Manufacturer Documentation -- What Is ARM Doing Today? -- Summary -- Chapter 2: ARM Embedded Systems -- ARM Embedded Systems Defined -- What Is a System on Chip? -- What's the Difference between Embedded Systems and System Programming? -- Why Is Optimization So Important? -- What Is the Advantage of a R ISC Architecture? -- Choosing the Right Processor -- What Should You Start With? -- What Boards Are Available? -- What Operating Systems Exist? -- Which Compiler Is Best Suited to My Purpose? -- Getting Ready for Debugging -- Are There Any Complete Development Environments? -- Is There Anything Else I Need to Know? -- Summary -- Chapter 3: ARM Architecture -- Understanding the Basics -- Register -- Stack -- Internal RAM -- Cache -- Getting to Know the Different ARM Subsystems -- Presenting the Processor Registers -- Presenting the CPSR -- Calculation Unit -- Pipeline -- Tightly Coupled Memory -- Coprocessors -- Understanding the Different Concepts -- What Is an Exception? -- Handling Different Exceptions -- Modes of Operation -- Vector Table -- Memory Management -- Presenting Different Technologies

