Embedded software is found in most electronic devices designed today. Embedded software controls our cell phones, microwaves, network routers, automobiles, and industrial controls. Each of these embedded systems is unique and highly customized to the specific application. As a result, embedded systems development is a widely varying field that can take years to master.
This course will cover some of the basic principles of writing software for embedded systems. The course will survey the issues and discusses the various techniques for dealing with them. In particular, the course discusses approaches to the appropriate use of the real-time operating systems upon which much embedded software is based. In addition to explaining what these systems do, this course provides guidance on how you can use them most effectively. The information in this course is not specific to any microprocessor or real-time operating system nor is it oriented towards any particular software design methodology. The principles are the same, regardless of which microprocessor and which real-time operating system and which software design methodology you use. We will concentrate on the principles that you can apply to almost any embedded system project.
The material in this course will provide the necessary information to understand the embedded systems development cycle and the specialized aspects of developing and testing software in this environment. This course will also discuss the design considerations unique to embedded systems. The course will cover the key methods and technologies for each phase of the development process: specification, partition, design, integration, validation, and maintenance and upgrade.
Duration: 6 hours
Part I – Module 1-6 (total of 6 modules)
1. Megatrends and driving forces in IT and their linkages to embedded systems
2. Overview of embedded systems including characteristics, attributes, programming languages, processor technologies, and design challenges
3. Overview of real-time systems including common characteristics, interaction with hardware devices, and embedded systems design process
4. Current examples of embedded systems, structure of an embedded program, best practices, and typical code examples
5. Block design of embedded systems, optimal mix of software and hardware required to build a system, guide to selection of processors and peripherals, signal processing, and buffer design
6. DSP fundamentals and architecture and additional material to deepen understanding of embedded system software development
Part II - Modules 7-11 (total of 5 modules)
7. Overview of Round Robin scheduling, Function Queues, brief introduction to Real-time Systems, and coding examples to strengthen understanding
8. Overview of Super Loop Architecture, additional characteristics of Real Time Operating systems (RTOS), and basic elements of Hardware Abstraction Layer (HAL)
9. Overview of task management, reentrancy, and use of semaphores
10. Additional details on scheduling and periodic tasks,
11. Rate monotonic analysis, and provide a Motor Control example
Part III Modules 12-14 (total of 3 modules)
12. Priority Inversion, fundamentals of optimization in embedded systems including: C code, importance of physical architecture, power, memory and cache
13. Impact of compilers in optimization, techniques to use compiler effectively including optimization levels, intrinsics, cross correlation, pragmas, data alignment
14. Using parallel ALU effectively including Partial Summation, Loop Unrolling, Software Pipelining, Multisampling, effective use of pointers, best practices
o Case study to deepen understanding of embedded systems development