
3 Must Have Skills to Ace Lower Level Software Engineering!
The three key skills you need to start your career as an embedded software engineer. Spoiler alert! It’s C-Language, 32-bit CPUs, and a good …

Function Pointers - Everything you need to know!
In this post, we explore what a function pointer is, what it really means for the machine, how to define it, and how to use it.
fig 1. The kernel code …

But, What is a System Call?
This note explains what a system call is, what you should imagine when trying to understand it and how you can design one.
The CPU - Privilege Levels …

Soan Papdi FPGA - Setup Guide
A Quick Guide to getting up and running with the Soan Papdi FPGA board. A quick guide to getting up and running with the Soan Papsi FPGA board. …

Building an Audio Visualizer in C using Fast Fourier Transform(FFT) and XCB
I made this project to understand how audio data can be analyzed and displayed visually. The idea was to take a WAV file, process its samples using …

How to Embedded Systems?
Embedded systems are specialized electronic setups designed to handle specific tasks by sensing environmental conditions, processing the data, and …
Debugging an Embedded System - Day 1 - Introducing different Tools
Let’s now actually understand the need and usage of GDB, OpenOCD, JTAG, SWD, etc. Let’s go over some of the use-cases to see how all of …
Debugging an Embedded System - Day 0 - Understanding What is Debugging
GDB, OpenOCD, JTAG, SWD etc are terms often thrown around when it comes to debugging in an embedded environment. They are naught but just tools made …

ARMv8a Procedure Call standard and GPRs
ABI and Procedure call standard are backbone to safe-guard compatibility and inter-operability. Let’s see how and why.
ARMv8-A Procedure Call …

ARMv-8a IRQ handling
Interrupt handling is a very critical part of any architecture. For ARM64, they are looked at from a certain lense. Let’s see how.
ARM64 IRQ …

ARMv-8a EL0<->EL1 Switching
Syscalls and switching between different exception levels is a very intricate topic filled with minute details which are often overlooked. Let’s …

From Design to Tapeout (Physical Design) - Beginner's guide
If you’ve ever wondered how the tiny chips powering your smartphone or laptop come to life, you’re in for a treat.
Creating a semiconductor chip is …

ARMv-8a Exception Levels
ARM-A is the most prevalent architecture out there powering billions of devices. We will be covering these topics over the course of multiple articles …

System on Chip (SoC) and Bare-Metal Programming
A System on Chip (SoC) is an integrated circuit that combines multiple components of a computer or electronic system into a single chip.
Unlike …

Power Management IC (PMIC)
Nordic nPM1300 PMIC Evaluation Board! A Power Management Integrated Circuit (PMIC) is a critical component in modern electronic devices, designed to …

Bootloaders on Cortex-M CPUs
Bootloaders are the unsung heroes of ARM Cortex-M-based systems, ensuring reliable startup, application execution, and firmware updates. By leveraging …

Roadmap to Learning Linux Device Drivers
Most Linux device driver engineers cannot reason about how the Linux kernel boots or how a device driver is loaded. This post details how you should …

OpenWRT vs. RDK vs. prplOS
What does a humble device like a router do? To most, a router is used till it breaks like many other devices in the house. The router plays such an …

Anatomy of Assembly Program
I am going to explain the anatomy of assembly code using RISC-V as an example since it’s a clean, modern instruction set architecture (ISA) …

Git, Gerrit! and the Industry
Git and Gerrit are pivotal tools in the software development industry, each serving distinct yet complementary roles that enhance collaboration, code …

Hand coding Audio files in C
Pulse-Code Modulation (PCM) is a method used to digitally represent analog signals, particularly audio. It works by sampling the amplitude of an …

A shallow dive into do{..}while(0) loop in C
In this article, I want to talk about the do{..}while(0) construct in C. This construct is often used in C programming to define multi-statement …
Scopes of Identifiers in C
various types of scopes. In the C programming language, the scope of an identifier determines where it can be accessed or referenced within a …

Optimizing Timer Management in Embedded Systems with Delta Lists
Delta Timer List Efficient timer management is a crucial aspect of embedded systems, especially in applications requiring low-power operation, RTOS …

Storage Classes in the C Language
Storage Classes in C Language In the C programming language, a storage class defines the scope (visibility) and life-time of variables and/or …

Tokens in C Language
Tokens In the C programming language, tokens are the smallest individual units of a program that the compiler recognizes and processes during lexical …

Abstractions - From Nature to AI
Various Abstractions The layers of abstraction all the way down to Nature that lead us to the world of Electronics, Solid State machines and AI. This …

Writing a RISC-V CPU!
Harris & Harris Few days back I decided to implement a RISC-V rv32i CPU and deploy it on an FPGA. Here are some initial thoughts on how I will go …
