in the last year I worked on a firmware for a sport watch with friends.

I really like the watch and it’s very long battery life, the screen is also nice even if you can get it in colours this days.

Here are some of the things I have learnt and are still haunting me

  • linker scripts
  • pivoting your silicon architecture
  • the interrupt monster
  • debugging with 1 bit of information
  • C++

so here are some of my take aways for developing on this piece of silicon:

read the memfault blog, they cover the basics of embedded development tools such as linker scripts and firmware memory maps

when ARM announced armv6 they had plans to get two version out, one with SVC and one without. In the end they did publish only one version, with SVC, but int GCC you can still find both armv6 and armv6s even if they are the same thing. Moreover you assembler will complain if you use SVC without specifying -march=armv6s-m so if you are using the softdevice be sure to put this instead.

Sometimes a led is exaclty the amount of information that you need but please for the love of all that is holy get a board with a CMSIS-DAP support chip.

CMSIS-DAP is an ARM standard to interface with the chip; it supports both programming and debugging and should be a transparent UART. CMSIS-DAP is the magic behind the drag and drop experience in the Micro:bit board.

I can understand some C and can read some C++ but that is all. Not that this has prevented me from writing stuff in both languages but I will surely look into using zig or Rust next time. I even found a project using zig on the Micro:bit so it’s definitely doable.