Introduction Who is the reader? Brief Chapter Overview Acknowledgements CHAPTER 1: A Hard Start So what kind of system are we talking about? CPU: The brains of the outfit. Memory: Why so many? CPU Supervision Serial Port Drivers Onto the Schematic CHAPTER 2: Build Process How is it done on a PC? The Cross-Compilation Process Compared to the PC... Establishing the Memory Map CHAPTER 3: Getting Started Up Front: Get involved with the Hardware Design Up Front: Get to know the hardware and be "nice" to the designer Up Front: Have Local Copies of all Data Sheets Up Front: Look at what you've created Up Front: Does the hardware check out OK? Up Front: Start slow RunTime: Simple loop at the reset vector RunTime: A simple LED is priceless at this point! RunTime: RAM and a "No-Stack-Required" Serial Out RunTime: Get To C-Level RunTime: Things Will Start to Snowball RunTime: Avoid Modification of Initialized Data in C CHAPTER 4: Assembly Required The Platform Just After Reset IO Initialization Establish Exception Handlers Flash Drivers CHAPTER 5: Command Line Interface CLI Data Structure CLI Table CLI Processing Shell Variables and Symbols The Functions Underneath the Command Name User Levels Password Protection CHAPTER 6: A FLASH File System The TFS Design Criteria Implementation Details Flash Space Overhead Required by TFS TFS Defragmentation Different types of Flash devices provide different options Boot flash device without a reset, could cause trouble... Bottom Boot and Top Boot Flash Devices CHAPTER 7: Adding the Ability to Execute Scripts Turning a file into a command Commands that add programming capabilities CHAPTER 8: Network Connectivity Ethernet ARP IP ICMP UDP and TCP DHCP/BOOTP Applied to Embedded Systems CHAPTER 9: File/Data Transfer XMODEM TFTP CHAPTER 10: An Embedded System Boot Platform What is an embedded system boot platform? Putting it all together forms MicroMonitor Overview of monitor This is looking a lot like a PC console window Command set API presented to the Application CHAPTER 11: Adding the Application Different Memory Map Less Intense Startup Establishing an Application Stack Connecting to the Monitor's API Overriding the default serial port drivers Adding a System Tick CHAPTER 12: Debugging an Application with the Monitor Different Type of Debug Philosophy Breakpoints What does MicroMonitor give us for debugging? Displaying Memory Cast: Overlaying a Structure onto Memory Stack Trace CHAPTER 13: Quick Overview of Some RTOS Concepts The Scheduler Tasks, Threads and Processes Preemption, Time Slicing and Interrupts Semaphores, Events, Messages and Timers One Final Note Regarding RTOS-based Firmware CHAPTER 14: Building a Host-Based Toolbox bin2srec, bin2array, chunker, etc... com moncmd CHAPTER 15: Miscellaneous Topics Use cpp for assembler Building Libraries Overlaying a Structure onto an IO Device Hardware sanity tests for the "firmware" developer Testing for Stack Overflow Hardware-Assist Tools System Profiling Basic Block C