ARM® Developer Suite Version 1.2 Developer Guide Copyright ©1999-2001 ARM Limited. All rights reserved. ARM DUI 0056D ARM Developer Suite Developer Guide Copyright ©1999-2001 ARM Limited. All rights reserved. Release Information The following changes have been made to this book. Change History Date Issue Change October 1999 A Release 1.0 March 2000 B Release 1.0.1 November 2000 C Release 1.1 November 2001 D Release 1.2 Proprietary Notice Words and logos marked with ® or ™ are registered trademarks or trademarks owned by ARM Limited. Other brands and names mentioned herein may be the trademarks of their respective owners. Neither the whole nor any part of the information contained in, or the product described in, this document may be adapted or reproduced in any material form except with the prior written permission of the copyright holder. The product described in this document is subject to continuous developments and improvements. All particulars of the product and its use contained in this document are given by ARM in good faith. However, all warranties implied or expressed, including but not limited to implied warranties of merchantability, or fitness for purpose, are excluded. This document is intended only to assist the reader in the use of the product. ARM Limited shall not be liable for any loss or damage arising from the use of any information in this document, or any error or omission in such information, or any incorrect use of the product. ii Copyright ©1999-2001 ARM Limited. All rights reserved. ARM DUI 0056D Contents ARM Developer Suite Developer Guide Preface About this book ............................................................................................ viii Feedback ...................................................................................................... xii Chapter 1 Introduction 1.1 About the ARM Developer Guide ................................................................ 1-2 1.2 General programing issues ......................................................................... 1-4 1.3 Developing for the ARM .............................................................................. 1-5 Chapter 2 Using the Procedure Call Standard 2.1 About the ARM-Thumb Procedure Call Standard ....................................... 2-2 2.2 Register roles and names ........................................................................... 2-4 2.3 The stack .................................................................................................... 2-6 2.4 Parameter passing ...................................................................................... 2-9 2.5 Stack limit checking .................................................................................. 2-11 2.6 Read-only position independence ............................................................. 2-14 2.7 Read-write position independence ............................................................ 2-15 2.8 Interworking between ARM and Thumb states ......................................... 2-16 2.9 Floating-point options ................................................................................ 2-17 Chapter 3 Interworking ARM and Thumb 3.1 About interworking ...................................................................................... 3-2 ARM DUI 0056D Copyright ©1999-2001 ARM Limited. All rights reserved. iii Contents 3.2 Assembly language interworking ................................................................ 3-6 3.3 C and C++ interworking and veneers ....................................................... 3-11 3.4 Assembly language interworking using veneers ...................................... 3-15 Chapter 4 Mixing C, C++, and Assembly Language 4.1 Using the inline assemblers ........................................................................ 4-2 4.2 Accessing C global variables from assembly code .................................. 4-14 4.3 Using C header files from C++ ................................................................. 4-15 4.4 Calling between C, C++, and ARM assembly language ........................... 4-17 Chapter 5 Handling Processor Exceptions 5.1 About processor exceptions ....................................................................... 5-2 5.2 Entering and leaving an exception ............................................................. 5-5 5.3 Installing an exception handler ................................................................... 5-9 5.4 SWI handlers ............................................................................................ 5-14 5.5 Interrupt handlers ..................................................................................... 5-23 5.6 Reset handlers ......................................................................................... 5-33 5.7 Undefined Instruction handlers ................................................................. 5-34 5.8 Prefetch Abort handler .............................................................................. 5-35 5.9 Data Abort handler ................................................................................... 5-36 5.10 Chaining exception handlers .................................................................... 5-38 5.11 Handling exceptions on Thumb-capable processors ................................ 5-40 5.12 System mode ............................................................................................ 5-45 Chapter 6 Writing Code for ROM 6.1 About writing code for ROM ....................................................................... 6-2 6.2 Memory map considerations ...................................................................... 6-4 6.3 Initializing the system ................................................................................. 6-7 6.4 The reference C example using semihosting ........................................... 6-11 6.5 Loading the ROM image at address 0 ...................................................... 6-14 6.6 Using both scatter loading and remapping ............................................... 6-24 6.7 A semihosted application with interrupt handling .................................... 6-28 6.8 An embeddable application with interrupt handling .................................. 6-33 6.9 Using scatter loading with memory-mapped I/O ....................................... 6-36 6.10 Troubleshooting ........................................................................................ 6-43 6.11 Measuring code and data size .................................................................. 6-46 Chapter 7 Caches and Tightly Coupled Memories 7.1 About caches and tightly coupled memory ................................................. 7-2 7.2 System control coprocessor ....................................................................... 7-4 7.3 Memory protection units ............................................................................. 7-5 7.4 Configuring a PU ........................................................................................ 7-7 7.5 Memory management units ...................................................................... 7-12 7.6 Configuring an MMU ................................................................................. 7-16 7.7 Tightly coupled memory ........................................................................... 7-19 iv Copyright ©1999-2001 ARM Limited. All rights reserved. ARM DUI 0056D Contents Chapter 8 Debug Communications Channel 8.1 About the Debug Communications Channel ............................................... 8-2 8.2 Command-line debugging commands ........................................................ 8-3 8.3 Enabling comms channel viewing ............................................................... 8-4 8.4 Target transfer of data ................................................................................ 8-5 8.5 Polled debug communications .................................................................... 8-6 8.6 Interrupt-driven debug communications .................................................... 8-12 8.7 Access from Thumb state ......................................................................... 8-13 8.8 Semihosting .............................................................................................. 8-14 Glossary ARM DUI 0056D Copyright ©1999-2001 ARM Limited. All rights reserved. v Contents vi Copyright ©1999-2001 ARM Limited. All rights reserved. ARM DUI 0056D Preface This preface introduces the ARM Developer Suite (ADS) Developer Guide. It contains the following sections: (cid:129) About this book on pageviii (cid:129) Feedback on pagexii. ARM DUI 0056D Copyright ©1999-2001 ARM Limited. All rights reserved. vii Preface About this book This book provides tutorial information on writing code targeted at the ARM family of processors. Intended audience This book is written for all developers writing code for the ARM. It assumes that you are an experienced software developer, and that you are familiar with the ARM development tools as described in ADS Getting Started. Using this book This book is organized into the following chapters: Chapter1 Introduction Read this chapter for an introduction to the ARM Developer Suite (ADS). Chapter2 Using the Procedure Call Standard Read this chapter for details of how to use the ARM/Thumb® Procedure Call Standard. Using this standard makes it easier to ensure that separately compiled and assembled modules work together. Chapter3 Interworking ARM and Thumb Read this chapter for details of how to change between ARM state and Thumb state when writing code for processors that implement the Thumb instruction set. Chapter4 Mixing C, C++, and Assembly Language Read this chapter for details of how to write mixed C, C++, and ARM assembly language code. It also describes how to use the ARM inline assemblers from C and C++. Chapter5 Handling Processor Exceptions Read this chapter for details of how to handle the various types of exception supported by ARM processors. Chapter6 Writing Code for ROM Read this chapter for details on building ROM images. These can be used in, for example, embedded applications. There are also hints on how to avoid the most common errors in writing code for ROM. viii Copyright ©1999-2001 ARM Limited. All rights reserved. ARM DUI 0056D Preface Chapter7 Caches and Tightly Coupled Memories Read this chapter for a description of caches and tightly coupled memory on ARM systems. Chapter8 Debug Communications Channel Read this chapter for a description of how to use the Debug Communications Channel (DCC). Typographical conventions The following typographical conventions are used in this book: monospace Denotes text that can be entered at the keyboard, such as commands, file and program names, and source code. monospace Denotes a permitted abbreviation for a command or option. The underlined text can be entered instead of the full command or option name. monospace italic Denotes arguments to commands and functions where the argument is to be replaced by a specific value. monospace bold Denotes language keywords when used outside example code. italic Highlights important notes, introduces special terminology, denotes internal cross-references, and citations. bold Highlights interface elements, such as menu names. Also used for emphasis in descriptive lists, where appropriate, and for ARM processor signal names. Further reading This section lists publications from both ARM Limited and third parties that provide additional information on developing code for the ARM family of processors. ARM periodically provides updates and corrections to its documentation. See http://www.arm.com for current errata sheets and addenda. See also the ARM Frequently Asked Questions list at: http://www.arm.com/DevSupp/Sales+Support/faq.html ARM DUI 0056D Copyright ©1999-2001 ARM Limited. All rights reserved. ix Preface ARM publications This book contains general information on developing applications for the ARM family of processors. Refer to the following books in the ADS document suite for information on other components: (cid:129) ADS Installation and License Management Guide (ARM DUI 0139) (cid:129) ADS Assembler Guide (ARM DUI 0068) (cid:129) CodeWarrior IDE Guide (ARM DUI 0065) (cid:129) ADS Compilers and Libraries Guide (ARM DUI 0067) (cid:129) ADS Linker and Utilities Guide (ARM DUI 0151) (cid:129) AXD and armsd Debuggers Guide (ARM DUI 0066) (cid:129) ADS Debug Target Guide (ARM DUI 0058) (cid:129) Getting Started (ARM DUI 0064). The following additional documentation is provided with the ARM Developer Suite: (cid:129) *** Set the Book and Collection attributes to a supported combination *** (ARM DDI 0100). This is supplied in DynaText and PDF format. (cid:129) ARM Applications Library Programmer’s Guide. This is supplied in DynaText and PDF format. (cid:129) ARM ELF specification (SWS ESPC 0003). This is supplied in PDF format in install_directory\PDF\specs\ARMELF.pdf. (cid:129) ARM Firmware Suite User Guide (ARM DUI 0136). This is supplied in DynaText and PDF format. (cid:129) ARM Firmware Suite Reference Guide (ARM DUI 0102). This is supplied in DynaText and PDF format. (cid:129) TIS DWARF 2 specification. This is supplied in PDF format in install_directory\PDF\specs\TIS-DWARF2.pdf. (cid:129) ARM/Thumb Procedure Call Standard specification (SWS ESPC 0002). This is supplied in PDF format in install_directory\PDF\specs\ATPCS.pdf. In addition, refer to the following documentation for specific information relating to ARM products: (cid:129) ARM Reference Peripheral Specification (ARM DDI 0062) (cid:129) the ARM datasheet or technical reference manual for your hardware device. x Copyright ©1999-2001 ARM Limited. All rights reserved. ARM DUI 0056D
Description: