總網頁瀏覽量

顯示具有 Microcontroller 標籤的文章。 顯示所有文章
顯示具有 Microcontroller 標籤的文章。 顯示所有文章

2021年11月20日 星期六

【從事嵌入式系統軟韌體開發,絕對不能只有看到表層的應用功能,而是要能掌握「電腦」系統】

【從事嵌入式系統軟韌體開發,絕對不能只有看到表層的應用功能,而是要能掌握「電腦」系統】

Joseph Yiu這位作者的The Definitive Guide to ARM® CORTEX®-M3 and CORTEX®-M4 Processors (Third Edition), 2014部分內容有被放在ScienceDirect網頁上(知名學術期刊出版商Elsevier的書籍線上收錄網站),例如關於ARM Cortex-M0/M3/M4 CPU的Exception Return Mechanism的這部份(如該網頁內容): https://www.sciencedirect.com/topics/engineering/exception-return-mechanism?fbclid=IwAR3A4jgqY7IzOIe1vH4iE9qn1cSe0sNHsG_ab4EPyTU-X2R605APd8zYPYg

或者像是Interrupt Vector Table這個部份 (包含數位作者的著作部份內容):https://www.sciencedirect.com/topics/engineering/interrupt-vector-table


你會發現,相較於8051,其實ARM Cortex-M CPU的硬體豐富些、複雜些, 但想要達成的目的(基本原理)是一樣的,或者說是延伸發展而來的。相較於8051內的CPU,ARM是用更豐富的硬體(相對的也變複雜)來達成一些機制目的,算是一些優化的行為。

所以本園區的嵌入式系統基礎課程使用8051 MCU這種小而美、架構相對較簡易(講原理而非只是表層應用的話,對初學者來說已經夠難了)來闡述這些電腦基本的知識原理理論、並搭配實驗/實作驗證基礎原理,如function/subroutine、ISR的branch及return的原理,包含堆疊(stack)的觀念,

很多人可能不知道萬一堆疊(stack)的內容被踩掛了(值被蓋掉),當你呼叫一個函數,在函數執行結束之後就回不來原本的流程了,這就是所謂的bug,不要以為你用高階語言(C語言)就不可能發生,因為編譯器在你Build code時不一定都有噴warning、而就算有噴warning你也不一定會去注意。

這樣才不會淪於「只會」做很表層的應用 、只知道抽象流程、而沒有實際了解處理器在實體層面到底是如何「實現/完成這些流程轉換」 。這也是許多工程師常有的問題、也是很多大學師生對於這方面的技術視野極度侷限的問題  (只想要拿現成的軟硬體模組去湊出功能、以為這樣就很厲害了)。

在學校甚至某些企業內部,甚至常有那種常把重點放在功能是否創新創意打嘴砲、或者著重上層應用演算法以包裝論文的風氣文化,不是說這些部份不好,而是如果只有這些部份,從技術基礎與深度的角度來看,就太過於偏廢,而且事情的發展往往很容易走到這方面來。畢竟拿現成的東西來兜出功能最快了,就人性面的角度來說,多數人(外行人當然多於內行)都只想看到功能,或是只想看到有漂亮應用數學式子的論文,而不管東西是怎麼開發設計的、不管開發者是否理解其架構原理。

千萬不要以為這些重要的理論基礎沒用 (以為和做出表面的應用功能 沒直接相關),事實上,在做產品開發時,當遇到一定困難度的bug時,就會與這些基礎觀念的累積有很大的關係。

我常建議我的學員工程師們,從事嵌入式系統軟韌體開發,絕對不能只有看到表層的應用 (程度只到只會拿現成的函數來兜出應用功能)。工程師們如果希望有比較好的軟韌體職涯出路,需要有一定的技術視野和深度,而不能只會call API(現成函數)做應用,當遇到有難度的bug時或者希望優化增進效能或降低運算功耗時,會發現自己啥都不懂。

畢竟嵌入式系統就是具備特定功能的「電腦系統」,你還是必須要對「電腦」內部組織原理有所掌握,以及對於周邊的電子電路有所理解,電腦晶片內外部的軟硬體基礎知識都需要兼備,這樣才是完整具備 系統設計規劃、系統設計觀 的研發工程師,如果不知道這些部份的存在和重要性,那都不算「完整」的系統設計能力。

而選擇用8051做為課程實驗平台的另一方面原因是,8051比較不會像是ARM CPU based MCU的細節這麼多而複雜 (難以讓初學者吸收理解),就像還不會騎腳踏車的人(還沒掌握基本平衡感),並不該在一開始就去騎多功能的機車(很容易雷殘而導致放棄學習騎車),這是一樣的道理。

如果你平常(長年來)在寫所謂的軟韌體,如果都只有 呼叫(複製、貼上、改參數)現成的函數(API function)在作純應用,那你可能會聽不懂我在講什麼,你會以為你呼叫現成的函數就代表你「懂ARM」了,事實上這是差十萬八千里,就像你在個人電腦(PC)上面用DEV C++ IDE軟體去撰寫一隻呼叫printf標準API去印出"hello world"字串在螢幕上的C語言程式(.c),但你可能完全講不出這台複雜的電腦系統的任何原理一樣。

另外,關於MCU/SoC應用所牽涉的周邊裝置驅動以及基礎介面電子電路的方面的原理和實作實驗,本園區的課程也都會涵蓋。

所以,外行人才會以為8051太老舊、xx平台太老舊,事實上事物的本質是看你怎麼去了解和應用,許多數十年前的演算法也會被用來設計現代的產品 (例子太多講不完,例如Dynamic Time Warping algorithm),很多技術都沒有什麼老舊/不老舊的問題,而是看你怎麼去用它。

很多人常會說xx平台、xx技術太老舊過時,沒用了,

拜託,很多人可能根本不知道,Python的問世時間是1991年 (距今30年前),怎麼不說Python太老舊? 

類神經網路(Neural Network,NN)的計算模型大約是在1943年被創造發展,怎麼不去說Neural Network太老舊?   

所有技術和平台不都是幾十年前開始問世、累積過來的? 難道會空中樓閣、直接空降?

現代微積分是在17世紀被研究發展起來的,都幾百年前的東西了,怎麼不去跟學校要求拿掉微積分必修??

從頭到尾就是人的問題,而不是什麼技術老舊與否的問題。

-----------

‼課程進一步詳情請參見下方blog網頁的課程介紹👇:

 

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,亦可先點擊參考這篇介紹文章