For the time being, I decided to get better understanding of some low-level stuff related to asynchronous programming
in Rust. And what can bring your more insights about how things work without inventing your own wheel. 😅
Let’s write a simple asynchronous tasks executor without any dependencies on the well-known crates like futures.
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.
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.
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:
I missed SSH Public Key auth after upgrading to Fedora 33.
The reason why it happended was updated crypto settings.
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)