1. Installing Dynamic C
- 1.1 Requirements
- 1.2 Assumptions
2. Introduction to Dynamic C
- 2.1 The Nature of Dynamic C
- 2.1.1 Speed
- 2.2 Dynamic C Enhancements and Differences
- 2.3 Dynamic C Differences Between Rabbit and Z180
3. Quick Tutorial
- 3.1 Run DEMO1.C
- 3.1.1 Single Stepping
- 3.1.2 Watch Expression
- 3.1.3 Breakpoint
- 3.1.4 Editing the Program
- 3.2 Run DEMO2.C
- 3.2.1 Watching Variables Dynamically
- 3.3 Run DEMO3.C
- 3.3.1 Cooperative Multitasking
- 3.4 Summary of Features
4. Language
- 4.1 C Language Elements
- 4.2 Punctuation Tokens
- 4.3 Data
- 4.3.1 Data Type Limits
- 4.4 Names
- 4.5 Macros
- 4.5.1 Macro Operators # and ##
- 4.5.2 Nested Macro Definitions
- 4.5.3 Macro Restrictions
- 4.6 Numbers
- 4.7 Strings and Character Data
- 4.7.1 String Concatenation
- 4.7.2 Character Constants
- 4.8 Statements
- 4.9 Declarations
- 4.10 Functions
- 4.11 Prototypes
- 4.12 Type Definitions
- 4.13 Aggregate Data Types
- 4.13.1 Array
- 4.13.2 Structure
- 4.13.3 Union
- 4.13.4 Composites
- 4.14 Storage Classes
- 4.15 Pointers
- 4.16 Far Pointers and Far Data
- 4.16.1 The far Qualifier
- 4.16.2 Basic Declarations
- 4.16.3 Multi-Level Far Pointers
- 4.16.4 Arrays and Structures
- 4.16.5 Complex Declarations
- 4.16.6 Sample Programs
- 4.17 Pointers to Functions, Indirect Calls
- 4.18 Argument Passing
- 4.19 Program Flow
- 4.19.1 Loops
- 4.19.2 Continue and Break
- 4.19.3 Branching
- 4.20 Function Chaining
- 4.21 Global Initialization
- 4.22 Libraries
- 4.22.1 LIB.DIR
- 4.23 Headers
- 4.24 Modules
- 4.24.1 The Parts of a Module
- 4.24.2 Module Sample Code
- 4.24.3 Important Notes
- 4.25 Function Description Headers
- 4.26 Support Files
5. Multitasking with Dynamic C
- 5.1 Cooperative Multitasking
- 5.2 A Real-Time Problem
- 5.2.1 Solving the Real-Time Problem with a State Machine
- 5.3 Costatements
- 5.3.1 Solving the Real-Time Problem with Costatements
- 5.3.2 Costatement Syntax
- 5.3.3 Control Statements
- 5.4 Advanced Costatement Topics
- 5.4.1 The CoData Structure
- 5.4.2 CoData Fields
- 5.4.3 Pointer to CoData Structure
- 5.4.4 Functions for Use With Named Costatements
- 5.4.5 Firsttime Functions
- 5.4.6 Shared Global Variables
- 5.5 Cofunctions
- 5.5.1 Cofunction Syntax
- 5.5.2 Calling Restrictions
- 5.5.3 CoData Structure
- 5.5.4 Firsttime Functions
- 5.5.5 Types of Cofunctions
- 5.5.6 Types of Cofunction Calls
- 5.5.7 Special Code Blocks
- 5.5.8 Solving the Real-Time Problem with Cofunctions
- 5.6 Patterns of Cooperative Multitasking
- 5.7 Timing Considerations
- 5.7.1 waitfor Accuracy Limits
- 5.8 Overview of Preemptive Multitasking
- 5.9 Slice Statements
- 5.9.1 Slice Syntax
- 5.9.2 Usage
- 5.9.3 Restrictions
- 5.9.4 Slice Data Structure
- 5.9.5 Slice Internals
- 5.10 µC/OS-II
- 5.10.1 Changes to µC/OS-II
- 5.10.2 Tasking Aware Interrupt Service Routines (TA-ISR)
- 5.10.3 Library Reentrancy
- 5.10.4 How to Get a µC/OS-II Application Running
- 5.10.5 Compatibility with TCP/IP
- 5.10.6 Debugging Tips
- 5.11 Summary
6. Debugging with Dynamic C
- 6.1 Debugging Features of Dynamic C
- 6.2 Debugging Tools
- 6.2.1 printf()
- 6.2.2 Software Breakpoints
- 6.2.3 Hardware Breakpoints
- 6.2.4 Single Stepping
- 6.2.5 Watch Expressions
- 6.2.6 Evaluate Expressions
- 6.2.7 Memory Dump
- 6.2.8 MAP File
- 6.2.9 Symbolic Stack Trace
- 6.2.10 Assert Macro
- 6.2.11 Miscellaneous Debugging Tools
- 6.3 Where to Look for Debugger Features
- 6.3.1 Run and Inspect Menus
- 6.3.2 Options Menu
- 6.3.3 Window Menu
- 6.4 Debug Strategies
- 6.4.1 Good Programming Practices
- 6.4.2 Finding the Bug
- 6.5 Reference to Other Debugging Information
7. The Virtual Driver
- 7.1 Default Operation
- 7.2 Calling _GLOBAL_INIT()
- 7.3 Global Timer Variables
- 7.3.1 Example: Timing Loop
- 7.3.2 Example: Delay Loop
- 7.4 Watchdog Timers
- 7.4.1 Hardware Watchdog
- 7.4.2 Virtual Watchdogs
- 7.5 Preemptive Multitasking Drivers
8. The Slave Port Driver
- 8.1 Slave Port Driver Protocol
- 8.1.1 Overview
- 8.1.2 Registers on the Slave
- 8.1.3 Polling and Interrupts
- 8.1.4 Communication Channels
- 8.2 Functions
- 8.3 Examples
- 8.3.1 Status Handler
- 8.3.2 Serial Port Handler
- 8.3.3 Byte Stream Handler
9. Run-Time Errors
- 9.1 Run-Time Error Handling
- 9.1.1 Error Code Ranges
- 9.1.2 Fatal Error Codes
- 9.2 User-Defined Error Handler
- 9.2.1 Replacing the Default Handler
- 9.3 Run-Time Error Logging
- 9.3.1 Error Log Buffer
- 9.3.2 Initialization and Defaults
- 9.3.3 Configuration Macros
- 9.3.4 Error Logging Functions
- 9.3.5 Examples of Error Log Use
10. Memory Management
- 10.1 Memory Map
- 10.1.1 Memory Mapping Control
- 10.1.2 Macro to Use Second Flash for Code
- 10.2 Extended Memory Functions
- 10.3 Code Placement in Memory
- 10.4 Dynamic Memory Allocation
11. Direct Memory Access
- 11.1 DMA Registers and Global Resources
- 11.2 API Functions
- 11.3 DMA Interrupts
- 11.4 DMA Transfer Information
- 11.4.1 DMA Transfer Priority
- 11.4.2 DMA Transfer Mode
- 11.4.3 DMA Transfer Functions
- 11.4.4 DMA Transfer Function Flags
- 11.5 DMA with Ethernet
12. FAT File System
- 12.1 Overview of FAT Documentation
- 12.2 Running Your First FAT Sample Program
- 12.2.1 Bringing Up the File System
- 12.2.2 Using the File System
- 12.3 More Sample Programs
- 12.3.1 Blocking Sample
- 12.3.2 Non-Blocking Sample
- 12.4 FAT Operations
- 12.4.1 Format and Partition the Device
- 12.4.2 File and Directory Operations
- 12.4.3 Error Handling
- 12.5 More FAT Information
- 12.5.1 Clusters and Sectors
- 12.5.2 The Master Boot Record
- 12.5.3 FAT Partitions
- 12.5.4 Directory and File Names
- 12.5.5 µC/OS-II and FAT Compatibility
- 12.5.6 SF1000 and FAT Compatibility
- 12.5.7 Hot-Swapping an xD Card
- 12.5.8 Hot-Swapping an SD Card
- 12.5.9 Unsupported FAT Features
- 12.5.10 References
13. Using Assembly Language
- 13.1 Mixing Assembly and C
- 13.1.1 Embedded Assembly Syntax
- 13.1.2 Embedded C Syntax
- 13.1.3 Setting Breakpoints in Assembly
- 13.1.4 Assembly and 32-bit Pointer Registers (PW, PX, PY, PZ)
- 13.2 Assembler and Preprocessor
- 13.2.1 Comments
- 13.2.2 Defining Constants
- 13.2.3 Multiline Macros
- 13.2.4 Labels
- 13.2.5 Special Symbols
- 13.2.6 C Variables
- 13.3 Stand-Alone Assembly Code
- 13.3.1 Stand-Alone Assembly Code in Extended Memory
- 13.3.2 Example of Stand-Alone Assembly Code
- 13.4 Embedded Assembly Code
- 13.4.1 The Stack Frame
- 13.4.2 Embedded Assembly Example
- 13.4.3 The Disassembled Code Window
- 13.4.4 Local Variable Access
- 13.5 C Calling Assembly
- 13.5.1 Passing Parameters
- 13.5.2 Location of Return Results
- 13.5.3 Returning a Structure
- 13.6 Assembly Calling C
- 13.7 Interrupt Routines in Assembly
- 13.7.1 Steps Followed by an ISR
- 13.7.2 Modifying Interrupt Vectors
- 13.8 Common Problems
14. Keywords
- abandon
- abort
- align
- always_on
- anymem
- asm
- auto
- bbram
- break
- c
- case
- char
- cofunc
- const
- continue
- costate
- debug
- default
- do
- else
- enum
- extern
- far
- firsttime
- float
- for
- goto
- if
- init_on
- int
- interrupt
- __lcall__
- long
- main
- nodebug
- norst
- nouseix
- NULL
- protected
- register
- return
- root
- scofunc
- segchain
- shared
- short
- size
- sizeof
- speed
- static
- struct
- switch
- typedef
- union
- unsigned
- useix
- waitfor
- waitfordone (wfd)
- while
- xdata
- xmem
- void
- volatile
- xstring
- yield
- 14.1 Compiler Directives
- #asm
- #class
- #debug #nodebug
- #define
- #endasm
- #error
- #fatal
- #funcchain
- #GLOBAL_INIT
- #if #elif #else #endif
- #ifdef
- #ifndef
- #interleave #nointerleave
- #makechain
- #memmap
- #pragma
- #precompile
- #undef
- #use
- #useix #nouseix
- #warns
- #warnt
- #ximport
- #zimport
15. Operators
- 15.1 Arithmetic Operators
- +
- -
- *
- /
- ++
- --
- %
- 15.2 Assignment Operators
- =
- +=
- -=
- *=
- /=
- %=
- <<=
- >>=
- &=
- ^=
- |=
- 15.3 Bitwise Operators
- <<
- >>
- &
- ^
- |
- ~
- 15.4 Relational Operators
- <
- <=
- >
- >=
- 15.5 Equality Operators
- ==
- !=
- 15.6 Logical Operators
- &&
- ||
- !
- 15.7 Postfix Expressions
- ( )
- [ ]
- . (dot)
- ->
- 15.8 Reference/Dereference Operators
- &
- *
- 15.9 Conditional Operators
- ? :
- 15.10 Other Operators
- (type)
- sizeof
- ,
16. Graphical User Interface
- 16.1 Editing
- 16.2 Menus
- 16.2.1 Using Keyboard Shortcuts
- 16.2.2 File Menu
- 16.2.3 Edit Menu
- 16.2.4 Compile Menu
- 16.2.5 Run Menu
- 16.2.6 Inspect Menu
- 16.2.7 Options Menu
- Environment Options
- Editor Tab
- Gutter & Margin Tab
- Display Tab
- Syntax Colors Tab
- Code Templates Tab
- Debug Windows Tab
- Print/Alerts Tab
- Project Options
- Communications Tab
- Compiler Tab
- Debugger Tab
- Defines Tab
- Targetless Tab
- 16.2.8 Window Menu
- 16.2.9 Help Menu
17. Command Line Interface
- 17.1 Default States
- 17.2 User Input
- 17.3 Saving Output to a File
- 17.4 Command Line Switches
- 17.4.1 Switches Without Parameters
- 17.4.2 Switches Requiring a Parameter
- 17.5 Examples
- 17.6 Command Line RFU
18. Project Files
- 18.1 Project File Names
- 18.1.3 Active Project
- 18.2 Updating a Project File
- 18.3 Menu Selections
- 18.4 Command Line Usage
19. Hints and Tips
- 19.1 A User-Defined BIOS
- 19.2 Efficiency
- 19.2.1 Nodebug Keyword
- 19.2.2 In-line I/O
- 19.3 Run-time Storage of Data
- 19.3.1 User Block
- 19.3.2 WriteFlash2
- 19.3.3 Battery-Backed RAM
- 19.4 Root Memory Reduction Tips
- 19.4.1 Increasing Root Code Space
- 19.4.2 Increasing Root Data Space
Macros and Global Variables
Shadow Registers 353
- Macros Defined by the Compiler
- Macros Defined in the BIOS or Configuration Libraries
- Global Variables
- Exception Types
- Rabbit Registers
Map File Generation
- Grammar
Security Software & Utility Programs
- Rabbit Embedded Security Pack
- AES
- SSL
- Dynamic C Utilities
- Rabbit I/O LIB Utility
- Library File Encryption
- File Compression Utility
- Font and Bitmap Converter Utility
- Rabbit Field Utility Module
Software License Agreement
Index