I recently upgraded the MediaWiki software that powers Spivey's Corner. If you notice any glitches in the new setup,
please (wait half an hour to see if I fix it, then) let me know and I will see what can be done. – Mike

Porting micro:bian

From Spivey's Corner
Jump to navigation Jump to search

micro:bian is a very simple embedded OS that is used for teaching the first year course on Digital Systems. Unlike most other embedded operating systems, it is based on the single synchronisation primitive of synchronous message passing, with all interrupts converted to messages.

At present, micro:bian is specific to the BBC micro:bit. But plenty of other inexpensive ARM-based development boards exist, such as the Freescale FRDM-KL25Z and FRDM-K64F boards, and many other boards that are part of the MBED ecosystem.

The aim of this project is to port micro:bian to one or more of these other boards, identifying and isolating the parts that are board-specific and providing multiple implementations of device driver processes so that micro:bian applications are as far as possible portable between boards.

Other boards don't have the switches and lights of the micro:bit but some, including the FRDM boards, support Arduino-compatible add-on 'shield' boards, and we could easily make a shield that replicates the features of the micro:bit.

Work to extend and port micro:bian is ongoing, and another page has notes and details of progress.


[1] receive with a timeout does express something that can't be done with a timer process and multi-type receive. That's because it isn't possible to cancel an alarm call from the timer process without risk of deadlock: if the client process decides to cancel the alarm call at the same time the timer process decides to deliver it, then they are stuck in a deadly embrace, each refusing to receive a message the other is committed to sending. Moving the timeout into the kernel allows it to be cancelled automatically when the receive completes.

[2] https://github.com/Spivoxity/avr-usb has examples of simple USB devices implemented with bit-banging on ATtiny microcontrollers, using a freely available USB library.