想當初就讀大學時期,除了堅持學業成績常保持在第一之外,幾乎每個寒暑假、甚至修課讀書以外的時間都自願在實驗室做專題專案度過(坦白說比起多數人的大學生活來說,真的不輕鬆,但很充實,將碩班生活提前到大學時期來過),
當時主要為了想要多參加教育部競賽,以便推甄名校大學的碩士班。沒想到後來到了所謂名校大學,看到不少名校大學大學部直升的學生幾乎是不用花太多時間做專題,更不用積極參加校外全國競賽,很輕易就可以直升本系碩士班( (有些系所真的只看考生大學就讀的校名、系名,或者看是否有認識的教授推薦,就佔了大部分的錄取因素,但如此的作法確實也錄取了許多大學時期不太用心在專業方面的直升學生,說真的不少人的專業實力在大學時期是真的沒什麼累積,就連學科理論基礎也未必比較有概念),坦白說,時至今日,個人對某些不太客觀的推甄錄取標準現象仍感到有些感慨。
分享一下10年前,於大二升大三的暑假時期,在實驗室開發的一個小作品(印象中這個小作品後來沒有拿去正式參賽,後續我和同學們還做了另外四至五個作品專案去參加教育部舉辦的競賽,也在大三這一年內,拿到了4個教育部競賽獎項),這是一個8051 MCU為核心的PCB電路,包含MCU韌體程式的撰寫(使用KEILC開發環境)、電路設計、PCB電路Layout和製作。這是就讀大學時期的第一個PCB電路 (記得在更久以前,在就讀高職時期,就有做過小型電子琴電路,當時也是洗板子,但印象中當時Layout好像是用手繪的方式..所以當時的電子琴電路的走線沒這麼筆直)。
而當時還不流行Arduino這類的現成MCU板子,所以除了韌體程式和PC端GUI程式的撰寫之外,我們大學那間實驗室的電路板幾乎都是學生們自己做電路設計、Layout設計 和 洗版製作的。
主要透過Counter計數來自8051 MCU外部的紅外線遮斷模組的訊號,並透過GPIO顯示於LCD,同時也藉由UART輸出串列資料,再藉由ICL232 IC將8051 UART訊號電氣位準轉換為RS232 Cable訊號位準,將資料傳輸資料至PC端由GUI程式做後續應用處理。
阿良 (孫文良) 發表在 痞客邦 留言(0) 人氣()
下方影片為32bits ARM Cortex-M CPU based STM32 MCU韌體開發課程 之 中斷(Interrupt)機制: NVIC基本原理與應用 教材實驗影片
課程內容將介紹其基礎原理觀念 與 實驗實作過程: 在基礎觀念原理方面,將會教導NVIC (Nested Vectored Interrupt Controller)中斷機制原理基本觀念,並說明何謂Interrupt Vector Table (中斷向量表);何謂Nesting、Tail-Chaining、Late-Arriving等feature;何謂Interrupt priority grouping、Preemption priority (group priority)、Subpriority、EXTI與NVIC實驗較相關的內容等等,並帶領學員觀看ST官方技術文件之相關對應內容;
而在實作實驗的部分,將教導學員使用STM32CubeMX tool搭配IDE如KEILC(MDK ARM)或者STM32CubeIDE進行操作,以及介紹由講師所提供的範例程式中的重要API函數與流程。
將UART preemption priority設置較高,UART exception搶占EXTI exception flow
阿良 (孫文良) 發表在 痞客邦 留言(0) 人氣()
很多人都會迷信於 平台或技術的 新舊 這種表面來主觀判斷其好壞,而不知其實際客觀的狀況。
除了Intel在1981年出產的8051 MCU的同族加強版至今依然有許多產品在用,
事實上,就連MOS公司在1975年出的6502 Microprocessor系列,現在也還是有不少產品使用。
幾年前有和一間IC設計公司主管討論到這方面;而最近一位80即將任職韌體工程師的學員的公司也會用到6502,主要以 組合語言(Assembly Language) 進行其韌體程式開發。
其實,無論平台新舊,有許多基礎原理都是直接相關甚至共通的。如果舊的(架構較簡易的)都還不會,以為直接碰新的平台就能學的紮實? 這是許多學校老師的天大誤會 (當然也有業界人因為看得不夠多,也有可能會有類似的觀念與迷思)。
阿良 (孫文良) 發表在 痞客邦 留言(0) 人氣()
接受本園區課程輔導的 方姓學員(學歷為私立大學機械工程碩士),
阿良 (孫文良) 發表在 痞客邦 留言(0) 人氣()
承接中篇文章,下篇的內容如下:
另外有些人可能會認為,被燒錄到裝置產品內的軟體都能叫做韌體,我甚至看過有人認為開發Android 裝置的上層軟體也是在做嵌入式系統韌體開發,對於這種觀念我個人是不同意的。因為畢竟只要是能執行軟體的產品 (有電腦系統在內),有什麼不是裝置呢? 即便個人電腦PC也是裝置的一種。其實或許應該以軟體的所在層次(Level)去區分,會較客觀一些。
無論硬體平台是SoC或者MCU;無論產品類型是小體積的裝置還是PC或家電;無論主要系統軟體是屬於有無OS的類型、無論軟體單元/種類是Linux kernel、BIOS、bootloader等等,只要是位於底層層次的軟體(存取CPU、周邊暫存器、記憶體的層次的軟體,我認為即可稱為韌體),撰寫韌體是需要考量到硬體狀況 (如果是控制I/O周邊用的韌體,時常還要考量及整合電腦晶片外部的電子電路設計)。
當然也有因為硬體架構較單純所以將應用程式和韌體混和撰寫的狀況,例如早期標準(至今仍可用於嵌入式基礎教學)的8051 MCU晶片的程式開發即是這種狀況(較早期的MCU硬體架構單純、資源較有限,不一定適合去將其軟體區分出太多高低階層次)。
阿良 (孫文良) 發表在 痞客邦 留言(0) 人氣()
承接上篇文章,中篇的內容如下:
所以,若要精確一點來說(說好的初學者科普呢),個人認為何到底謂韌體、何謂軟體,其實應該以該軟體所在的層次來區分,而不是以平台來區分。
以許多 初學者 或 學生 時常撰寫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是韌體類的程式嗎? 既然世界上所有的軟體本來就都是為了驅動電腦硬體做事(以達到我們人類所指定的功能),那又何必區分獨立出韌體這個名詞呢? 所以,韌體應該必須是有其特定意義的。
阿良 (孫文良) 發表在 痞客邦 留言(0) 人氣()
【若需要嵌入式系統技術輔導課程 可來信洽談合作方式: iws6645@gmail.com,亦可先參考這篇介紹文章】
說明:
撰寫此系列文章的目的,主要是希望能讓初學者(甚至非本科系的朋友)能了解一些關於韌體的基本觀念,所以不會使用太艱澀的方式來描述 (盡量)。
(但是後來發現這些內容對有些初學者而言可能還是會有點艱澀,所以順便廣告一下,對於許多初學者來說,有些內容或許真的需要來上課才比較容易更清楚和容易吸收,若需要課程請洽最下方的email)。
某些人對於這些專業名詞的定義和觀念或許有些差異,在這文章中,我將以個人長期以來對於MCU(微控制器,也就是單晶片微電腦) 與 SoC(系統晶片)的 軟韌體程式開發經驗(包含non-OS無作業系統類型 和 OS based有作業系統類型)來進行分析和說明。
阿良 (孫文良) 發表在 痞客邦 留言(1) 人氣()
大家好,這篇文章是一位長期接受本園區作者(講師)輔導的一位學員人士,在當時成功轉職韌體工程師的經驗與心得分享。
以下文章內容為學員分享的經驗與心得:
各位想轉職的朋友大家好😀,一開始容我先自我介紹
學員的學經歷:
阿良 (孫文良) 發表在 痞客邦 留言(1) 人氣()
參加許多次外商IC設計公司的研討會 以及 使用過這些廠商的IC的經驗,覺得ST以及ADI這類廠商真的完全不只是IC design house ,又或者應該說,IC design house應該就要像這樣。
從許多角度可感受到他們的系統設計能力很強 (從硬體角度就是IC外的那些電路設計相關議題,包含很多類比領域的電路,例如電源電路),也包含到軟韌體和開發工具鍊,且涵蓋的應用方向領域極廣,相當完整,而且在推廣方面也蠻積極的。
並不是說外國的月亮就一定比較圓,但覺得許多台廠公司真的還有著許多可加強的空間,也希望台廠公司能多重視 系統設計&整合 的能力和人才,否則在大部分的狀況下,真的只能繼續跟在人家後面賺辛苦錢。
從另一方面來說,這或許也反映了不同國家之間的學用落差 & 大學/學術界 狀況的差異。
而目前我個人開設一些嵌入式系統軟韌硬體課程,其目的也是希望能減少台灣的學用落差。
阿良 (孫文良) 發表在 痞客邦 留言(0) 人氣()
這幾年來逐漸發現,現在因為某些議題被過度炒作和放大(如AI,不論在新聞媒體/報章雜誌上面),且學術界(大學校院)又過於績效導向,大多為了角逐計畫和資源,而不斷地去追求所謂比較夯的名詞的相關議題(未必能反映台灣產業界的真實專業技術人才需求),導致一些重要的紮實專業技術教育越來越不受到重視。
於電腦相關領域(資訊工程領域),在較上層的程式語言(如Python)隨著上述議題而一同受到社會高度重視的同時,越來越少學生 或 初入社會的人士,能了解何謂電腦系統的底層(如 韌體 與 硬體),
但是,其實產業界對於電腦底層相關的工程師職務需求量是很大的(可自行搜尋人力銀行求證),
許多人似乎都快忘記,軟體終究是被拿來控制/驅動電腦硬體的、軟體是被硬體所執行的,
而且,其實軟體也有很多不同的層面和種類,軟體 並不是 只有一般人眼睛看得到的 視窗介面軟體、APP 或 網頁 而已,
阿良 (孫文良) 發表在 痞客邦 留言(0) 人氣()