總網頁瀏覽量

顯示具有 Embedded System 標籤的文章。 顯示所有文章
顯示具有 Embedded System 標籤的文章。 顯示所有文章

2025年2月21日 星期五

(NEW)2025年 6月 開在 清大自強基金會(台北)的 嵌入式Linux系統基礎建置課程

 

我近期開在台北自強基金會的課程

🎉🎉🎉熱烈招生中🎉🎉🎉

歡迎有興趣的朋友們踴躍報名~~

[台北班] ARM Cortex-A based平台之嵌入式Linux作業系統基礎建置實作 (結合板材實作)(自備NB)

上課時間:

2025/6/8(日)~7/6(日)9:00~16:00 共30小時

2025/5/25~6/22(日)每週日9:00~16:00 共30小時

(原2025/3/30~5/4(日)每週日9:00~16:00  共30小時(4/6停課))

報名連結➡️ https://edu.tcfst.org.tw/web/tw/class/show.asp?tcfst=yes&courseidori=14C029


#嵌入式系統 #SoC #韌體工程師 #嵌入式系統課程 #微控制器 #韌體工程師課程 #Embedded_Linux 


-----

歡迎各方洽談合作,務實/踏實追求共好。歡迎電機電子資工本科系學員,也很歡迎非電機電子資工本科系的學員加入學習嵌入式系統技術/尋求轉職成為研發工程師的行列。

孫文良 個人簡歷: https://sites.google.com/view/wenliangsun/


‼本園區開設之技術課程進一步詳情請參見下方blog網頁的課程介紹👇:
本學習區之Facebook粉絲頁如下:

--------------------------

孫文良 (阿良的嵌入式系統技術學習區)

【若需要嵌入式系統技術輔導課程 可來信洽談合作方式: iws6645@gmail.com,亦可先點擊參考這篇介紹文章】

2022年12月14日 星期三

【 嵌入式系統(Embedded System) 到底是什麼? 】

【 嵌入式系統(Embedded System) 到底是什麼? 】

關於這方面,許多台灣的大學學術界資深老師(無論名校或者非名校)、產業界資深主管/工程師,常會誤以為嵌入式系統就是指有嵌入Linux的系統,其實這是個明顯的認知錯誤。個人應該已經不只十次在企業職缺或者大學校院內的論文看到這個問題,直到今年(2022)我還是有在國內的研討會論文中看到這個錯誤。

這情況類似之前提過的微處理機/微控制器的名詞常被混用的狀況,而許多歐美的相關技術書籍對此名詞有較嚴謹的說明。如果大家很重視「學術」,那就應該要對這些名詞的基本定義有一定的嚴謹程度。

同時讓我們看一下 Wikipedia英文版頁面內容(較詳細)對於嵌入式系統(Embedded system)的基本定義[1]:  「An embedded system is a computer system—a combination of a computer processor, computer memory, and input/output peripheral devices—that has a dedicated function within a larger mechanical or electronic system.  It is embedded as part of a complete device often including electrical or electronic hardware and mechanical parts. 」

簡單來說,嵌入式系統就是被嵌入到電子/機械/機電硬體系統內、具備特定/專用功能的 計算機(電腦)系統。 這個「嵌入」並不是 在指Linux OS軟體被嵌入到一個系統。

就算是跑non-OS類型的軟韌體的MCU為核心的系統產品,基本上也都是嵌入式系統。並不是只有那些有跑(執行)嵌入式Linux或Android的系統才叫做嵌入式系統。

對於專業名詞定義認知落差,有時候就是造成工程開發過程中的溝通問題的來源。

Ref: 

[1] Wikipedia, Embedded system, https://en.wikipedia.org/wiki/Embedded_system .


-----

個人簡歷: https://sites.google.com/view/wenliangsun/


‼本園區開設之技術課程進一步詳情請參見下方blog網頁的課程介紹👇:
本學習區之Facebook粉絲頁如下:

--------------------------

孫文良 (阿良的嵌入式系統技術學習區)

【若需要嵌入式系統技術輔導課程 可來信洽談合作方式: iws6645@gmail.com,亦可先點擊參考這篇介紹文章】

2021年7月14日 星期三

【阿良的韌體科普系列】「韌體」到底是什麼? 和軟體有什麼不同? 【下篇】

【若需要嵌入式系統技術輔導課程 可來信洽談合作方式: iws6645@gmail.com,亦可先點擊參考這篇介紹文章】

歡迎透過合法的方式分享此文內容,若要轉載/轉貼,請明確貼出此原始連結並標示作者基本資訊,請勿抄襲及非法轉貼(例如擷取內文但並未註明出處)

承接中篇文章,下篇的內容如下: 

另外有些人可能會認為,被燒錄到裝置產品內的軟體都能叫做韌體,我甚至看過有人認為開發Android 裝置的上層軟體也是在做嵌入式系統韌體開發,對於這種觀念我個人是不同意的。因為畢竟只要是能執行軟體的產品 (有電腦系統在內),有什麼不是裝置呢? 即便個人電腦PC也是裝置的一種。其實或許應該以軟體的所在層次(Level)去區分,會較客觀一些。

無論硬體平台是SoC或者MCU;無論產品類型是小體積的裝置還是PC或家電;無論主要系統軟體是屬於有無OS的類型、無論軟體單元/種類是Linux kernel、BIOS、bootloader等等,只要是位於底層層次的軟體(存取CPU、周邊暫存器、記憶體的層次的軟體,我認為即可稱為韌體),撰寫韌體是需要考量到硬體狀況 (如果是控制I/O周邊用的韌體,時常還要考量及整合電腦晶片外部的電子電路設計)。

當然也有因為硬體架構較單純所以將應用程式和韌體混和撰寫的狀況,例如早期標準(至今仍可用於嵌入式基礎教學)的8051 MCU晶片的程式開發即是這種狀況(較早期的MCU硬體架構單純、資源較有限,不一定適合去將其軟體區分出太多高低階層次)。

  • 註: 電腦並非只有指個人電腦(PC),而是在許多人們於日常生活中所會使用到的產品裡面都有電腦(執行軟韌體程式以驅動各式硬體),例如手機、平板電腦、家電(數位電視、電視機上盒、洗衣機、冷氣...) 等等。

-----



嵌入式系統相關觀念教學文:

1.   現代計算機系統核心硬體常見平台的分類與簡介概述

2.   Arduino到底是什麼? MCU又是什麼?

3.   許多人對於8051 MCU的常見錯誤觀念闢除


--------------------


孫文良 (阿良的嵌入式系統技術學習區)

個人簡介: https://sites.google.com/view/wenliangsun/

【若需要嵌入式系統技術輔導課程 可來信洽談合作方式: iws6645@gmail.com,亦可先點擊參考這篇介紹文章】

【阿良的韌體科普系列】「韌體」到底是什麼? 和軟體有什麼不同? 【中篇】

【若需要嵌入式系統技術輔導課程 可來信洽談合作方式: iws6645@gmail.com,亦可先點擊參考這篇介紹文章】

歡迎透過合法的方式分享此文內容,若要轉載/轉貼,請明確貼出此原始連結並標示作者基本資訊,請勿抄襲及非法轉貼(例如擷取內文但並未註明出處)

承接上篇文章,中篇的內容如下: 

所以,若要精確一點來說(說好的初學者科普呢),個人認為何到底謂韌體、何謂軟體,其實應該以該軟體所在的層次來區分,而不是以平台來區分。

以許多 初學者 或 學生 時常撰寫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,若要探究這兩者的差異細節,則可參考我之前撰寫的這篇文章去了解該兩者的詳細的定義和區別)。





其餘的內容會放在 下篇 繼續介紹(可直接點連結連入關看)。



嵌入式系統相關觀念教學文:

1.   現代計算機系統核心硬體常見平台的分類與簡介概述

2.   Arduino到底是什麼? MCU又是什麼?

3.   許多人對於8051 MCU的常見錯誤觀念闢除


--------------------


孫文良 (阿良的嵌入式系統技術學習區)

個人簡介: https://sites.google.com/view/wenliangsun/

【若需要嵌入式系統技術輔導課程 可來信洽談合作方式: iws6645@gmail.com,亦可先點擊參考這篇介紹文章】

【阿良的韌體科普系列】「韌體」到底是什麼? 和軟體有什麼不同? 【上篇】

【若需要嵌入式系統技術輔導課程 可來信洽談合作方式: iws6645@gmail.com,亦可先參考這篇介紹文章】

歡迎透過合法的方式分享此文內容,若要轉載/轉貼,請明確貼出此原始連結並標示作者基本資訊,請勿抄襲及非法轉貼(例如擷取內文但並未註明出處)

說明: 

撰寫此系列文章的目的,主要是希望能讓初學者(甚至非本科系的朋友)能了解一些關於韌體的基本觀念,所以不會使用太艱澀的方式來描述 (盡量)。

(但是後來發現這些內容對有些初學者而言可能還是會有點艱澀,所以順便廣告一下,對於許多初學者來說,有些內容或許真的需要來上課才比較容易更清楚和容易吸收,若需要課程請洽最下方的email)。

某些人對於這些專業名詞的定義和觀念或許有些差異,在這文章中,我將以個人長期以來對於MCU(微控制器,也就是單晶片微電腦) 與 SoC(系統晶片)的 軟韌體程式開發經驗(包含non-OS無作業系統類型 和 OS based有作業系統類型)來進行分析和說明。

字有點多,請見諒,也請發揮耐心擁抱文字。

------


韌體(Firmware),既不是硬體,也不是開發性質較偏向純「軟」、較高階(註1)的那些 應用軟體 (廣泛來說,例如在執行於作業系統之上的APP、網頁、資料庫應用 等層面,都算應用軟體)。此外,韌體也並不是在開發數位IC的時候所使用的硬體描述語言所撰寫的程式。

韌體 也是一種 軟體。在開發過程的最後階段,最終都是在經由編譯或組譯之後,經處理(例如燒錄)被放置在記憶儲存單元之中,等待讓CPU提取(fetch) 及 執行(execute) 的 數位碼 (也就是所謂的 機械碼,是二進制碼,由0和1所組成)。


然而,既然 韌體(firmware) 也是一種 軟體(software),那為何又會有 韌體 這個名詞的存在呢?

簡單來說,韌體 是 屬於比較「硬」的 軟體,這是什麼意思呢?  有些朋友可能會有疑問,即便是上層的應用軟體(例如APP),其存在的目的,不也都是為了要驅動硬體來完成功能的嗎?  那麼,上層應用軟體 和 韌體 之間的 差異 又是什麼呢?

以我個人的經驗來說,韌體 就是: 「較貼近、較直接存取電腦硬體單元的軟體」。


而「貼近電腦硬體」又是什麼意思呢?  

就是位於底層(越接近電腦硬體)、直接對硬體(CPU 及 各式周邊裝置的暫存器)進行操作和存取的軟體所在層次(或者說類型)。而不像是較上層的應用軟體那樣、中間經過很多層的軟體轉換及對應之後才能間接存取硬體資源。

而為何說是「較」貼近硬體呢? 所謂的「較」貼近硬體, 是有多貼近呢?

現代因為某些系統的軟韌體的層次多樣,一個規模較大的電腦系統的軟韌體可能會被分很多層次去分工進行開發,有時候其實際狀況也不是那麼容易就可輕易劃分。但簡單來說,越直接對硬體進行存取操作的層次就越是偏向接近韌體的範疇,包含到存取暫存器內容值的相關內容。


  • 註1: 在這邊先解釋一下在電腦系統內的一些用語,越上層或越高階是指是越貼近人類(開發者)的技術範疇,越底層或越低階指的是越接近電腦硬體(硬體包含: 處理器、周邊裝置、記憶單元 及 周邊相關的電子電路等等)。

所以請注意(再次強調),這裡指的 高階/低階 或者 上層/底層,並不是指技術的難度高低,而是指 該技術層次 是否位於 較靠近人類的習慣和直覺(越高階或者說越上層) 還是 比較靠近電腦系統硬體(越低階或者說越底層,離人類習慣直覺認知越遠)。 

通常對於非硬體背景出身的人來說,底層技術的入門通常可能會較需要時間去體驗和學習 (包含要了解一些硬體觀念),如果是由具有實際開發經驗的人指導、幫助學習、給予方向,可大幅提升觀念上的理解和學習速度 (這也是我開課的目的)。 


為了避免文章內容太多會導致大家看不下去,剩下的內容會放在 中篇 和 下篇 ,歡迎點入連結繼續觀看下去。



嵌入式系統相關觀念教學文:

1.   現代計算機系統核心硬體常見平台的分類與簡介概述

2.   Arduino到底是什麼? MCU又是什麼?

3.   許多人對於8051 MCU的常見錯誤觀念闢除


--------------------


孫文良 (阿良的嵌入式系統技術學習區)

個人簡介: https://sites.google.com/view/wenliangsun/

【若需要嵌入式系統技術輔導課程 可來信洽談合作方式: iws6645@gmail.com,亦可先參考這篇介紹文章】

2021年5月20日 星期四

【STM32】記錄今天看到的STM32 MCU RM0090 Reference manual Rev 19的973~974頁 USART Receiver(章節30.3.3)的一個寫法上的小問題

歡迎透過合法的方式分享此文內容,若要轉載/轉貼,請明確貼出此原始連結並標示作者基本資訊,請勿抄襲及非法轉貼(例如擷取內文但並未註明出處)

STM32 MCU的多數手冊都寫得不錯,但偶爾似乎還是難免會有些小問題。

今天下午看到一個關於STM32 MCU RM0090 Reference manual(STM32F405/415, STM32F407/417, STM32F427/437 and STM32F429/439 advanced Arm®-based 32-bit MCUs)  Rev 19的973~974頁 USART Receiver(章節30.3.3)的Start bit detection和Character reception這兩個連續的小節的內容中,對於RXNE flag被set(被設立為1)的條件的條件方面的文意內容的矛盾。

下列兩張圖皆為該ST手冊[1]的內容,請注意被紅線框起的部分:

[1] 973頁




[1] 974頁

[1] 1006頁



後來看到ST論壇也曾有外國人提出來討論。連結網址: https://community.st.com/s/question/0D50X00009XkhmtSAB/rxne-irq-generation


Ref: 

[1] STM32 RM0090 Reference manual Rev 19: https://www.st.com/resource/en/reference_manual/dm00031020-stm32f405-415-stm32f407-417-stm32f427-437-and-stm32f429-439-advanced-arm-based-32-bit-mcus-stmicroelectronics.pdf

--------------------

孫文良 (阿良的嵌入式系統技術學習區)

【若需要嵌入式系統技術輔導課程 可來信洽談合作方式: iws6645@gmail.com,亦可先點擊參考這篇介紹文章】

2021年3月23日 星期二

【STM32】【課程介紹】使用STM32CubeMX + KeilC(MDK-ARM) 的 STM32 (ARM based MCU)開發環境建置 開課啦

使用STM32CubeMX + KeilC(MDK-ARM) 的 STM32 (ARM based MCU)開發環境建置開課囉

主要包含以下內容:

- STM32CubeMX這款initialization code generator工具的基本使用操作

- KeilC(MDK-ARM) IDE 基本下載安裝(評估版)與使用操作

- 兩種韌體燒錄方式教學

   (1) 透過ST-Link(V2) debugger進行燒錄(以STM32 MCU之Serial Wire Debug介面進行燒錄搭配KeilC debug模式的基礎操作教學)

   (2) 搭配使用ST官方的flash loader軟體以及UART轉USB轉換線/模組,藉由STM32 MCU的USART1進行燒錄

- 基本簡易GPIO輸出驅動範例程式DEMO與教學(驗證開發環境)

- STM32 MCU基礎架構/觀念(包含帶學員瀏覽官方技術手冊)

[實際內容將可能視學員之實際狀況與進度進行調整]


--------------------------

孫文良 (阿良的嵌入式系統技術學習區)

【若需要嵌入式系統技術輔導課程 可來信洽談合作方式: iws6645@gmail.com,亦可先點擊參考這篇介紹文章】