The Firmware Essentials!

The essentials of firmware development

Collection of courses; a structured path to learning Firmware Engineering!.

Bestseller Beginner Intermediate

(4.9) 3000+ students enrolled.

Last updated: 1st December 2025 | English | Yearly Access.


includes

Collection of 17  Courses.
150+ hrs  of recorded video lectures.
200+  lessons.
Emulator Hardware based experiments.
10+  downloadable resources.
Workshops  by industry experts.
Certificate  on completion of course.
Cheat sheets and/or quick reference guides.
Case studies based on open-source code.
Coding exercises and challenges.
Several End-to-end project implementations.

list of courses included

This offering is a collection of courses, each of which is deliberately designed to give you insights and hands on experience on critical topics.

Roadmap to Learning Embedded Systems
Low Level with Pyjama Brah! (Public Draft)
The C Language
C Pointers
C - Mastering Bit Manipulation
Data Structures (in C)
GDB (gnu debugger)
ARM Cortex M - 101 (Introduction)
ARM Cortex M - 102 (Assembly, Scheduler Design)
GNU Make and Automation
GNU Linker Scripts
FreeRTOS - Teardown and Porting
Zephyr 101
Git And Gerrit
FPGA Based Hardware Design (101)
Python Programming

the Journey

what you will master through the journey

C programming, converting to Assembly and machine code.
Grasp ARM-M programmer's models.
Write and debug (using gdb) C programs for practical use.
Command C constructs - functions, pointers, structs, unions, enums.
Analyze data types - integers, floats, doubles, signed/unsigned, const, volatile.
Understand data type memory representation - 2's complement, floating-point encoding.
Implement control structures (if, else, switch, loops, goto) and track assembly effects.
Manipulate arrays, strings, pointers, and perform pointer arithmetic.
Leverage debug tools - GDB, make, ld etc.
How Cortex-M CPUs boot.
Baremetal Programming of Cortex-M CPUs in Assembly.
Port FreeRTOS to new target using minimal configuration and files.
Master pointer operations - pointer-to-pointer, arrays, function pointers.
Handle pointer arithmetic, void pointers, NULL pointers in kernels.
Manage dynamic memory with malloc(), free(); avoid leaks, dangling pointers.
Learn low-level programming with Cortex-M and Assembly.
Use QEMU, GDB, Makefiles for low-level debugging.
Develop baremetal firmware, drivers; print “Hello, World!” on UART.
Understand ARM Cortex-M registers and boot processes.
Write Cortex-M assembly, including schedulers with context switching, SysTick.
Master exception handling, vector tables, system registers via QEMU.
Create, debug Makefiles for build automation; write GNU linker scripts.
Use Git, Gerrit for version control, code reviews.
Dissect FreeRTOS kernel; port to new targets with task scheduling.
Build mental models of CPU, memory, state machines, scheduling.
Tackle technical discussions on C, memory, interrupts, bit manipulation.
Using python for automation.
Hardware design on FPGA.

contents and preview lectures ...

How to learn Firmware Development

Every embedded system has a CPU with firmware running on it. Being able to master Firmware engineering comes down to mastering the following -

High level view of the courses in this pack!

1. C Language

C is the workhorse when it comes to firmware. While there are languages like Rust and C++ that can be used, C is still the dominant language. Primarily because of the ease with which the hardware can be manipulated. Mastering C is must.

The C Language course will guide you through hands on experiments using the RISC-V CPU emulated using QEMU. You will learn the basics of Assembly, RISC-V instruction set, how to boot the CPU, Precondition to be full-filled before the CPU can run machine code generated as a result of the C code. The goal is to enable you precisely predict what the CPU will do as a result of the line of C code!

C Pointer and C - Bit Manipulation are focused on hammering home how pointers and bit-manipulation are used. While the C Language course covers, these two tracks focus on demonstrating the use.

Data Structures (in C) is a dedicated to showing how various data-structures are implemented using the C language and how to use them in design.

2. Tools and Utilities

Knowing how to write C code is the bare minimum, being able to automate the build and control the placement of code in memory banks is a non-negotiable for a firmware engineer. These two topics are covered exclusively in the GNU Make and GNU Linker Scripts courses.

Besides these, almost always, there is a need to debug the firmware - the course on GDB covers the details of debugging firmware on a hardware target.

3. CPU - ARM Cortex-M

Every firmware engineer should know a CPU architecture end-to-end. We chose ARM Cortex-M. These are the most popular 32-Bit CPUs on the planet at the moment.

ARM Cortex-M (101) introduces the ARM M line of CPUs and the programming model making you comfortable with how the CPU boots, how it handles interrupts and how it interacts with the memory. This course is focused on making you comfortable and confident about find the information you need about this architecture.

The ARM Cortex-M (102) - Scheduler Design using Assembly focuses on guiding you through the assembly instructions available to program the M class CPUs. The types of assembly instructions and how to write assembly programs using them. To deepen your understanding of the programmer’s model of the CPU and the exception handling, the course ends with you implementing a scheduler to switch between two assembly programs. This project is deliberate and opens the door to learning operating systems.

4. Operating Systems

The CPUs in Embedded Systems are responsible for driving the system from one state to another. The states are managed in firmware and often there is a separate software sequence managing individual state machine (if there is more than one).

The firmware then is based on an RTOS. We picked FreeRTOS and Zephyr because they are very popular. The FreeRTOS - Teardown and Porting course is focused on diving into the details of how the RTOS boots and how you can enable it on a new board/target. This course builds on the Scheduler implementation in assembly from the ARM Cortex-M (102) course and uses the insights to explain the implementation of the FreeRTOS kernel.

The course on Zephyr, focuses on introducing the OS and how to get it going.

5. Other helpful skills

When developing a firmware, you will usually work with a team. The course on Git/Gerrit explain how git version control can be used for effective collaboration.

All too often there is also some automation using Python involved, the course on Python Programming focuses on demonstrating how python is used. As part of this course, you will learn the object-oriented programming by comparing the language constructs to C.

Finally, the FPGA based Hardware Design (101) is to introduce you to the world of hardware engineering and how digital logic is designed. At the end of this course, you will be able to think and reason very clearly about the code you write and how the hardware reacts as a result.

Hardware

The courses are based on the emulation target for ST32VLDISCOVERY available in QEMU. Getting the hardware is not strictly require, but if you do so - we recommend you setup the environment locally on a linux machine.

The ST32VLDISCOVERY development board.


Certificate

The journey through the course is a challenging one! Our courses are packed with insights and will take time to sink in. You will be awarded with a Certificate of Mastery when you complete 95% of the course work.

What you see above is a sample certificate. The design of this certificate will be modified from time to time to make it more shiny and reflect the rightly earned pride!

There will always be a dedicated certificate identification number to verify it with us. This should enable anyone to check the authenticity of the certificate.

How this is different from Others

FeatureUs!Others
C language and pointers with focus on machine behavior
Detailed analysis of data types and significance.
Assembly and C Coding without IDE
Detailed explanation and view of Programmer's model of CPU.
Mental models of various components in the System to reason based off.
A Bottom-Up Approach with the tinge of answering the `Whys`.
Thorough explanation of toolchain utilities (gcc, as, ld, ar, gdb etc)
Connecting the concepts with practical use cases and use in industry.
Hands-on experiments to prove every concept.
Focused on practical professional insights
Teach multiple CPU architectures (ARM-M, RISC-V).
Cover the toolchain utilities like compiler, assembler, linker and debug tools like GDB?
Learn at your own pace.
Superficial and confusing explanation
Burn a hole in the pocket with Fee
On campus presence required.

Instructors

Mahmad Bharmal
Embedded Engineer (L4), Google
Computer Engineer holding a Master’s degree in Embedded Systems. Worked on improving the debug architecture of the Bluetooth Firmware at Intel. Worked on ARM64 architecture, programming and exercising latest ARMv8/v9 extensions - programming in low-level FWs (ARM TF-A, trusty) and kernels (LK and Linux) at Google. Currently exploring the Pixel Watch Kernel and BSP (boot-loaders, Linux Kernel, Android HALs and frameworks).
Piyush Itankar
Embedded Engineer (L5), Google
Electrical Engineer holding a Master’s degree in Embedded Systems, with a proven track record at industry giants. At Intel, contributed expertise to Navigation Firmware, Bluetooth Driver development, and RF validation software. Currently thriving as an Embedded Software Engineer at Google, drove innovation in Firmware development for the Power Management Sub-system on Tensor SoCs (Pixel Phones) and presently advancing system software for the Pixel Watch.

Requirements

GitHub account to do the hands-on coding in Codespaces.
Interest in the lower level working of the system.
Some exposure to Digital systems is good (but not strictly required).
Basic understanding of number systems, logic gates, bits and bytes is good to have (but not strictly required).
(not a hard requirement) ST32VLDISCOVERY board.

Who this course is for

Students in Academia with C as a subject in the course.
Firmware and System Software Engineers looking to revisit concepts.
Electrical/Electronics Engineers working on hardware programming.
Systems Engineer seeking gain system level insights.
Those curious to learn the underlying details of Systems and how to program it using C.

FAQs