作者:Hedy (王雅慧)
愛文西門科技副理
一、Embedded System 簡介
在我們的生活周遭,嵌入式系統其實無所不在,大多數常見的電子設備,像是手機、電視、微波爐、洗衣機等,都是一種嵌入式系統。嵌入式系統就是一種嵌入在裝置內部,執行特定應用功能的系統,它內部會包含可編程的 MCU、可以操作或顯示數值的輸入/輸出硬體設備和指示微控器完成預定義任務的軟體。以恆溫器為例,恆溫器就是一種嵌入式系統,它的輸入像是溫濕度感測值和一組設定監測數值的按鈕,根據指令,恆溫器的 MCU 會調整一組輸出,像是啟動電風扇和空調設備。MCU 會擁有自己獨特的指令來監測或控制不同類型的輸入和輸出。嵌入式系統的整體架構如下圖所示:
接下來將針對嵌入式系統的內部架構,包含 MCU、指示 MCU 完成任務的程序和嵌入式系統的開發環境做簡單的介紹。
MCU
Microcontroller 又稱 MCU,是一種可以接受編程的積體電路,大部分的電子設備都會內含 MCU,開發者透過指令告訴 MCU 應該具有什麼行為,可以將其視為電子設備的大腦。以恆溫器來舉例說明,MCU 內部的指令會告訴恆溫器監測外部的溫度是否太熱或太冷,並根據情況做出反應,像是開啟或關閉空調設備。
Program
身為開發者,會建立一組指令告訴 MCU 應該要做什麼事,這組指令就稱為程序,簡單來說,程序讓 MCU 知道應該監測什麼輸入,以及如何適當地調整輸出來做為回應。以計算機為例,當按下"等於"按鍵時,計算機應該要執行所輸入的算術並顯示答案,這些事情都是透過編寫程序來完成的,一般多數會使用C 語言來做 MCU 開發。
IDE
IDE,全名為 Integrated Development Environment,又稱為整合開發環境,一般程式開發工作,從撰寫程式碼一直到程式編譯完成可以運行,中間會需要許多軟體的輔助,而 IDE 就是將這些散落的軟體整合在同一個程式中,簡化開發者的開發流程,因為在同一個程式操作畫面中,所有的工具都備齊了,讓開發者如同置身於一個開發環境中,因此我們稱這樣的程式為 IDE。通常各晶片廠生產的 MCU 或開發板,都會有其對應的 IDE,開發者透過圖形化介面和一些選項就能快速地將開發環境建置完畢,大幅提升了開發效率。
一般 IDE 是由程式編輯器 (Code Editor)、編譯器 (Compilier) 和除錯器 (Debugger) 三個主要組件所組成,以下分別對這三個元件做說明:
- 程式編輯器:程式編輯器提供了一個可以輸入程式指令的空間,一般程式編輯器會提供一些功能輔助開發者撰寫程式碼,像是自動縮排、顏色區別關鍵字、語法錯誤提示等等,讓開發者可以增加可讀性,並避免掉大多數語法的錯誤,提升開發效率。
- 編譯器:編譯器主要功能是將開發者輸入的指令轉換為 MCU 可以解讀、執行的二進制格式,可以將其視為語言轉換器,輸入給它程式原始碼,它會翻譯產生目的語言,翻譯過後就可以直接載入 MCU,讓 MCU 依照你編寫的程式去執行指定的任務。
- 除錯器:在開發程式的過程中,經常會遇到程式沒有按照開發者預期去運作的情況,這時候就會需要除錯器的輔助,它可以讓你逐行執行程式、設定中斷點、檢視變數的變化等等,幫助開發者追蹤錯誤,減少偵錯時間。
二、MCU 內部架構
MCU 就如同前面所說,它是一種 IC 或電腦晶片,在大多數的電子設備中都能找到它的蹤影。然而,有別於其他電腦晶片,MCU 是可以編程的,特過一組特殊的指令告訴 MCU 應該做什麼事,讓 MCU 如同裝置的大腦,控制裝置的運作。
下圖為 MCU 的架構圖,將 MCU 的組成結構簡單地劃分成四個部分,分別為 CPU、Program Memory、Data Memory 和 Peripherals,以下將針對這幾個部分再做說明。
CPU
CPU,全名為 Central Processing Unit,又稱中央處理單元,在 MCU 內部它是負責解釋各式指令和處理資料的部分,並處理各種訊息,可以將其視為 MCU 運作的核心,CPU 的架構組成大致上可歸類為兩個部分,分別是控制單元 (Control Unit) 和算術邏輯單元 (Arithmetic/Logic Unit, ALU),以下針對兩個部分做說明:
- 控制單元:控制單元是 CPU 的指揮控制中心,負責從記憶體中擷取指令,分析、解讀指令要執行的動作,再依指令發出控制信號,指揮其它各單元執行指令規定的工作。
- 算術邏輯單元:算術邏輯單元主要負責算術與邏輯運算,算術運算就是對資料進行加、減、乘、除的操作;邏輯運算則是處理像大小比較、條件判斷等邏輯工作。
Program Memory
Program Memory 內部儲存一連串的程式指令,讓 CPU 可以依指令執行並完成所需的工作,CPU 在讀取指令時會搭配 Program Counter,也就是程式計數器,程式計數器會存放下一條指令所在的記憶體位址,CPU 先讀取程式計數器內部儲存的記憶體位址後,再到程式記憶體讀取指令出來執行,可以將程式計數器視為 CPU 讀取指令的參考,程式計數器在指令執行完畢後會自動更新,指向下一條指令的位址,確保程式碼可以連續地被執行。
大多數的嵌入式系統裝置會選用唯讀記憶體 (ROM) 作為程式記憶體,它是一種非揮發性記憶體,嵌入式系統必須確保程式在斷電後還能被保存,舉例來說,恆溫器電源被切斷後,程式依然要保存在內部,一旦重新上電,恆溫器要如同斷電前保持正常運作,讀取溫度感測值並調整溫度。ROM 符合此特性,它主要就是用來存放不常更動或永不變動的資料。
Data Memory
MCU 需要有一個儲存它蒐集或處理資料的地方,例如,記憶按鈕是否被按下,或是儲存近期量測的溫度值等,關於這些資料都被儲存於稱為資料記憶體的區塊中。一般會採用隨機存取記憶體 (RAM) 作為資料記憶體,它是一種揮發性記憶體,儲存資料會隨著電源關閉而消失,通常做為程式在執行時暫存資料的儲存媒介。
Peripheral
MCU 週邊設備並沒有標準的定義,所有 MCU 以外的附加功能都被歸類在 Peripheral 區塊中。週邊設備種類有很多種,大致上可以將它們分為兩類,第一類週邊設備是執行某些操作來輔助 CPU,完成 CPU 太忙碌而沒有時間處理的事情,降低 CPU 的負擔,舉例來說,許多人會使用洗衣機來洗衣服,但衣服其實也可以自己用手洗,只是他們選擇使用週邊設備。在 MCU 中,屬於此類型的兩個範例是計時器和通訊介面。第二類是週邊設備是執行某些 CPU 無法自行完成的操作來協助 CPU,此類週邊設備最常見的是 ADC 轉換器。
三、結語
看完了上面的介紹,相信大家對於嵌入式系統與 MCU 已經有了初步的認識,現在 MCU 技術已經非常成熟,價錢也日趨便宜,各 MCU 製造商又能提供十分完善的開發環境,它的成本低廉、體積小、功耗低和高可靠度,都使其應用領域愈來愈廣泛,從消費電子、工業領域到軍事國防,都可見其蹤影,相信未來也會不斷地創新和進步。那麼文章就到這邊告一段落,有機會可以再向大家介紹 MCU 的開發,下次見囉~