Complete Guide to Modern CMake Configuration

📌Complete Guide to Modern CMake Configuration Table of Contents Basic Project Configuration C++ Standard Settings Compiler Options and Warning Configuration Output Directory Structure Management Environment Detection and Path Configuration Third-Party Dependency Management Target Linking and Visibility Installation Configuration and Deployment Custom Build Targets Complete Example Project Basic Project Configuration Minimum Version Requirement and Project Declaration … Read more

Practical Guide to GCC Link Time Optimization (LTO): Enhancing C++ Performance

Introduction When optimizing the performance of C++ projects, we often enable -O2 or -O3 to enhance the compilation optimization level. However, many developers are unaware that GCC’s Link Time Optimization (LTO) is a powerful technique that breaks the boundaries of object files, enabling cross-file function inlining and the removal of unused code, further improving program … Read more

nRF52832 Bluetooth Development – BSP Project Debugging (Part 2)

Starting the debugging process based on the established development environment (for setting up the development environment, refer to nRF52832 Bluetooth Development – Setting Up Development Environment Based on VS Code (Part 1)).Since the focus is on learning Bluetooth knowledge, the development board used has a minimal design, featuring only two LEDs, two buttons, and a … Read more

Analysis of the Impact of Back Power Distribution Network (BSPDN) on Power/Performance/Area/Temperature (PPAT)

Literature from IMEC, published in 2022, focuses on the impact of BSPDN on PPAT.The front end (FEOL) is an active driver of chip power/performance/area (PPA). As scaling approaches the physical limits of semiconductor devices, the back end (BEOL)/middle end (MEOL)/packaging becomes increasingly important for PPA improvements in chips/systems. At 2nm and below, BSPDN back interconnects … Read more

Windows PCI Device Driver Development Guide: Two Options for Interrupt Handling – DPC vs WorkItem

In this article (How to Trigger User-Mode Events from Interrupt Handling Functions), we mentioned notifying a user-mode event in the WDF driver’s interrupt handling function using the KeSetEvent function, waking up the user-mode program to read the Timer’s count value. However, since the kernel function KeSetEvent is required to run at an IRQL less than … Read more

Windows PCI Device Driver Development Guide: How to Trigger User-Space Events from Interrupt Handlers

In the article on interrupt handling in drivers, we introduced how to add logic for handling periodic Timer interrupts in the driver for our simulated PCIe device. To test the Timer counting functionality, we also created a user-space test program that reads the Timer’s count register every second. While this approach can test whether the … Read more

Ubuntu – Software Center and Device Drivers

Device Drivers By default, Ubuntu comes pre-installed with the necessary drivers for mouse, keyboard, audio, and video. The days when device drivers were a nightmare for Linux-based operating systems are long gone. To view device options, go to the settings option on the left control panel. In the hardware section, you will see various options … Read more

Windows PCI Device Driver Development Guide: Bringing the Device to D0 State by Opening the Device File

In the previous article (Implementing a PCIe Device in Qemu: Adding a Periodic Timer to the Device), we introduced how to add a Timer to a PCIe device simulated by Qemu. This Timer has a counter that increments by 1 every second once enabled, and it also sends an interrupt to the virtual machine.To test … Read more

Guide to Windows PCI Device Driver Development: Interrupt Handling

In this article, we add a periodic Timer to the PCIe device previously simulated in Qemu. Once this Timer is enabled, it will trigger an MSI interrupt to the Qemu virtual machine every second. To verify that this interrupt function works correctly, we need to add interrupt handling capabilities to the driver for this PCIe … Read more

The Correspondence Between Assembly Language and C Language

The Root of the Dilemma in Understanding Assembly Language For programmers who are “native” in C/C++, reading assembly code often encounters the following difficulties: Poor Readability: Assembly instructions have a low level of abstraction and lack the expressiveness of high-level languages. Lack of Context: Low-level details such as register operations and memory accesses obscure the … Read more