【若需要嵌入式系統技術輔導課程 可來信洽談合作方式: iws6645@gmail.com,亦可先參考這篇介紹文章】
說明:
撰寫此系列文章的目的,主要是希望能讓初學者(甚至非本科系的朋友)能了解一些關於韌體的基本觀念,所以不會使用太艱澀的方式來描述 (盡量)。
(但是後來發現這些內容對有些初學者而言可能還是會有點艱澀,所以順便廣告一下,對於許多初學者來說,有些內容或許真的需要來上課才比較容易更清楚和容易吸收,若需要課程請洽最下方的email)。
某些人對於這些專業名詞的定義和觀念或許有些差異,在這文章中,我將以個人長期以來對於MCU(微控制器,也就是單晶片微電腦) 與 SoC(系統晶片)的 軟韌體程式開發經驗(包含non-OS無作業系統類型 和 OS based有作業系統類型)來進行分析和說明。
字有點多,請見諒,也請發揮耐心擁抱文字。
------
韌體(Firmware),既不是硬體,也不是開發性質較偏向純「軟」、較高階(註1)的那些 應用軟體 (廣泛來說,例如在執行於作業系統之上的APP、網頁、資料庫應用 等層面,都算應用軟體)。此外,韌體也並不是在開發數位IC的時候所使用的硬體描述語言所撰寫的程式。
韌體 也是一種 軟體。在開發過程的最後階段,最終都是在經由編譯或組譯之後,經處理(例如燒錄)被放置在記憶儲存單元之中,等待讓CPU提取(fetch) 及 執行(execute) 的 數位碼 (也就是所謂的 機械碼,是二進制碼,由0和1所組成)。
然而,既然 韌體(firmware) 也是一種 軟體(software),那為何又會有 韌體 這個名詞的存在呢?
簡單來說,韌體 是 屬於比較「硬」的 軟體,這是什麼意思呢? 有些朋友可能會有疑問,即便是上層的應用軟體(例如APP),其存在的目的,不也都是為了要驅動硬體來完成功能的嗎? 那麼,上層應用軟體 和 韌體 之間的 差異 又是什麼呢?
以我個人的經驗來說,韌體 就是: 「較貼近、較直接存取電腦硬體單元的軟體」。
而「貼近電腦硬體」又是什麼意思呢?
就是位於底層(越接近電腦硬體)、直接對硬體(CPU 及 各式周邊裝置的暫存器)進行操作和存取的軟體所在層次(或者說類型)。而不像是較上層的應用軟體那樣、中間經過很多層的軟體轉換及對應之後才能間接存取硬體資源。
而為何說是「較」貼近硬體呢? 所謂的「較」貼近硬體, 是有多貼近呢?
現代因為某些系統的軟韌體的層次多樣,一個規模較大的電腦系統的軟韌體可能會被分很多層次去分工進行開發,有時候其實際狀況也不是那麼容易就可輕易劃分。但簡單來說,越直接對硬體進行存取操作的層次就越是偏向接近韌體的範疇,包含到存取暫存器內容值的相關內容。
- 註1: 在這邊先解釋一下在電腦系統內的一些用語,越上層或越高階是指是越貼近人類(開發者)的技術範疇,越底層或越低階指的是越接近電腦硬體(硬體包含: 處理器、周邊裝置、記憶單元 及 周邊相關的電子電路等等)。
所以請注意(再次強調),這裡指的 高階/低階 或者 上層/底層,並不是指技術的難度高低,而是指 該技術層次 是否位於 較靠近人類的習慣和直覺(越高階或者說越上層) 還是 比較靠近電腦系統硬體(越低階或者說越底層,離人類習慣直覺認知越遠)。
通常對於非硬體背景出身的人來說,底層技術的入門通常可能會較需要時間去體驗和學習 (包含要了解一些硬體觀念),如果是由具有實際開發經驗的人指導、幫助學習、給予方向,可大幅提升觀念上的理解和學習速度 (這也是我開課的目的)。
為了避免文章內容太多會導致大家看不下去,剩下的內容會放在 中篇 和 下篇 ,歡迎點入連結繼續觀看下去。
- 技術輔導課程 招生資訊: 【技術課程招生資訊 】軟體程式、韌體程式、嵌入式系統軟硬體整合技術教學課程
嵌入式系統相關觀念教學文:
--------------------
孫文良 (阿良的嵌入式系統技術學習區)
個人簡介: https://sites.google.com/view/wenliangsun/
【若需要嵌入式系統技術輔導課程 可來信洽談合作方式: iws6645@gmail.com,亦可先參考這篇介紹文章】