Multi-arch build with Podman

Recently, I have fallen in love with the Fedora distro. And here you have bundled podman as a container engine.

The nice feature of the podman engine is that it is daemonless and allows you to run containers as a root as well as in rootless mode.

Podman engine has Docker-compatible command line interface and has some nice features that have not presented (yet?) in Docker: generating a systemd service files or Kubernetes Pod YAML.

One of the things I miss a lot personally is seamless multi-architecture container builds you have with Docker buildx command.

Below I would like to share a way I perform such builds with podman and friends.

More …

Header-only library CMake install

In this post I would like to show how to write install rules in CMake build system in order to be able to reuse a library later in CMake/non-CMake environment. That may be also useful during library distribution.

As an example we will take the caches library which is the header-only library and discuss adding pkg-config and CMake export support.

More …

Azure DevOps SSH and Fedora 33

Intro

Last week I updated my machine with Fedora 32 to the latest Fedora 33 release. After that I tried to fetch one of my project over SSH and saw the following:

</path/to/project> $ git fetch --all
Fetching origin
<project>@vs-ssh.visualstudio.com's password:

I missed SSH Public Key auth after upgrading to Fedora 33. The reason why it happended was updated crypto settings.

More …

CrossWorks for ARM slow?

Intro

We are using the CrossWorks IDE with bundled GCC compiler on my work as company’s standard embedded systems project tool. Nobody had noticed any issues with it until we were working on a project with “slightly higher” demands on waking up time from the sleep mode.

System I mentioned was a STM32L4 (ARM Cortex-M4 core) based solution with the piezo switch as one of the wakeup sources. The button is attached to one of the sensor lines and triggers interrupts when a user presses it. Necessity of speeding up wake up time come due to several reasons:

  • our piezo switch asserts MCU’s sensor line only for 100-200 ms when a user presses it in a effortles way without a goal to squeeze it out. If a mechanical button was used, we would not even notice any issues with our app. All mech buttons I have worked with assert a line for more than 500 ms
  • piezo button circuit did not include any debounce protection (the reason is not so important now). Due to that there were some spurious wakeups that have to be caught by the app

How we found that issue and overcome it with simple changes in CrossWorks’ CRT (C Runtime) implementation of the standard library I will describe below.

That may be especially interesting for ones who uses the following products:

  • CrossWorks for ARM (most likely all ARM Cortex-M MCUs will be affected by that)
  • Segger Embedded Studio (SES)
More …