Build and Debug QEMU in Docker

For an university research project we are implementing a software simulator for the EZH (or SmartDMA) co-prozessor present on some NXP MCUs.

Debugging QEMU in container using VS Code
Debugging QEMU in container using VS Code

This article describes how to setup and build QEMU in a docker container, including debugging QEMU with VS Code.

Continue reading

Debug C/C++ Apps in Docker with VS Code: A Step-by-Step Guide

Debugging a C/C++ application inside a Docker Container using VS Code is surprisingly easy.

This article shows the needed steps.

Continue reading

Tutorial: Creating Self-Contained MCUXpresso SDK Projects

In Tutorial: Getting Started with MCUXpresso SDK – Repositories with VS Code and Tutorial: Getting Started with MCUXpresso SDK – west I showed how to get the MCUXpresso SDK. In this article it is about tweaking and streamlining the project.

The result is a clean, portable and self-contained MCUXpresso SDK project.

VS Code with streamlined NXP MCUXpresso project
VS Code with streamlined NXP MCUXpresso project
Continue reading

Tutorial: Getting Started with MCUXpresso SDK – west

In my earlier tutorial I showed how to install the necessary SDK tools. In this article I’m going to install the SDK sources. For this I’m going to use west. This is a command-line ‘meta-repository’ tool.

west update_board
west update_board
Continue reading

Using Git Submodules in GitLab CI/CD Pipelines

Git Submodules allow me to keep a git repository as a sub-directory in another git repository. This let me clone another repository into my project and keep sources in and libraries/SDKs in sync.

This can be a challenge if using CI/CD runners. They have to clone the repositories in a recursive way. It gets more complex if the sub-modules are not public. Because the CI/CD runner does not have access rights to the non-public repositories.

GitLab CI/CD Pipeline with successful private submodule usage

In this article I explain how I’m using git sub-modules in my CI/CD GitLab pipeline, both for public and private repositories

Continue reading

Getting Started with Rust on NXP LPC55S69-EVK

The Rust Programming Language makes its way into the Linux kernel, and is used for embedded tooling. What about using it for Embedded? In this article, I’ll show how you get started with Rust on the NXP LPC55S69-EVK:

Rust on NXP LPC55S69 (Rust Icon: http://www.vericon.com)
Continue reading

rblhost: Exploring Rust’s Role in Embedded Development Tools

The Rust programming language is making its way into different areas: Rust gets added to the Linux Kernel. I see an increasing interest for using Rust in embedded projects. And Rust is used for embedded tools. I noticed this with the latest LinkServer v25.09 release: there is a new tool included in the package, rblhost.

rblhost on crates.io
rblhost on crates.io

The release note just mentioned:

- Switched to using rapid blhost (rblhost) utility.

This triggered my interest, and actually that utility is implemented in Rust :-).

Continue reading

Using CAN FD for Remote Hardware Debugging of Cortex-M Devices

Today’s projects and systems get more and more complex. Many systems include multiple MCUs, connected with a field bus or network, for example CAN. For example there can be up to 70 CAN nodes in modern cars. Such larger and connected systems are a challenge for debugging.

Traditional hardware debugging requires a hardware debug probe, connected with a dedicated SWD/JTAG debug cable to the target device. This needs dedicated pins on the target device plus physical access to the device itself. In many cases, this is not possible in the final product. The hardware debug probes, cables, pins and high speed signals are costly. And worse they can introduce new problems and are prone to interference.

If there is a field bus like CAN connecting all the MCUs, why not use it for hardware debugging? Hardware debugging meaning programming the FLASH memory, halt the MCU, inspect the memory and registers, and step through the code?

Cortex-M Hardware Debugging over CAN

Yes, we can! With the help of a rather unknown hardware feature on ARM Cortex-M devices. We can use the ARM DebugMonitor Interrupt to control and debug the target system. As we would use a JTAG/SWD connection. Instead, we use the CAN bus :-).

Continue reading

Static Analysis with SonarQube and VS Code

SonarQube from Sonar is a free static analysis tool for VS Code. It is able to analyze the source code and find issues. SonarQube does a similar job as other static analysis tools like CppCheck for VS Code.

SonarQube in VS Code
Continue reading