at some point cortex-m-rtic fixed a memory safety bug: RTIC was not marking the
cortex_m::Peripherals singleton as "taken" in its pre-init code. This made it possible to create two
instances of the singleton, e.g. by calling `cortex_m::Peripherals::take` in an RTIC app.
the fix included a breaking change: it makes `Peripherals::take` return `None` from within an RTIC
app. This breaks the use of `dk::init`, which `take`s those `Peripherals`, within an RTIC app and
thus breaks most of the exercises / examples in the advanced workshop
this PR fixes the issue by making `dk::init` not `take` the `Peripherals`. For more details read
in-line comments in the diff
- add intermediate-step solutions
- add more hints
- refactor exercise & text to have the same amount of work on all OSes
- add `usb` parser solutions
- make `dk-run` less silent
- rename rtic binaries (shorter names)
- link to the main svd2rust API docs
the rtt-target implementation is light on compiler fences so the compiler could
be doing unwanted reordering of memory operations. At least patch up a place
where these orderings may result in an observable change of behavior