BBC micro:bit控制板的ARM Mbed嵌入式作業系統初探(一)

Arduino控制板通常執行單一任務,沒有使用作業系統。許多嵌入式裝置需要同時執行多個應用程式(多工作業),像汽車多媒體音響主機,可在導航的同時播放MP3音樂,就需要作業系統來協調應用程式的運作,以及管理記憶體和其他資源。作業系統也可以減輕程式開發的工作,例如,針對Android(安卓)系統開發的App,可被安裝在Android系統的手機、電視、汽車音響…等裝置,無須改寫程式碼,也不用管裝置的硬體規格。

嵌入式作業系統(Embedded OS)是專門為效能和記憶體要求不高、具特定功能的嵌入式裝置所開發的作業系統;嵌入式作業系統品牌繁多,被廣泛運用在各種電機∕電子產品,像水波爐、無線網路IP分享器、遊戲機、電子告示板…光是網路IP分享器的作業系統就多達20種以上。

Arduino Nano 33 BLE和BBC Micro:bit控制板都採用Nordic半導體公司的同系列系統單晶片(SoC),也都有採用ARM公司開發的嵌入式作業系統:Mbed OS。這是Arduino Nano 33 BLE控制板:

Arduino Nano 33 BLE

在Arduino官網的“Why we chose to build the Arduino Nano 33 BLE core on Mbed OS”文章提到,因為沒有適用於Nordic nRF52840 Cortex-M4微控制器的官方Arduino內核(開機啟動程式和藍牙驅動程式),他們研究了各種替代方案:

  • 使用Nordic的softdevice(藍牙驅動程式)基礎架構
  • 從頭開始編寫內核程式
  • 以Mbed OS為基礎編寫程式

Nordic的softdevice不是開放原始碼,不符Arduino的開源精神;第2個選項需要花費許多時間和精力,而且開發出來的核心程式無法在其他微控器晶片重複使用。因此,團隊選擇採用Mbed OS的方案,使用作業系統提供的驅動程式來控制硬體;Nano 33 BLE控制板的使用者不會察覺到他們編寫的程式是在mbed OS上運作,程式編輯器仍是Arduino IDE,程式碼也是原有的Arduino,由setup()和loop()函式組成。

BBC Micro:bit控制板的系統架構

底下是micro:bit控制板的系統架構簡圖。為了進一步優化程式開發環境,英國Lancaster大學開發了一個相當於「中間人」的執行環境(runtime),無論是積木式程式或者JavaScript和MicroPython,都是在此執行環境上運作;此執行環境也叫做裝置抽象層(Device Abstraction Layer,簡稱DAL)

Micro:bit控制板的系統架構

Mbed OS本身已經具備各類型硬體裝置的驅動程式和程式庫,例如,讀寫SD記憶卡、輸出PWM訊號、控制指定腳位輸出高、低電位…等等,這些是屬於通用的基礎指令,可在所有支援Mbed OS的控制板上執行。

以控制Micro:bit的LED矩陣為例,Mbed的C/C++程式首先要初始化LED接腳,將它們設置成「輸出」模式,再依序控制接腳的輸出電位來點亮或關閉LED。

裝置抽象層提供的驅動程式,則是替micro:bit特有的硬體,像是LED矩陣、兩個按鍵開關、加速度計和電子羅盤,提供專屬的程式庫。例如,它的“MicroBitDisplay”類別提供控制LED矩陣捲動文字及圖像、控制單一LED的亮度…等功能。

在Micro:bit的LED矩陣呈現捲動一次“HELLO WORLD!”訊息的C程式如下(取自micro:bit runtime說明文件):

#include "MicroBit.h"

MicroBit uBit;  // 宣告MicroBit類型物件

int main()
{
    uBit.init();  // 初始化MicroBit物件

    uBit.display.scroll("HELLO WORLD!");  // 捲動文字
   
    // 把控制權交給底層的作業系統,
    // 讓它執行其他工作或者進入睡眠。
    release_fiber();
}

多虧有裝置抽象層,我們在不知道LED的接腳編號,也無須設置微控器的接腳模式,還是能完成捲動文字的效果。

Posts created 468

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *

Related Posts

Begin typing your search term above and press enter to search. Press ESC to cancel.

Back To Top