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.
Read more...
Interrupt handling is a very critical part of any architecture. For ARM64, they are looked at from a certain lense. Let’s see how.
Read more...
Syscalls and switching between different exception levels is a very intricate topic filled with minute details which are often overlooked. Let’s dive into details.
Read more...
If you’ve ever wondered how the tiny chips powering your smartphone or laptop come to life, you’re in for a treat.
Read more...
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 in this series.
Read more...
A System on Chip (SoC) is an integrated circuit that combines multiple components of a computer or electronic system into a single chip.
Read more...
A Power Management Integrated Circuit (PMIC) is a critical component in modern electronic devices, designed to manage power requirements efficiently. It takes input from a DC power supply or a battery, delivers regulated power to various system components, and often includes functionality to charge an onboard battery.
Read more...
Bootloaders are the unsung heroes of ARM Cortex-M-based systems, ensuring reliable startup, application execution, and firmware updates. By leveraging the Cortex-M’s vector table, VTOR, and low-power features, developers can create efficient and secure bootloaders tailored to their application’s needs.
Read more...
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 learn to write device drivers by being able to reason down to the hardware level.
Read more...
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 important role by making sure your netflix works smoothly. However, a solo glance at its shell will reveal a battle raged for OpenWRT, RDK, and prplOS.
Read more...
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) that’s easy to understand. Assembly code is a low-level programming language that directly corresponds to machine instructions executed by a processor.
Read more...
Git and Gerrit are pivotal tools in the software development industry, each serving distinct yet complementary roles that enhance collaboration, code quality, and workflow efficiency.
Read more...
Pulse-Code Modulation (PCM) is a method used to digitally represent analog signals, particularly audio. It works by sampling the amplitude of an analog signal at regular intervals and then quantizing those samples into a series of discrete numerical values. These values are stored or transmitted as binary data, making PCM a foundational technique for digital audio in computers, CDs, DVDs, and other media.
Read more...
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 macros. It is a common pattern used in the Linux kernel and other standard C projects. I will take an example of a macro that is not safe and show how do{..}while(0)
construct can be used to make it safe. Especially in the conditional statements.
Read more...
In the C programming language, the scope of an identifier determines where it can be accessed or referenced within a program. Understanding the different scopes in C is crucial for managing variable and function names effectively without causing conflicts.
Read more...
Efficient timer management is a crucial aspect of embedded systems, especially in applications requiring low-power operation, RTOS scheduling, or precise event timing. One of the most efficient ways to manage multiple software timers is the delta list approach, which significantly reduces CPU overhead and optimizes wake-up schedules.
Read more...
In the C programming language, a storage class defines the scope (visibility) and life-time of variables and/or functions within a program. There are four fundamental storage classes that can be used to define these properties: auto
, register
, static
, and extern
.
Read more...
In the C programming language, tokens are the smallest individual units of a program that the compiler recognizes and processes during lexical analysis, the first phase of compilation. The C compiler breaks down the source code into tokens before proceeding to syntax analysis and further stages. Tokens are the building blocks of a program, and understanding them is fundamental to grasping how C code is interpreted.
Read more...
The layers of abstraction all the way down to Nature that lead us to the world of Electronics, Solid State machines and AI. This article explores the contracts that got us to where we are.Let us start by asking the question -
Read more...
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 about doing this (and potentially you can follow).
Read more...