
A computer system combines hardware and software to process inputs into outputs in a layered architecture, with hardware as physical components and software as programmable programs.
Compare general purpose systems and embedded systems: general purpose computers run many functions and are extendable, while embedded systems perform single or few tasks with dedicated hardware and software.
Explore embedded system characteristics, focusing on dependability (reliability, maintainability, availability, safety, security) and efficiency, including energy, code size, run-time, and cost, plus real-time constraints and sensor-actuator interfaces.
Explore layered and building-block architectures in embedded systems, from hardware and software to device drivers, operating systems, middleware libraries, and applications.
Explore embedded hardware levels—board, system-on-chip, processor, cpu, and on-chip/off-chip io—detailing the alu, registers, control unit, and buses.
Explore the central processing unit, its registers, buses, and control unit, and learn how the ALU, program counter, and pipelining boost throughput in CISC and RISC architectures.
Understand the processor as cpu plus system-level i/o, and how cache memories use locality to boost speed through hits, misses, line fills, write strategies, mmu memory protection, and bus architectures.
Discover system-on-chip architectures that fuse a processor with on-chip i/o and co-processors. Compare volatile and nonvolatile memories—SRAM, DRAM, EEPROM, NAND and NOR flash—and explore DMA for fast data transfers.
Explore how input-output devices interface the processor with the external world, covering internal vs external devices, memory-mapped and I/O-mapped addressing, interrupt controllers, polling, interrupts, and DMA.
Explore the four types of system-on-chips: application-specific integrated circuits, programmable hardware (FPGA and CPLD), ASIPs, and general-purpose processors, and compare their performance, power efficiency, and flexibility.
Embedded boards use a system-on-chip with on-board I/O to develop software on printed circuit boards; evaluation boards test chips as reference designs, while solution boards are minimal product-ready subsets.
Explore embedded software by examining programs in low level assembly and machine code, high level languages C, C++, Java, Ada, with mnemonic code, assemblers, opcodes, operands, and the disassemble window.
Examine bootloader that initializes hardware and upgrades the main program, and explore device drivers, real-time operating systems, and libraries for GUI, USB, and TCP/IP.
Explore architectures for embedded systems, including endless loops, cyclic executives, and interrupt-driven multitasking, with polling, task design, and timing using major and minor cycles.
Learn to replace polling with an interrupt-driven architecture using interrupt service routines to notify the cyclic executive, while protecting shared data with critical sections or double buffering.
Preemptive scheduling enables faster response by allowing task switches mid-execution, overcoming non-preemptive delays, while providing inter-task synchronization and communication via semaphores, mutexes, mailboxes, and message queues.
Explore core embedded development tools: assembler, compilers, linker, locator, debugger, and profiler. See simulators like Proteus, IDEs, and design tools for schematic capture (OrCAD, KiCAD), PCB layout, and oscilloscope testing.
This is an introductory course for embedded systems newbies. In this course, I am putting my experience to formulate and layout the foundation of embedded systems in terms of embedded hardware, embedded software and embedded development tools. Along side, I will try to use a Digital Clock as an example of an embedded system. Whenever a section of the training is finished, an exercise using the Digital Clock example will be done to augment the theory. I hope you enjoy the training.