If using C++ on an embedded target, you depend on the constructors for global objects being called by the startup code. While in many cases an embedded system won’t stop, so you don’t need to call the global C++ destructors, this is still something to consider for a proper shutdown.
In Getting Started: Raspberry Pi Pico RP2040 with Eclipse and J-Link I used a SEGGER J-Link EDU for debugging: unfortunately, probably because of silicon shortage, these EDU probes are out of stock everywhere. Luckily, there is a solution: just use another Raspberry Pi Pico!
SWD Debugging with PicoProbe
This turns a $5 Raspberry Pi Pico board in to a very usable and versatile debug probe.
MCU vendors offer SDKs and configuration tools: that’s a good thing, because that way I can get started quickly and get something up and running ideally in a few minutes. But this gets you into a dependency on tools, SDK and configuration tools too: changing later from one MCU to another can be difficult and time consuming. So why not get started with a ‘bare’ project, using general available tools, just with a basic initialization (clocking, startup code, CMSIS), even with the silicon vendor provided IDE and basic support files?
In this case, I show how you easily can do this with CMake, make and Eclipse, without the (direct) need of an SDK.
In this time where many micro-controllers have 100+ weeks estimated delivery time, it makes sense to look at alternatives. So it is not a surprise that the Raspberry Pi RP2040 gets used more and more in projects. It is not only inexpensive, it is (at least for now) available which makes all the difference. The RP2040 is the first microcontroller from Raspberry Pi: a dual-core ARM Cortex-M0+ running up to 133 MHz, 264 KByte on-Chip RAM and up to 16 MByte external FLASH.
Raspberry Pi Pico with J-Link, with a NXP sensor board
It is a very versatile microcontroller, with a rich eco-system and set of tools. It can be easily used with C/C++ or MicroPython, and the Raspberry Pi Pico board only costs around $5. There are plenty of tutorials out there, for example how to use the Pico board as debug probe to debug another Pico board. While this is great, there is an easy way to use any existing J-Link and Eclipse IDE too, so this is what this article is about.
The Eclipse Editor has a very cool feature named ‘Code Templates’: With such templates files are created with specific pre-filled content. For the templates, variables like ${user} for the user name can be used, see Custom C/C++ Headers with Eclipse:
The MCUXpresso Pins Tool is part of the NXP configuration suite which makes pin assignments, configuration and muxing easy. What I have somehow missed from one of the latest updates and releases is that it allows me now to add my own custom headers definition. Not only the tool is now aware of the ‘standard’ Arduino headers, but I can add my own headers too. This can be useful for providers of breakout boards or any kind of board which can be added to a MCU board. In my case it is very useful for projects where we design our own (breadboard-friendly) board or a custom board with an expansion board: we can design a board header and use it in other projects.
You might never heard about ROM Libraries, and you are probably not alone. Some might thing that this refers to the boot ROM modern MCUs have built in, which is kinda close. But the thing here is about to build your own (possibly constant) ROM library, program it to your device of choice, and then use it from the application running on the device.
So the concept is to have a (fixed, stable) part with code and data on your device, which can be used by a (possibly changing) application: Think about a stable LoRaWAN network stack in the ROM, with a changing application using it: Would that not be cool?
ROM Library Concept
This not only adds flexibility, but as well allows smaller updates, as only a part of the program has to be changed or updated.
The question is: how to create and use such a ROM Library with the normal GNU build tools?
Did you know that modern (dish) washing machines have the ability to automatically dispense detergents? The positive side is: this can reduce the amount of detergents used. The machine will monitor the washing process, and ‘cleaner’ dishes should require less detergents.
Our new energy Miele Dishwasher came with that exact feature: the Miele AutoDos System, an automatic detergent dispensing system. The detergent is inside a rotating disk, dispensing detergents as needed, making it (hopefully) more environment-friendly:
Miele AutoDos Power Disk in Miele Dishwasher
The downside is: Miele did not make it refillable: after around 20 washing cycles, you have to replace the disk with a new one. This is not environment friendly. So I wanted to change this….
With the new MCUXpresso versions out, and because it has been a while I showed how to install Processor Expert into Eclipse, here is an update how to do this.
The open-source GNU tools provide a rich set of tools to help developing software. Some are clearly more for the high-end application development. But many of the tools are applicable for the more restricted embedded software development process as well. One is gcov, or the GNU Coverage Tool. Coverage is essential for the testing phase, as it tells you what part of code have been used and ‘covered’. This article describes how GNU coverage can be added the NXP S32 Design Studio IDE.