承接上篇文章,中篇的內容如下:
所以,若要精確一點來說(說好的初學者科普呢),個人認為何到底謂韌體、何謂軟體,其實應該以該軟體所在的層次來區分,而不是以平台來區分。
以許多 初學者 或 學生 時常撰寫non-OS類型的Arduino軟體為例,當要驅動GPIO所對應的某支腳位輸出高電位時,如果使用的方式是是直接在Arduino IDE中去呼叫digitalWrite(Pin_Number, HIGH); 若以嚴格&精確一些的標準來說,呼叫函數的本身的這層程式碼的範疇,算是應用軟體層面(屬於 只負責下參數給這個現成的函數來應用這個函數,但看不到這個函數的內容是如何、實際上是如何接觸操作了什麼硬體暫存器 的層次)。 而 真正去實現digitalWrite這個函數的內容程式碼(對GPIO的暫存器作操作存取)的部分才是意義上較精確的韌體開發。
這時有些人可能會混淆,認為上述Arduino例子的digitalWrite(Pin_Number, HIGH)既然會直接驅動硬體(會讓Arduino板子輸出數位邏輯系統的高電位5V或3.3V(視MCU款式而定)訊號,那呼叫digitalWrite的層次的軟體怎麼會不屬於韌體呢?
如果有這個疑問的朋友,可以自己想想,有什麼APP的最終功能目的不是驅動硬體動作呢? 例如你使用LINE APP發送文字訊息給朋友,此時手機畫面的硬體、手機通訊相關硬體其實都有做事(work),但難道LINE APP是韌體類的程式嗎? 既然世界上所有的軟體本來就都是為了驅動電腦硬體做事(以達到我們人類所指定的功能),那又何必區分獨立出韌體這個名詞呢? 所以,韌體應該必須是有其特定意義的。
當然了,上述講述的Arduino函數的這例子的說明內容,是比較精確嚴謹的韌體名詞作釐清,但如果將韌體這個名詞的定義放寬、放得更廣泛一些,那通常MCU的軟體等都會被統稱為韌體。
又例如許多消費性電子產品(如機上盒、路由器)內的軟體升級,這時的軟體也常被泛稱為韌體,所以使用者會看到的名詞是韌體更新(算是一種泛稱),但是實際上確切到底是更新了哪些部分的軟體、更新的到底是屬於底層還是屬於上層的軟體,其實當然只有原廠負責相關工作的工程師才知道。
以及 如果是在科技產業/企業公司的職缺名稱方面,即便是呼叫digitalWrite函數來應用以控制MCU(進而驅動其它硬體)的相關軟體工作(是否接觸更底層的真實定義上的韌體,就看工作性質而定),這些工作職缺通常也都被企業在人力銀行網站上 統稱為 韌體工程師 (畢竟是驅動MCU晶片功能的軟體,直覺上想起來仍是很直接會驅動硬體的軟體工作),
所以各位朋友會發現,有時候人們在這些名詞的使用上是會有混用情況的 (情況有點類似 微控制器Microcontroller 也常被稱作 微處理器Microprocessor,若要探究這兩者的差異細節,則可參考我之前撰寫的這篇文章去了解該兩者的詳細的定義和區別)。
- 本園區開設之嵌入式系統軟韌體課程 網頁連結: 【技術課程招生資訊 】軟體程式、韌體程式、嵌入式系統軟硬體整合技術教學課程
嵌入式系統相關觀念教學文:
--------------------
孫文良 (阿良的嵌入式系統技術學習區)
個人簡介: https://sites.google.com/view/wenliangsun/
【若需要嵌入式系統技術輔導課程 可來信洽談合作方式: iws6645@gmail.com,亦可先點擊參考這篇介紹文章】
留言列表