This 2:1 (lecture:lab) course covers the full embedded stack, beginning with programming for embedded systems using C language constructs and basic data structures, and the computer organization that underpins it - basic architecture, memory hierarchy, and caching. It then develops the embedded software development workflow, including the GCC toolchain, pre-processing, the compiler, linker and debugger, and the structure of object files, before examining processor architecture through the evolution of ARM processors, caching, and the Cortex M3/M4. On the hardware side, the course addresses embedded peripherals such as the keypad, display, GPIO, UART, ADC and secondary storage, external peripherals including I2C, SPI and CAN, as well as memories and power management. Building on these foundations, it progresses from standalone systems - both poll-based and interrupt-driven through testing and debugging practices for building reliable, debuggable code, to bare-metal multithreaded systems, and finally an introduction to RTOS covering mutexes, semaphores and queues, together with task context, task priority, priority inversion and task scheduling.
He is a Principal Research Scientist at the Indian Institute of Science (IISc), Bengaluru. His areas of expertise include embedded systems, TCP/IP networking, wireless networking, VoIP, and audio-video streaming. He has contributed to research in areas such as IoT, secure communication, network management, and cyber-physical systems, with several publications in international conferences and journals.
To equip students to design and build embedded systems end-to-end
Programming microcontrollers in C
Understanding the underlying processor and computer architecture
Using the embedded software toolchain, interfacing hardware peripherals
Progressing from bare-metal standalone systems to multithreaded systems and an RTOS
Programming for embedded
C language constructs and basic data structures
Computer Organization
Basic Architecture
Memory hierarchy, Caching
Embedded software development
GCC Toolchain
Pre-processing source code
Compiler, Linker and Debugger
Understanding object files
Processor Architecture
ARM processor evolution, caching, Cortex M3/M4
Embedded Hardware
Peripherals: Keypad, display, GPIO module, UART, ADC secondary storage
External Peripherals : I2C, SPI and CAN
Memories
Power management
Standalone system
Poll based and interrupt drive
Testing and debugging
Building reliable and debug-able code
Bare metal multithreaded system
Introduction to RTOS
RTOS constructs - mutex, semaphores, queues
Task context, Task priority, priority inversion, task scheduling