<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Pyjama Cafe!</title><link>http://pyjamacafe.com/</link><description>Recent content on Pyjama Cafe!</description><generator>Hugo</generator><language>en-us</language><lastBuildDate>Fri, 19 Jun 2026 00:00:00 +0000</lastBuildDate><atom:link href="http://pyjamacafe.com/index.xml" rel="self" type="application/rss+xml"/><item><title>ARM TF-A Day 5: BL2 Deep Dive - Image Loading Framework</title><link>http://pyjamacafe.com/posts/arm-tfa-day5-bl2-loading/</link><pubDate>Fri, 19 Jun 2026 00:00:00 +0000</pubDate><guid>http://pyjamacafe.com/posts/arm-tfa-day5-bl2-loading/</guid><description>&lt;p&gt;Hey there, welcome back! In Day 4, BL2 successfully initialized the DRAM and the UART console. The platform is stable. Now, BL2 must execute its primary mission: loading the remaining firmware stages into memory and passing the baton to the Secure Monitor.&lt;/p&gt;</description></item><item><title>ARM TF-A Day 4: BL2 Deep Dive - Platform Initialization</title><link>http://pyjamacafe.com/posts/arm-tfa-day4-bl2-platform/</link><pubDate>Sun, 31 May 2026 00:00:00 +0000</pubDate><guid>http://pyjamacafe.com/posts/arm-tfa-day4-bl2-platform/</guid><description>&lt;p&gt;With BL1 having done the heavy lifting of raw architectural setup, we have arrived at &lt;strong&gt;BL2 (Trusted Boot Firmware)&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;BL1 was executing out of ROM; BL2 is executing out of Secure SRAM. The environment is a little less hostile now, but we are still in the dark. It&amp;rsquo;s time for BL2 to turn on the lights, initialize the broader platform, and prepare the system memory. Let&amp;rsquo;s see how it&amp;rsquo;s done.&lt;/p&gt;</description></item><item><title>ARM TF-A Day 3: BL1 Deep Dive - Memory Management and Handoff</title><link>http://pyjamacafe.com/posts/arm-tfa-day3-bl1-memory/</link><pubDate>Tue, 26 May 2026 00:00:00 +0000</pubDate><guid>http://pyjamacafe.com/posts/arm-tfa-day3-bl1-memory/</guid><description>&lt;p&gt;Hello! To recap in Day 2&amp;rsquo;s article, we covered the primary CPU core wake up, disable its caches, set up a stack pointer, and finally jump into &lt;code&gt;bl1_main()&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;Today, we&amp;rsquo;ll walk you through what BL1 actually does in C, setting up early memory management and handling the crucial task of loading the next stage (BL2) from flash into SRAM.&lt;/p&gt;</description></item><item><title>ARM TF-A Day 2: BL1 Deep Dive - The First Breath</title><link>http://pyjamacafe.com/posts/arm-tfa-day2-bl1-reset/</link><pubDate>Mon, 25 May 2026 00:00:00 +0000</pubDate><guid>http://pyjamacafe.com/posts/arm-tfa-day2-bl1-reset/</guid><description>&lt;p&gt;In Day 1, we established that TF-A operates as the gatekeeper of the system, and that the boot process is a chain of trust broken into several stages. Today, I want to show you the very beginning of that chain: &lt;strong&gt;BL1, the AP Trusted ROM&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;When you press the power button on an ARM SoC (or type &lt;code&gt;system_reset&lt;/code&gt; in QEMU), the CPU comes out of reset. Where does it go? What&amp;rsquo;s the very first instruction it executes?&lt;/p&gt;</description></item><item><title>ARM TF-A Day 1: Introduction to Trusted Firmware-A and The Execution Architecture</title><link>http://pyjamacafe.com/posts/arm-tfa-day1-intro/</link><pubDate>Sun, 24 May 2026 00:00:00 +0000</pubDate><guid>http://pyjamacafe.com/posts/arm-tfa-day1-intro/</guid><description>&lt;p&gt;Hey there! Welcome to a brand new deep-dive series. If you followed my previous &lt;code&gt;arm64*&lt;/code&gt; exception levels and bare-metal series, you know I love getting into the weeds of how things actually work at the silicon level.&lt;/p&gt;
&lt;p&gt;In this series, we are going to tackle &lt;strong&gt;ARM Trusted Firmware-A (TF-A)&lt;/strong&gt;. We will take the official TF-A source code, dissect its assembly, trace its memory mappings, and watch it boot from the first breath of the CPU all the way to handing over control to an Operating System.&lt;/p&gt;</description></item><item><title>3 Must Have Skills to Ace Lower Level Software Engineering!</title><link>http://pyjamacafe.com/posts/skills/</link><pubDate>Sun, 15 Mar 2026 00:00:00 +0000</pubDate><guid>http://pyjamacafe.com/posts/skills/</guid><description>&lt;p&gt;The three key skills you need to start your career as an embedded software engineer. Spoiler alert! It’s &lt;strong&gt;C-Language&lt;/strong&gt;, &lt;strong&gt;32-bit CPUs&lt;/strong&gt;, and a good understanding of &lt;strong&gt;the compiler toolchain&lt;/strong&gt;!&lt;/p&gt;</description></item><item><title>Function Pointers - Everything you need to know!</title><link>http://pyjamacafe.com/posts/function-pointers/</link><pubDate>Sun, 15 Mar 2026 00:00:00 +0000</pubDate><guid>http://pyjamacafe.com/posts/function-pointers/</guid><description>&lt;p&gt;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.&lt;/p&gt;</description></item><item><title>But, What is a System Call?</title><link>http://pyjamacafe.com/posts/syscalls/</link><pubDate>Mon, 23 Feb 2026 00:00:00 +0000</pubDate><guid>http://pyjamacafe.com/posts/syscalls/</guid><description>&lt;p&gt;This note explains what a system call is, what you should imagine when trying to understand it and how you can design one.&lt;/p&gt;</description></item><item><title>C++ for Middleware Engineers</title><link>http://pyjamacafe.com/automotive-cpp-middleware/</link><pubDate>Sat, 07 Feb 2026 17:48:22 +0530</pubDate><guid>http://pyjamacafe.com/automotive-cpp-middleware/</guid><description>&lt;h1 id="what-makes-oops-under-the-hood-special"&gt;What Makes “OOPS Under the Hood” Special&lt;/h1&gt;
&lt;p&gt;“OOPS Under the Hood” is not a traditional C++ course that focuses only on syntax, libraries, or design patterns. Instead, it teaches how C++ actually works beneath the surface—inside the compiler, linker, memory system, and runtime environment. This deep technical focus is what makes the course truly unique.&lt;/p&gt;
&lt;p&gt;Most developers learn how to write C++ code, but few understand what happens after pressing “compile.” This course bridges that gap by explaining how source code becomes an executable, how objects are laid out in memory, how virtual functions are dispatched, and how optimizations affect performance. Learners gain insight into what the machine really does with their code.&lt;/p&gt;</description></item><item><title>Soan Papdi FPGA - Setup Guide</title><link>http://pyjamacafe.com/posts/soanpapdi-setup/</link><pubDate>Thu, 08 Jan 2026 17:48:22 +0530</pubDate><guid>http://pyjamacafe.com/posts/soanpapdi-setup/</guid><description>&lt;p&gt;

&lt;figure&gt;
 &lt;img loading="lazy" src="http://pyjamacafe.com/posts/soanpapdi-setup/sp.jpeg" alt="" loading="lazy" /&gt;
 &lt;figcaption&gt;A Quick Guide to getting up and running with the Soan Papdi FPGA board.&lt;/figcaption&gt;
&lt;/figure&gt;

&lt;/p&gt;
&lt;p&gt;A quick guide to getting up and running with the Soan Papsi FPGA board.&lt;/p&gt;</description></item><item><title>Pointers (in C)</title><link>http://pyjamacafe.com/pointers-old/</link><pubDate>Sat, 08 Nov 2025 00:00:00 +0530</pubDate><guid>http://pyjamacafe.com/pointers-old/</guid><description>&lt;h1 id="the-design-and-deliberation"&gt;The Design and Deliberation&lt;/h1&gt;
&lt;p&gt;I am a big believer of mental models and visualisations when it comes to learning technical concepts. This course is deliberately heavy on insight and frameworks of thinking about pointers.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Pointers&lt;/strong&gt; in C is a straight forward concept but it has earned a reputation for being hard to understand. In my opinion, the problem is - most of those who try and learn pointers don&amp;rsquo;t understand how and what to imagine and reason based off of.&lt;/p&gt;</description></item><item><title>Building an Audio Visualizer in C using Fast Fourier Transform(FFT) and XCB</title><link>http://pyjamacafe.com/posts/audio-visualizer-using-fft-and-xcb/</link><pubDate>Tue, 28 Oct 2025 00:00:00 +0000</pubDate><guid>http://pyjamacafe.com/posts/audio-visualizer-using-fft-and-xcb/</guid><description>&lt;p&gt;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 Fast Fourier Transform (FFT), and show the frequency spectrum in a window using XCB (X11 protocol), all in C.&lt;/p&gt;</description></item><item><title>Automotive - Middleware 101</title><link>http://pyjamacafe.com/automotive-middleware/</link><pubDate>Sat, 11 Oct 2025 17:48:22 +0530</pubDate><guid>http://pyjamacafe.com/automotive-middleware/</guid><description>&lt;h1 id="what-is-so-special-about-this-course"&gt;What is so special about this course?&lt;/h1&gt;
&lt;p&gt;What makes this course special is its end-to-end, system-level view of embedded middleware, going beyond definitions and APIs.&lt;/p&gt;
&lt;p&gt;Instead of treating middleware as a black box, the course explains why it exists, where it fits, and how it is designed—from drivers to applications. It connects theory with real automotive use cases, including a practical SOME/IP case study, and highlights real-world middleware architectures used in Automotive production programs.&lt;/p&gt;</description></item><item><title>Automotive Electronics</title><link>http://pyjamacafe.com/automotive-electronics/</link><pubDate>Sat, 11 Oct 2025 17:48:22 +0530</pubDate><guid>http://pyjamacafe.com/automotive-electronics/</guid><description>&lt;h1 id="what-is-so-special-about-this-course"&gt;What is so special about this course?&lt;/h1&gt;
&lt;p&gt;The Automotive Electronics course is first of its kind because it provides a complete system-level understanding of how modern vehicles work — not just isolated topics. It starts with E/E architecture, the backbone of every vehicle, and builds upward through sensors, actuators, diagnostics, control strategies, and software stacks.&lt;/p&gt;
&lt;p&gt;Unlike traditional courses, it blends hardware, software, and system engineering to mirror real OEM and Tier-1 workflows. It also covers future-focused technologies like EVs, ADAS, AI applications, and Software-Defined Vehicles (SDV), ensuring learners are aligned with industry evolution.&lt;/p&gt;</description></item><item><title>FreeRTOS - Teardown and Porting</title><link>http://pyjamacafe.com/freeRTOS-101/</link><pubDate>Sat, 11 Oct 2025 17:48:22 +0530</pubDate><guid>http://pyjamacafe.com/freeRTOS-101/</guid><description>&lt;h1 id="what-is-so-special-about-this-course"&gt;What is so special about this course?&lt;/h1&gt;
&lt;p&gt;There are several courses online that dive into how to use FreeRTOS. This one take a different approach and dives into the internals of FreeRTOS and how to port it from scratch on a new micro-controller. Learning it this way will ensure that you understand the internals of this RTOS and reason better when using it.&lt;/p&gt;</description></item><item><title>How to Embedded Systems?</title><link>http://pyjamacafe.com/posts/how-to-embedded/</link><pubDate>Wed, 01 Oct 2025 00:00:00 +0000</pubDate><guid>http://pyjamacafe.com/posts/how-to-embedded/</guid><description>&lt;p&gt;Embedded systems are specialized electronic setups designed to handle specific tasks by sensing environmental conditions, processing the data, and affecting the surroundings through actuators. These systems are integrated into larger devices to control particular functions.&lt;/p&gt;</description></item><item><title>Build and Run Linux Kernel</title><link>http://pyjamacafe.com/kernel-from-scratch/</link><pubDate>Sun, 14 Sep 2025 17:48:22 +0530</pubDate><guid>http://pyjamacafe.com/kernel-from-scratch/</guid><description>&lt;h2 id="course-highlights"&gt;Course Highlights&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Hands-On Approach&lt;/strong&gt;: Follow along with practical, real-time demonstrations of each step, from source code to a running system.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;ARM64 Focus&lt;/strong&gt;: Target the ARM64 architecture, widely used in modern devices like servers, mobile devices, and embedded systems.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Minimalist Userspace with BusyBox&lt;/strong&gt;: Learn to create a compact and efficient userspace to complement your kernel.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;QEMU Virtualization&lt;/strong&gt;: Harness the power of QEMU to test and experiment without needing physical hardware.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Expert Guidance&lt;/strong&gt;: Benefit from clear explanations and best practices for kernel development and system emulation.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;By the end of this course, you’ll have the skills and confidence to build, configure, and run your own Linux kernel on an ARM64 QEMU virtual machine, complete with a BusyBox-based userspace.&lt;/p&gt;</description></item><item><title>Debugging an Embedded System - Day 1 - Introducing different Tools</title><link>http://pyjamacafe.com/posts/debugging-arm64-day1-different-tools/</link><pubDate>Mon, 14 Jul 2025 00:00:00 +0000</pubDate><guid>http://pyjamacafe.com/posts/debugging-arm64-day1-different-tools/</guid><description>&lt;p&gt;Let&amp;rsquo;s now actually understand the need and usage of GDB, OpenOCD, JTAG, SWD, etc. Let&amp;rsquo;s go over some of the use-cases to see how all of them come together and form a coherent debugging environment for a typical embedded system.&lt;/p&gt;</description></item><item><title>Debugging an Embedded System - Day 0 - Understanding What is Debugging</title><link>http://pyjamacafe.com/posts/debugging-arm64-day0-problem-setup/</link><pubDate>Sun, 13 Jul 2025 00:00:00 +0000</pubDate><guid>http://pyjamacafe.com/posts/debugging-arm64-day0-problem-setup/</guid><description>&lt;p&gt;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 available to us. We will actually understand the core principles and ideas behind debugging such that the usage of such tools would become evident and obvious.&lt;/p&gt;</description></item><item><title>ARMv8a Procedure Call standard and GPRs</title><link>http://pyjamacafe.com/posts/arm64-day3-gprs-and-pcs/</link><pubDate>Sun, 06 Jul 2025 00:00:00 +0000</pubDate><guid>http://pyjamacafe.com/posts/arm64-day3-gprs-and-pcs/</guid><description>&lt;p&gt;ABI and Procedure call standard are backbone to safe-guard compatibility and inter-operability. Let&amp;rsquo;s see how and why.&lt;/p&gt;</description></item><item><title>ARMv-8a IRQ handling</title><link>http://pyjamacafe.com/posts/arm64-day2-irq-handling/</link><pubDate>Sun, 15 Jun 2025 00:00:00 +0000</pubDate><guid>http://pyjamacafe.com/posts/arm64-day2-irq-handling/</guid><description>&lt;p&gt;Interrupt handling is a very critical part of any architecture. For ARM64, they are looked at from a certain lense. Let&amp;rsquo;s see how.&lt;/p&gt;</description></item><item><title>ARMv-8a EL0&lt;-&gt;EL1 Switching</title><link>http://pyjamacafe.com/posts/arm64-day1-el0-el1-switching/</link><pubDate>Sat, 14 Jun 2025 00:00:00 +0000</pubDate><guid>http://pyjamacafe.com/posts/arm64-day1-el0-el1-switching/</guid><description>&lt;p&gt;Syscalls and switching between different exception levels is a very intricate topic filled with minute details which are often overlooked. Let&amp;rsquo;s dive into details.&lt;/p&gt;</description></item><item><title>From Design to Tapeout (Physical Design) - Beginner's guide</title><link>http://pyjamacafe.com/posts/tapeout/</link><pubDate>Thu, 12 Jun 2025 00:00:00 +0000</pubDate><guid>http://pyjamacafe.com/posts/tapeout/</guid><description>&lt;p&gt;If you’ve ever wondered how the tiny chips powering your smartphone or laptop come to life, you’re in for a treat.&lt;/p&gt;</description></item><item><title>ARMv-8a Exception Levels</title><link>http://pyjamacafe.com/posts/arm64-day0-exception-levels/</link><pubDate>Mon, 09 Jun 2025 00:00:00 +0000</pubDate><guid>http://pyjamacafe.com/posts/arm64-day0-exception-levels/</guid><description>&lt;p&gt;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.&lt;/p&gt;</description></item><item><title>System on Chip (SoC) and Bare-Metal Programming</title><link>http://pyjamacafe.com/posts/soc/</link><pubDate>Sun, 08 Jun 2025 00:00:00 +0000</pubDate><guid>http://pyjamacafe.com/posts/soc/</guid><description>&lt;p&gt;A System on Chip (SoC) is an integrated circuit that combines multiple components of a computer or electronic system into a single chip.&lt;/p&gt;</description></item><item><title>Power Management IC (PMIC)</title><link>http://pyjamacafe.com/posts/pmic/</link><pubDate>Thu, 05 Jun 2025 00:00:00 +0000</pubDate><guid>http://pyjamacafe.com/posts/pmic/</guid><description>&lt;p&gt;

&lt;figure&gt;
 &lt;img loading="lazy" src="npm1300.jpg" alt="" loading="lazy" /&gt;
 &lt;figcaption&gt;Nordic nPM1300 PMIC Evaluation Board!&lt;/figcaption&gt;
&lt;/figure&gt;

&lt;/p&gt;
&lt;p&gt;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.&lt;/p&gt;</description></item><item><title>Bootloaders on Cortex-M CPUs</title><link>http://pyjamacafe.com/posts/bootloader/</link><pubDate>Tue, 27 May 2025 00:00:00 +0000</pubDate><guid>http://pyjamacafe.com/posts/bootloader/</guid><description>&lt;p&gt;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.&lt;/p&gt;</description></item><item><title>The Embedded Systems Library</title><link>http://pyjamacafe.com/library-old/</link><pubDate>Wed, 30 Apr 2025 10:10:10 +0530</pubDate><guid>http://pyjamacafe.com/library-old/</guid><description>&lt;p&gt;&lt;strong&gt;Important:&lt;/strong&gt; Planned courses are not yet ready for learners and will be added as the current recording concludes.&lt;/p&gt;
&lt;h1 id="email-from-one-of-the-learners-"&gt;Email from one of the learners ♥️&lt;/h1&gt;
&lt;p&gt;

&lt;figure&gt;
 &lt;img loading="lazy" src="email.png" alt="" loading="lazy" /&gt;
 &lt;figcaption&gt;One of the subscribers wrote to us, this...&lt;/figcaption&gt;
&lt;/figure&gt;

&lt;/p&gt;
&lt;h1 id="the-philosophy-behind-the-courses"&gt;The Philosophy behind the courses?&lt;/h1&gt;
&lt;p&gt;We have been creating content for the Embedded Software Engineering community for over a year now. If you have been following us, you would know that we have launched courses in the past, with &lt;code&gt;Firmware Engineering Arsenal&lt;/code&gt; (later renamed to &lt;code&gt;Firmware Engineering&lt;/code&gt;) being the most popular one. The Courses on &lt;code&gt;C lnaguage&lt;/code&gt; and &lt;code&gt;C Pointer&lt;/code&gt; have been an all time hit and got us to where we are.&lt;/p&gt;</description></item><item><title>The Firmware Essentials!</title><link>http://pyjamacafe.com/fw/</link><pubDate>Wed, 30 Apr 2025 10:10:10 +0530</pubDate><guid>http://pyjamacafe.com/fw/</guid><description>&lt;h2 id="how-to-learn-firmware-development"&gt;How to learn Firmware Development&lt;/h2&gt;
&lt;p&gt;Every embedded system has a CPU with firmware running on it. Being able to master Firmware engineering comes down to mastering the following -&lt;/p&gt;
&lt;p&gt;

&lt;figure&gt;
 &lt;img loading="lazy" src="http://pyjamacafe.com/fw/how-to.png" alt="" loading="lazy" /&gt;
 &lt;figcaption&gt;High level view of the courses in this pack!&lt;/figcaption&gt;
&lt;/figure&gt;

&lt;/p&gt;
&lt;h3 id="1-c-language"&gt;1. C Language&lt;/h3&gt;
&lt;p&gt;&lt;code&gt;C&lt;/code&gt; 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.&lt;/p&gt;</description></item><item><title>Roadmap to Learning Linux Device Drivers</title><link>http://pyjamacafe.com/posts/linux-device-drivers/</link><pubDate>Sat, 29 Mar 2025 00:00:00 +0000</pubDate><guid>http://pyjamacafe.com/posts/linux-device-drivers/</guid><description>&lt;p&gt;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.&lt;/p&gt;</description></item><item><title>OpenWRT vs. RDK vs. prplOS</title><link>http://pyjamacafe.com/posts/battle-router-titans/</link><pubDate>Thu, 27 Feb 2025 00:00:00 +0000</pubDate><guid>http://pyjamacafe.com/posts/battle-router-titans/</guid><description>&lt;p&gt;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.&lt;/p&gt;</description></item><item><title>Anatomy of Assembly Program</title><link>http://pyjamacafe.com/posts/anatomy-assembly/</link><pubDate>Sun, 23 Feb 2025 00:00:00 +0000</pubDate><guid>http://pyjamacafe.com/posts/anatomy-assembly/</guid><description>&lt;p&gt;I am going to explain the anatomy of assembly code using RISC-V as an example since it&amp;rsquo;s a clean, modern instruction set architecture (ISA) that&amp;rsquo;s easy to understand. Assembly code is a low-level programming language that directly corresponds to machine instructions executed by a processor.&lt;/p&gt;</description></item><item><title>Git, Gerrit! and the Industry</title><link>http://pyjamacafe.com/posts/git-gerrit/</link><pubDate>Sun, 23 Feb 2025 00:00:00 +0000</pubDate><guid>http://pyjamacafe.com/posts/git-gerrit/</guid><description>&lt;p&gt;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.&lt;/p&gt;</description></item><item><title>Hand coding Audio files in C</title><link>http://pyjamacafe.com/posts/pcm/</link><pubDate>Sun, 23 Feb 2025 00:00:00 +0000</pubDate><guid>http://pyjamacafe.com/posts/pcm/</guid><description>&lt;p&gt;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.&lt;/p&gt;</description></item><item><title>A shallow dive into do{..}while(0) loop in C</title><link>http://pyjamacafe.com/posts/do-while-magic/</link><pubDate>Wed, 19 Feb 2025 00:00:00 +0000</pubDate><guid>http://pyjamacafe.com/posts/do-while-magic/</guid><description>&lt;p&gt;In this article, I want to talk about the &lt;code&gt;do{..}while(0)&lt;/code&gt; 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 &lt;code&gt;do{..}while(0)&lt;/code&gt; construct can be used to make it safe. Especially in the conditional statements.&lt;/p&gt;</description></item><item><title>Scopes of Identifiers in C</title><link>http://pyjamacafe.com/posts/scope/</link><pubDate>Tue, 18 Feb 2025 00:00:00 +0000</pubDate><guid>http://pyjamacafe.com/posts/scope/</guid><description>&lt;p&gt;

&lt;figure&gt;
 &lt;img loading="lazy" src="http://pyjamacafe.com/posts/scope/thumbnail.png" alt="" loading="lazy" /&gt;
 &lt;figcaption&gt;various types of scopes.&lt;/figcaption&gt;
&lt;/figure&gt;

&lt;/p&gt;
&lt;p&gt;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.&lt;/p&gt;</description></item><item><title>Optimizing Timer Management in Embedded Systems with Delta Lists</title><link>http://pyjamacafe.com/posts/delta_lists_for_timers/</link><pubDate>Sun, 16 Feb 2025 00:00:00 +0000</pubDate><guid>http://pyjamacafe.com/posts/delta_lists_for_timers/</guid><description>&lt;p&gt;

&lt;figure&gt;
 &lt;img loading="lazy" src="http://pyjamacafe.com/posts/delta_lists_for_timers/cover.png" alt="" loading="lazy" /&gt;
 &lt;figcaption&gt;Delta Timer List&lt;/figcaption&gt;
&lt;/figure&gt;

&lt;/p&gt;
&lt;p&gt;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.&lt;/p&gt;</description></item><item><title>Storage Classes in the C Language</title><link>http://pyjamacafe.com/posts/storage-classes/</link><pubDate>Thu, 13 Feb 2025 17:48:22 +0530</pubDate><guid>http://pyjamacafe.com/posts/storage-classes/</guid><description>&lt;p&gt;

&lt;figure&gt;
 &lt;img loading="lazy" src="http://pyjamacafe.com/posts/storage-classes/storageclass.png" alt="" loading="lazy" /&gt;
 &lt;figcaption&gt;Storage Classes in C Language&lt;/figcaption&gt;
&lt;/figure&gt;

&lt;/p&gt;
&lt;p&gt;In the C programming language, a &lt;strong&gt;storage class&lt;/strong&gt; 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: &lt;code&gt;auto&lt;/code&gt;, &lt;code&gt;register&lt;/code&gt;, &lt;code&gt;static&lt;/code&gt;, and &lt;code&gt;extern&lt;/code&gt;.&lt;/p&gt;</description></item><item><title>Tokens in C Language</title><link>http://pyjamacafe.com/posts/tokens/</link><pubDate>Wed, 12 Feb 2025 17:48:22 +0530</pubDate><guid>http://pyjamacafe.com/posts/tokens/</guid><description>&lt;p&gt;

&lt;figure&gt;
 &lt;img loading="lazy" src="http://pyjamacafe.com/posts/tokens/tokens.png" alt="" loading="lazy" /&gt;
 &lt;figcaption&gt;Tokens&lt;/figcaption&gt;
&lt;/figure&gt;

&lt;/p&gt;
&lt;p&gt;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.&lt;/p&gt;</description></item><item><title>Cancellation and Refund</title><link>http://pyjamacafe.com/refund/</link><pubDate>Thu, 23 Jan 2025 21:22:09 +0530</pubDate><guid>http://pyjamacafe.com/refund/</guid><description>&lt;h1 id="refund-policy"&gt;Refund Policy&lt;/h1&gt;
&lt;p&gt;Thank you for purchasing one of our online courses! We strive to deliver high-quality content and ensure your satisfaction. Please read our refund policy carefully before making a purchase, as it outlines the conditions under which refunds may be granted.&lt;/p&gt;
&lt;h2 id="1-general-refund-eligibility"&gt;1. General Refund Eligibility&lt;/h2&gt;
&lt;p&gt;Refunds are only available under specific circumstances. To be eligible, &lt;code&gt;you must submit a refund request within 5 hours of your purchase&lt;/code&gt; by contacting us at &lt;a href="mailto:support@pyjamacafe.com"&gt;support@pyjamacafe.com&lt;/a&gt;. Requests made after this period will not be considered.&lt;/p&gt;</description></item><item><title>Contact Us</title><link>http://pyjamacafe.com/contact/</link><pubDate>Thu, 23 Jan 2025 21:22:09 +0530</pubDate><guid>http://pyjamacafe.com/contact/</guid><description>&lt;p&gt;You may contact us at &lt;a href="mailto:support@pyjamacafe.com"&gt;support@pyjamacafe.com&lt;/a&gt;&lt;/p&gt;</description></item><item><title>Pricing Policy</title><link>http://pyjamacafe.com/pricing/</link><pubDate>Thu, 23 Jan 2025 21:22:09 +0530</pubDate><guid>http://pyjamacafe.com/pricing/</guid><description>&lt;p&gt;At &lt;code&gt;Typobrahe Education LLP&lt;/code&gt; (pyjamacafe.com), we strive to deliver high-quality online courses on Embedded Systems that provide exceptional value to our learners. To ensure we can continue to meet your needs and adapt to changing circumstances, our pricing policy is designed with flexibility in mind. Here’s what you need to know:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Dynamic Pricing&lt;/strong&gt;: We reserve the right to adjust course prices at any time, without prior notice. Prices may increase or decrease based on various factors, including market conditions, course updates, or operational considerations. The price you see at the time of purchase is the price you’ll pay for that transaction.&lt;/p&gt;</description></item><item><title>Privacy Policy</title><link>http://pyjamacafe.com/privacy/</link><pubDate>Thu, 23 Jan 2025 21:22:09 +0530</pubDate><guid>http://pyjamacafe.com/privacy/</guid><description>&lt;p&gt;This privacy policy sets out how &lt;strong&gt;Pyjama Cafe (formally Pyjama Brah)&lt;/strong&gt; uses and protects any information that you give &lt;strong&gt;Pyjama Cafe (formally Pyjama Brah)&lt;/strong&gt; when you visit their website and/or agree to purchase from them.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Pyjama Cafe (formally Pyjama Brah)&lt;/strong&gt; is committed to ensuring that your privacy is protected. Should we ask you to provide certain information by which you can be identified when using this website, and then you can be assured that it will only be used in accordance with this privacy statement.&lt;/p&gt;</description></item><item><title>Shipping and Delivery</title><link>http://pyjamacafe.com/shipping/</link><pubDate>Thu, 23 Jan 2025 21:22:09 +0530</pubDate><guid>http://pyjamacafe.com/shipping/</guid><description>&lt;p&gt;Shipping is not applicable for business.&lt;/p&gt;</description></item><item><title>Terms and Conditions</title><link>http://pyjamacafe.com/terms/</link><pubDate>Thu, 23 Jan 2025 21:22:09 +0530</pubDate><guid>http://pyjamacafe.com/terms/</guid><description>&lt;p&gt;For the purpose of these Terms and Conditions, The term &amp;ldquo;we&amp;rdquo;, &amp;ldquo;us&amp;rdquo;, &amp;ldquo;our&amp;rdquo; used anywhere on this page shall mean &lt;code&gt;Typobrahe Education LLP&lt;/code&gt;, whose registered/operational office is &lt;code&gt;F002, Keerthi Harmony Bengaluru KARNATAKA 560016&lt;/code&gt;. &amp;ldquo;you&amp;rdquo;, “your”, &amp;ldquo;user&amp;rdquo;, “visitor” shall mean any natural or legal person who is visiting our website and/or agreed to purchase from us.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Your use of the website and/or purchase from us are governed by following Terms and Conditions:&lt;/strong&gt;&lt;/p&gt;</description></item><item><title>Abstractions - From Nature to AI</title><link>http://pyjamacafe.com/posts/abstractions/</link><pubDate>Wed, 08 Jan 2025 17:48:22 +0530</pubDate><guid>http://pyjamacafe.com/posts/abstractions/</guid><description>&lt;p&gt;

&lt;figure&gt;
 &lt;img loading="lazy" src="http://pyjamacafe.com/posts/abstractions/c.png" alt="" loading="lazy" /&gt;
 &lt;figcaption&gt;Various Abstractions&lt;/figcaption&gt;
&lt;/figure&gt;

&lt;/p&gt;
&lt;p&gt;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 -&lt;/p&gt;</description></item><item><title>Data Structures</title><link>http://pyjamacafe.com/dsa/</link><pubDate>Wed, 08 Jan 2025 17:48:22 +0530</pubDate><guid>http://pyjamacafe.com/dsa/</guid><description>&lt;h1 id="the-design-and-deliberation"&gt;The Design and Deliberation&lt;/h1&gt;
&lt;p&gt;As the embedded software gets more nuanced, the answer to performance and reliability usually becomes clever organization of the data and algorithms that leverage that organization. This course is designed with a focus on development in the C language. Special attention is paid to explaining the concepts of C and ways of thinking/reasoning intuitively.&lt;/p&gt;</description></item><item><title>Scheduler Design on ARM Cortex-M</title><link>http://pyjamacafe.com/cortex-m-102/</link><pubDate>Wed, 08 Jan 2025 17:48:22 +0530</pubDate><guid>http://pyjamacafe.com/cortex-m-102/</guid><description>&lt;h1 id="what-is-so-special-about-this-course"&gt;What is so special about this course?&lt;/h1&gt;
&lt;p&gt;Every complex embedded systems solution uses an OS/RTOS for implementing the state machine. An OS at its core implements a task scheduler (among other things). Not everyone understands how it works.&lt;/p&gt;
&lt;p&gt;The design of this course is deliberate in the sense that - in an attempt to implementing the &amp;ldquo;Scheduler&amp;rdquo; you will learn the CPU operations, how assembly programs are written and how scheduling works.&lt;/p&gt;</description></item><item><title>The C Language</title><link>http://pyjamacafe.com/c-old/</link><pubDate>Wed, 08 Jan 2025 17:48:22 +0530</pubDate><guid>http://pyjamacafe.com/c-old/</guid><description>&lt;h1 id="the-design-and-deliberation"&gt;The Design and Deliberation&lt;/h1&gt;
&lt;p&gt;The internet is flooded with coding courses—yet none rival this. For over a decade, C has been my daily driver at work. Unlike kernel developers leaning on abstractions, I’ve wielded C in its purest, most raw form—programming CPUs from scratch, without the crutch of standard libraries. This course hands you that same unfiltered power. By the end, you won’t just know C—you’ll command it like a seasoned pro, bending it to your will in ways most developers never dream of.&lt;/p&gt;</description></item><item><title>Writing a RISC-V CPU!</title><link>http://pyjamacafe.com/posts/writing-a-risc-v-cpu/</link><pubDate>Sat, 04 Jan 2025 11:55:09 +0530</pubDate><guid>http://pyjamacafe.com/posts/writing-a-risc-v-cpu/</guid><description>&lt;p&gt;

&lt;figure&gt;
 &lt;img loading="lazy" src="http://pyjamacafe.com/posts/writing-a-risc-v-cpu/cover.jpeg" alt="" loading="lazy" /&gt;
 &lt;figcaption&gt;Harris &amp;amp; Harris&lt;/figcaption&gt;
&lt;/figure&gt;

&lt;/p&gt;
&lt;p&gt;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).&lt;/p&gt;</description></item><item><title>Aarch64 (101)</title><link>http://pyjamacafe.com/a101/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>http://pyjamacafe.com/a101/</guid><description/></item><item><title>Aarch64 (102)</title><link>http://pyjamacafe.com/a102/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>http://pyjamacafe.com/a102/</guid><description/></item><item><title>About</title><link>http://pyjamacafe.com/about/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>http://pyjamacafe.com/about/</guid><description/></item><item><title>ARM Cortex-M (101)</title><link>http://pyjamacafe.com/m101/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>http://pyjamacafe.com/m101/</guid><description/></item><item><title>ARM Cortex-M (102)</title><link>http://pyjamacafe.com/m102/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>http://pyjamacafe.com/m102/</guid><description/></item><item><title>Blog Posts</title><link>http://pyjamacafe.com/blog/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>http://pyjamacafe.com/blog/</guid><description/></item><item><title>Budding Minds</title><link>http://pyjamacafe.com/buds/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>http://pyjamacafe.com/buds/</guid><description/></item><item><title>Courses</title><link>http://pyjamacafe.com/courses/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>http://pyjamacafe.com/courses/</guid><description/></item><item><title>Embedded Systems Library Access</title><link>http://pyjamacafe.com/library/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>http://pyjamacafe.com/library/</guid><description>&lt;h1 id="a-community-to-grow-with"&gt;A Community to grow with&lt;/h1&gt;
&lt;p&gt;Members get access to exclusive feed and chat space. You can chat with each other and us.&lt;/p&gt;
&lt;p&gt;

&lt;figure&gt;
 &lt;img loading="lazy" src="http://pyjamacafe.com/library/community.png" alt="" loading="lazy" /&gt;
 &lt;figcaption&gt;A community to support your learning journey&lt;/figcaption&gt;
&lt;/figure&gt;

&lt;/p&gt;</description></item><item><title>How to Embedded systems?</title><link>http://pyjamacafe.com/embedded/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>http://pyjamacafe.com/embedded/</guid><description/></item><item><title>Pointers (in C)</title><link>http://pyjamacafe.com/c-pointers/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>http://pyjamacafe.com/c-pointers/</guid><description>&lt;h1 id="the-design-and-deliberation"&gt;The Design and Deliberation&lt;/h1&gt;
&lt;p&gt;I am a big believer of mental models and visualisations when it comes to learning technical concepts. This course is deliberately heavy on insight and frameworks of thinking about pointers.&lt;/p&gt;
&lt;p&gt;Pointers in C is a straight forward concept but it has earned a reputation for being hard to understand. In my opinion, the problem is - most of those who try and learn pointers don’t understand how and what to imagine and reason based off of.&lt;/p&gt;</description></item><item><title>Roadmap</title><link>http://pyjamacafe.com/roadmap/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>http://pyjamacafe.com/roadmap/</guid><description/></item><item><title>Soan Papdi FPGA</title><link>http://pyjamacafe.com/fpga/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>http://pyjamacafe.com/fpga/</guid><description/></item><item><title>The C Language</title><link>http://pyjamacafe.com/c/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>http://pyjamacafe.com/c/</guid><description/></item></channel></rss>