140 likes | 338 Views
Embedded Operating System Design. October 4, 2012 Doug Kelly. Embedded Platforms. What’s different? System-on-Chip ( SoC ) integrates components Storage (MNAND, NOR, SD…) Power requirements/management May have memory management (MMU) May have graphics processor (GPU)
E N D
Embedded Operating System Design October 4, 2012 Doug Kelly
Embedded Platforms • What’s different? • System-on-Chip (SoC) integrates components • Storage (MNAND, NOR, SD…) • Power requirements/management • May have memory management (MMU) • May have graphics processor (GPU) • May have direct memory access (DMA) • More specialized hardware • Digital signal processor (DSP) • GPS baseband processor • Camera/imaging processor
Embedded Platforms - Processors • ARM, MIPS, RISC…? • ARM is RISC-based, sold as IP “blocks” • Core processor • Debugging coprocessor • GPU block (Mali), or 3rd-party vendors (SGX, Tegra) • Vector Floating Point (VFP) • NEON (SIMD processing architecture) • Memory management • Cache memory • 32-bit architecture • Three instruction sets (ARM, Thumb, Thumb2)
Embedded Platforms • Okay, so what? • Floating point is not free. • Time-critical tasks need servicing • Other devices may be using memory bus • May only have physical addressing • Storage is slow, cache is limited • Engineers need to solve this!
Operating System Design • EmebeddedOSes exist! • Home-grown, open-source or commercial • GarminOS • WindowsCE (Windows Embedded Compact) • VxWorks • QNX • Linux (RTLinux) • eCos • Handle scheduling by priority or round-robin • WinCE has 256 process priorities (8 for applications) and round-robin scheduling within a priority
Operating System Design - Memory • RTOSes handle memory management • Some platforms don’t have MMUs, now what? • May not be possible to use dynamic memory • Safest, most portable option. • Relies on static structures within program to use as scratch space • Design a malloc() replacement? • Need to mark memory in-use, so it isn’t used while defragging memory • Pointer to allocated memory may change, so requires careful design
Operating System Design - Scheduling • Threads can be used to limit impact of non-critical failures in some applications • Priority systems guarantee most critical tasks run when needed • Lower priority tasks run when higher tasks are blocked in some form (may be waiting for next event) • But… higher priority tasks could be blocked if a lower-priority task holds a resource!
Operating System Design - Scheduling • Priority “inversion” temporarily raises priority • Allows low-priority tasks to finish faster, unblocking high-priority tasks • Control your loops/recursion! • Some coding guidelines for embedded systems prohibit recursion, since it can quickly go without bound or exceed stack space. • A high priority task stuck in a runaway loop can result in an unresponsive or useless system. • Watch for deadlocks! • True in any OS, but may be catastrophic in some cases • Some RTOSes can detect deadlocks • Always reserve resources in the same order
Operating System Design - Interrupts • IRQ, FIQ • Come in many flavors • Hardware • External peripherals • DMA • Timers • Special-purpose hardware interrupt • Service watchdog timers, handle rescheduling, sometimes communication • Software • When good software goes bad • “Data Abort” – illegal memory access, page faults (if supported) • “Pre-fetch Abort” • “Undefined Instruction” • Division by zero, etc.
Operating System Design - Interrupts • ISRs used to handle interrupts • ISRs may have limitations imposed by OS, platform, or processor technology • Timing constraints • Access to memory • IRQ may be interrupted • Must not block! • Handling dependent on the interrupt vector table • Defines both exception and IRQ/FIQ handlers • Fast and efficient is the key!
Operating System Design - IPC • Inter-process communication used to interact with the system at all levels • Hardware drivers have no business updating UI state, nor should UI touch hardware • Can also be used to process long-running jobs • May be simple events, or contain data • Who owns the data? • Which thread is the event processed on? • When is the event processed? • Callback functions to return control • Boost signals/slots • Object-Oriented Callbacks
Debugging • JTAG • Closest to processor, can access entire memory bus • May be useful for saving snapshot of device state for future analysis. • Can also load code into RAM and reset registers (but peripherals may not reset!) • WinCE: KITL • Kernel level transport, has a fair-amount of control • Allows developer to see “into” kernel calls • WinCE also supports Visual Studio Remote Debugging • Linux/Other: GDB • Can be implemented on many platforms; gdb has stubs • Don’t rule out printf()!
Questions? Doug Kelly Software Engineer doug.kelly@garmin.com