As I mention in previous post Zephyr RTOS is an interesting initiative started by Intel, NXP and couple other strong organizations. With so well founded background future for this RTOS should look bright and I think it will quickly became important player on IoT arena.

Because of that it is worth to dig little bit deeper in this RTOS and see what problems we faced when trying to develop for some well known development board. I choose STM32 F411RE mainly because it start to gather dust and some customers ask about it recently. As always I will present perspective of Linux enthusiast trying to use Debian Linux and command line for development as I did for mbed OS.

Let’s start

To not repeat documentation here please first follow Getting Started Guide.

After setting up environment and running Hello World example we are good to go with trying Nucleo-64 STM32F411RE. This is pretty new thing, so you will need recent arm branch:

Then make help should show f411re:

Let’s try to compile that (please note that I’m still in hello_world project):

OpenOCD and flashing

To flash binaries OpenOCD was needed:

It would be great to have mbed way of flashing Nucleo-64 board.

Using OpenOCD I get libusb access error:

I added additional udev rules from OpenOCD project:

And added my username to plugdev group:

The result was:

Hello world verification

Unfortunately I was not able to verify if hello_world example works at first time. I posted my experience on [mailing list](https://lists.zephyrproject.org/archives/list/devel@lists.zephyrproject.org/thread/3U5SX62HCTJFTQEAJX6DR6P5 45PZXUH/) and after couple days I received information that there was bug in clock initialisation and fix was pushed to gerrit.

So I tried one more time:

Unfortunately arm branch seems to rebase or change in not linear manner, so just pulling it cause lot of conflicts.

After correctly building I flashed binary to board:

Log looks the same as previously, but this time on /dev/ttyACM0 I found some output by using minicom:

Result was:

The same method worked with basic/blinky example.

Summary

This was short introduction, which took couple weeks to publish. I will continue Zephyr research and as initial project I choose to add i2c driver for F411RE development board.

Overall Zephyr looks very promising with lot of documentation. Community could me more responsive, because at this point I think it is pushed more by corporation related then deeply engaged enthusiasts.

Important think to analyze for Zephyr is cross platform verification on application level. By that I mean exercising proposed abstraction model to see if for example I can run the same application on emulation and on target platform. Giving that ability would be huge plus.

Also what would be interesting to see is some general approach to application validation. This could shift verification from target hardware to emulated environment, what would be very interesting for future embedded developers.