總網頁瀏覽量

顯示具有 就業 標籤的文章。 顯示所有文章
顯示具有 就業 標籤的文章。 顯示所有文章

2025年7月8日 星期二

(7/12本周六開課 最後3個名額) 自強基金會(台北分會) 加開班[台北班] ARM Cortex-A based 平台之嵌入式Linux作業系統基礎建置實作 (附贈可跑Linux的嵌入式系統開發板 及 相關材料,課程現場實作)(自備NB) 如期開班

 

(最後3個名額) 自強基金會(台北分會)  加開班[台北班]  ARM Cortex-A based 平台之嵌入式Linux作業系統基礎建置實作 (附贈可跑Linux的嵌入式系統開發板 及 相關材料,課程現場實作)(自備NB)  如期開班 

報名連結 : https://edu.tcfst.org.tw/web/tw/class/show.asp?tcfst=yes&courseidori=14C065&fbclid=IwY2xjawLZaSVleHRuA2FlbQIxMABicmlkETFkMEFZb3VFYk81QnZZTHFrAR7tos6xwsLxux7ZfpjOhZH4Rj17zfL0wNqK9_MgSaBu0Kivx0cUXmo6aKkWAA_aem_nuZimA1fP_DQvjMfGE-GNA

因為有3位學員因臨時有事無法全程參與課程(想改成其他梯次上課),所以目前這梯課程目前有3位空缺,請有興趣或者原本是候補備取的學員,若想早些上課,可考慮報名這個梯次喔~ (7/12也就是本周六開始上課,上午9:00~下午16:00,中午1小時午餐休息)。 

每梯次課程的學員人數會有所限制  (因兼顧課程品質,所以會限制每梯次上課人數,學員當場聽我講解完原理及實驗步驟講解之後,馬上當場進行實作實驗操作,我會當場協助解決每位學員實際遇到的問題,所以要花時間,故限制每梯次人數)

課程內容大綱 (包含Linux GPIO驅動程式demo影片) 如下方連結所示:

https://www.facebook.com/sun.wen.liang.580515/posts/pfbid0kaH649i56VadgQqHw1dWoPKya8MRP1eYQNWioFwApHvLd2TGHbj6Kgu8CsaxFJ5Bl?__cft__[0]=AZWfbGKL6LYtzDTu088827Ns3WLAtCWDx5rl1dckyiGuqATaqJz34KTxUib9rocJOrGQGytMGBFXAKc_RifouHIzMuOdSnQrQiKQNVyo693AfWfLvurFGMHsYEEGW4dGnOOn6TJbTG6FcOpkqayeWvbXyW3F430sayWxft9h1qT1Mg&__tn__=%2CO%2CP-R

從GNU ARM Linux Cross compilation toolchain(GNU ARM Linux編譯工具鏈 arm-linux-gnueabi- )、samba server等基礎開發環境建置、及於Host PC Linux distribution(Ubuntu)之上建置 for ARM cortex-A based SoC為核心單元之嵌入式系統開發板(Embedded system dev. board )之 開機啟動程式 Bootloader (U-Boot)、Linux kernel(Linux作業系統核心) 及 根目錄檔案系統 Root filesystem (Busybox)、U-Boot階段Tftp upload kernel image(from PC to the dev. board)等,並於嵌入式系統開發板實際執行驗證之後,接續的課程單元為Linux核心驅動程式的基礎。

Linux核心驅動程式課程基礎課程內容包含Beaglebone black Rev C.的BJT作為開關的電子電路原理、AM3358 SoC(系統晶片)內的 GPIO registers (clock、pinmux、output enable 、clear data及set data等暫存器)、Linux kernel module(driver program/.ko file)撰寫(包含各式基本的系統呼叫System Call、file operation struct、copy_from_user/copy_to_user、裝置註冊相關的Kernel API等等)、及上層應用程式等觀念與實際範例皆逐一介紹,從硬體(電子電路、系統晶片架構、GPIO周邊裝置驅動)到 系統軟/韌體程式開發 皆完整涵蓋(原理與實作實驗)。

#Linux裝置驅動程式

#嵌入式Linux系統

#Linux_kernel_driver

#Linux_kernel_module

#Linux

#Embedded_Linux

#Device_driver

#ARM_CortexA_based_SoC

#TI_AM3358_SoC

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

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

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


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

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

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

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

2024年6月18日 星期二

近期將開在 清大自強基金會(台北分會)的 嵌入式Linux系統基礎建置課程


近期將開在 清華大學財團法人自強工業基金會的 嵌入式Linux系統基礎建置課程

 ARM Cortex-A based平台之嵌入式Linux作業系統基礎建置實作 (結合板材實作)(自備NB) 熱烈招生中

2024/7/7(日)~8/4(日),每週日,9:00~16:00,共30小時

課程時間更改為: 2024/8/4(日)~9/1(日),每週日,9:00~16:00,共30小時

課程與報名網址如下:

https://edu.tcfst.org.tw/web/tw/class/show.asp?tcfst=yes&courseidori=13C024&fbclid=IwZXh0bgNhZW0CMTEAAR2eh0gt5jiRzG5IL3OLxh1eMxqqlYuC5KctHSocrPtR9gwSdF8jr_s1Mew_aem_I0QTpfNX4J9Sm1qD-f4RSA



-----

歡迎各方洽談合作,務實/踏實追求共好。

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


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

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

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

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

2024年4月8日 星期一

【TI AM335x SoC系統晶片之GPIO驅動操作流程】


作者: 林普賢 ( sam91001200@gmail.com )、 孫文良( iws6645@gmail.com )


首先要去看開發板的電路圖。這裡以Beaglebone green wireless這塊開發板(dev. board)為例,在以下網址可以找到此開發板的電路圖[1]

https://wiki.seeedstudio.com/BeagleBone_Green_Wireless/

(註: 而我們實驗時所使用的Beaglebone green wireless與Beaglebone Black這兩塊板子上面的系統晶片SoC同為TI的AM3358,所以在此二塊開發板上,其驅動GPIO的方式是同理的。)

如果我們想要點亮開發板上的D5 LED,就必須尋找它連接的腳位(pin)。由下圖可以得知D5所連接的腳位(pin)GPIO1_24





這時候我們就可以在AM335xDatasheet[2]找到原來GPIO1_24PIN_NameGPMC_A8,並且腳位的模式需要選擇為7




現在我們已經知道要操作的腳位是GPMC_A8,接下來就是看Reference ManualGPIO feature去了解如何操作各個暫存器完成我們想要的功能。


由上面這張系統框圖可以看到,整個GPIO的操作其實不困難。給GPIO週邊提供時鐘、配置GPIO週邊的I/O方向、最後多工器選擇腳位的輸出由哪個週邊接管。有了這個系統框圖再搭配各個暫存器的說明,要自己寫出GPIO的裝置驅動程式相信不會太困難。

 

首先是圖中最左邊的Power & Clock,有玩過stm32的朋友一定很熟悉。沒錯,就是打開GPIO週邊的時鐘,沒有這個時鐘GPIO週邊是不會工作的。我們需要驅動LED的腳位是GPIO1_24,所以要操作CM_PER_GPIO1_CLKCTRL這個暫存器將GPIO1的時鐘打開。

 

操作記憶體地址這邊只講一次,其他暫存器的地址也是這樣查找的。在Reference Manual[3]我們尋找CM_PER_GPIO1_CLKCTRL應該找的到以下資訊:


可以看到CM_PER_GPIO1_CLKCTRL它的記憶體地址是基於CM_PER偏移了AC h,至於CM_PER的地址在哪裡呢? 可以在Memory Map的章節查到:



所以這樣我們就知道了CM_PER_GPIO1_CLKCTRL的記憶體地址,接下來要要看看需要設定這個暫存器的哪些內容。這裡需要操作Bit 18的欄位以及Bit [0:1],表示將時鐘致能開啟GPIO功能。對應的example code(先暫時不討論ioremap)如下:

static volatile unsigned int *CM_PER_GPIO1_CLKCTRL = 0x44E00000 + 0xAC;

*CM_PER_GPIO1_CLKCTRL = (1<<18) | 0x2;

接下來要講解GPIO週邊的暫存器操作,在裝置初始化的時候其實只需要操作GPIO1_OEoutput功能啟用就好,而GPIO1_CLEARDATAOUTGPIO1_SETDATAOUT都是在撰寫功能時才會進行操作。這裡只會講解GPIO_OE的操作方式,其餘兩個暫存器的操作方式也是同理。



可以看到上圖說明想要啟用GPIO1對應接腳需要對相對應的bit進行clear操作,對應的程式如下:

*GPIO1_OE &= ~(1<<24);                            // GPIO1_24設置為輸出模式

*GPIO1_CLEARDATAOUT = (1<<24);       // GPIO1_24(低電位)

*GPIO1_SETDATAOUT = (1<<24);           // GPIO1_24(高電位)

最後是GPMC_A8的腳位選擇功能。由於晶片的接腳有限,對於同一支腳位它可能被各個不同的週邊共享,但同一時間只能選擇一種功能進行操作。這裡我們需要的選擇一般的輸入輸出模式,所以需要將對應的暫存器賦值為7(先前有提及)。對應的程式如下:

*conf_gpmc_a8 = 7;

至此,所有涉及點燈的GPIO操作以及其對應的暫存器已講解完畢,如果手邊有基於AM335x系列處理器的開發板的朋友,可以趕緊來實戰看看驗證成果。


References: 

[1] Seeed Studio BeagleBone® Green Wireless Schematic

[2] AM3358 Datasheet

[3] AM3358 Technical Reference Manual


林普賢、孫文良

-----

歡迎各方洽談合作,務實/踏實追求共好。

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


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

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

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

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



2023年5月24日 星期三

嵌入式「系統」不是純軟體,包含軟體與硬體(亦包含電路)。推薦全華科技出版的一本電子電路相關書籍


多年前還在讀碩士班時,覺得這本電子電路的書籍(如下圖,來源連結)很不錯(並非刻意幫該書籍打廣告)。雖然後來是以嵌入式系統軟硬體整合開發為主(包含沒有作業系統以及有作業系統的系統軟韌體開發以及周邊電路整合設計),但從高職開始接觸這些始終覺得很有親切感。


來源連結


不過印象深刻的是,當時在成功大學工程科學系資訊組(資訊工程與應用組)的研究所讀碩士班時,該組的所有師生,除了自己之外,幾乎完全沒有其他任何人對於類比電子電路有基礎及興趣....(甚至對數位電路有興趣的也不多),只有一位大學部專題生跟著我做一些相關方面。

其實對於物聯網(IoT)之中的感測單元/嵌入式系統來說,上述的方面絕對是重要的,否則如果一個IoT系統之中的感測電路子系統所產生的訊號是錯的,導致raw data是錯的,如果這些基本的輸入內容本身就是有問題的,根本不能期望用了(輸入到)什麼酷炫神奇AI演算法並以上層軟體整合執行之後,系統的結果就會正常,就好比人吃白飯,不可能會拉出金銀珠寶;又好比不可能用純語音訓練出來的語音model去做影像辨識、不可能沒有任何硬體單元之下就可以拿到感測資料(精確來說,世界上沒有甚麼「純軟體」這種事情,只是藉由可程式化的方式(分層)操控電腦這個「硬體系統」去完成功能)。但坦白說從碩士班許多同儕、業界的同事發甚至主管的狀況來看,「以為數據資料處理辨識演算法可以取代感測訊號處理電路」是某些純軟體的人有些觀念錯誤的地方(包含業界一些老闆和主管),但是成大工程科學系其實在大學部有一些電路相關的必修學科課程,也有微控制器系統相關的必選課程,但顯然對於許多人來說,修課的效果可能是極為有限,許多人其實有修過課,但就幾乎好像是沒修過一樣。而其實我在一些選擇走資訊軟體方向的電機系畢業學生身上也有看到一樣的狀況,並不是工程科學系的學生才有如此的狀況。

此外,也有一些具備電路、MCU韌體開發相關背景的資深業界主管,誤以為自己所做的系統不是嵌入式系統。換句話說,很多方面都問題來自於自身不擅長的跨領域問題(雖然以學校科系來說,工程科學系號稱是主打跨領域的系所)。

嵌入式系統是具備特定功能的電腦「系統」,包含硬體與軟體,絕對 不是 只有作業系統或者只有上層應用程式,很多人常誤以為嵌入式系統就是有跑作業系統軟體的系統,這也是常見的錯誤認知。事實上,多去查詢基本定義即可得知,歐美的專業領域課本也常列出,例如Muhammad Ali Mazidi等人所著作的「The 8051 Microcontroller and Embedded Systems (2nd Edition)」,從書名就可理解我上述所說,該原文書的進一步詳情可參考留言處,而這類原文書通常會將這些基本名詞的定義做出說明。

又要講實話了,台灣有很多人很愛嘴上談「學術」兩字,但是實際上似乎大多不太會想去把基本名詞定義給弄清楚,這是蠻奇怪的事情,如果重視學術就該有基本的嚴謹度,而不是只是把「學術」兩字掛在嘴巴上好像很高尚,但卻缺乏實質的內涵,偉大的工程開發貴在對細節的用心,包含這些名詞基本定義和用語。


-----

歡迎各方洽談合作,務實/踏實追求共好。

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


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

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

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

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


2023年5月16日 星期二

「應付考試」 真的 不一定等於 「 學習」

 在臉書上看到 曹齊平老師/學長的這篇 貼文:




而 後輩我 個人的感觸如下:

曹齊平老師/學長 是大約在40年前的成大工程科學系畢業的學士、以及清大動力機械系畢業的碩士,那年代的大學很少、碩士更少,當年要考上這些學校,難度比近20年來考上這些學校的難度困難太多。要論考試,他絕對是高手,然而他勇於講出許多人不願意去面對的事實,也就是「考試不一定等於真正的學習」。

我個人近年來輔導許多工程師/名校生/產學公司主管/名校大學教授等 的經驗及感觸也是如此 (嵌入式系統工程技術開發設計領域),很多「基本」的內容或者基礎名詞的含義等方面,反而鮮為人知,因為缺乏深入的思考內化,且容易滿足於考試分數的表象以及這些表象所帶來的現實面好處/表面上的成就,導致許多人在需要實際進行工程技術專案開發時遭遇到許多障礙,大多肇因於真正的基礎(不是應付考試的那套,需要實際搭配實務去了解內化內容)不好。

考試確實只是一種容易量化競爭比較的方式,不一定真的等於「學習」,事實上,學歷也是類似的道理,但社會因應多人的情況,制度上就是以這些表面易於量化篩選的方式為主,久而久之就形成了根深蒂固且難以變通的文化/價值觀。

想起了幾年前一位名校碩士生跟我說的:「考試前再熬夜準備,這樣子CP值比較高」。但其實這種做法/習慣/觀念 ,對於專業工程技術的學習 及 「研究/開發」過程是極度不合適的,但是這確實就是多數人被台灣教育體系所培養出來的觀念。

以現實面而論,或許考試制度仍有其一定程度的必要性和作用,有其優點但也有很多缺點,但關鍵是社會大眾看待考試制度的態度/心態,不必過於極端、過度看重,應該可以更多元的去深入了解思考專業知識內容,以及更多包容/理解那些較不喜歡這種篩選方式的族群(絕對也有其強處,也不一定比較不聰明)。

我覺得如果在台灣大家很愛講「學術 」這兩字,那就更應該去多深入花時間面對許多表象以外的真實內容以及含義,而不是嘴巴整天講學術而其實都「只是」喜愛易於量化的表象(例如分數幾分、學歷有沒有拿到、年薪多少、論文數量績效、計畫經費數量績效、頭銜、年資數量等),這些一點都不「學術」。

或許沒有任何一種制度/體制是十全十美的,但重點其實是在於群眾看待這些制度體制的態度,不應該去過度迷信任何一種體制/制度,因為那樣只會造成體制/制度的缺點持續放大或者腐敗,應該要客觀地因應時代去看待/監督並動態調整。

-----

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


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

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

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

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



2021年7月29日 星期四

【課程內容介紹】STM32 MCU韌體課程 之 中斷(Interrupt)機制: NVIC基本原理與應用 課程簡介

下方影片為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



將兩者之preemption priority設置相同,UART exception無法搶占EXTI exception flow,按發生順序執行。




兩者之preemption priority設置相同,EXTI exception無法搶占UART exception flow,按發生順序執行。



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

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

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

【若需要嵌入式系統技術輔導課程 可來信洽談合作方式: iws6645@gmail.com,亦可先參考 課程招生網頁連結







2021年7月15日 星期四

【學員成功轉職案例】脫離22K低薪,學得一技之長, 從非本科系成功轉職韌體工程師 經驗分享

大家好,這篇文章是一位長期接受本園區作者(講師)輔導的一位學員人士,在當時成功轉職韌體工程師的經驗與心得分享。


以下文章內容為學員分享的經驗與心得: 

各位想轉職的朋友大家好😀,一開始容我先自我介紹 

學員的學經歷:

  • 國立名校大學 研究單位 韌體研發工程師 (專任研究助理)
  • 私立科技大學 電機工程系 碩士
  • 國立科技大學 水產食品科學系 學士

大學畢業2年後,決定轉職的動機?

大學時期,其實大多數時間也沒有接受到畢業後到底該做什麼的引導或觀念啟發,大學畢業後,不清楚該做什麼工作比較有發展性,大學剛畢業後的2年,曾做過收銀員、百貨櫃姐、作業員....(服務業、製造業等居多)。

上面這些工作的共同點就是薪水都在22K左右,好一點的也不超過29K,且都是花大量時間換取金錢。每次工作回到家就是放鬆時刻,洗完澡看看影片、滑滑臉書(我是老人),摸一摸時間一下子就到12點了,隔天一早再次過著重複的人生,就算放假也只想發懶、睡覺休息,一點進步的空間都沒有。但是隨著年紀增長,有時候也會想:我能一直這樣工作到老嗎?答案當然是否定的。

想要脫離22K,就是要跟別人不一樣,要有不可取代性,要學一技之長。

就是因為有想過要改變,想脫離22K的人生才開始有了轉職的想法。當時身邊認識的朋友就是在科技業上班,以及一直以來都是就讀工程背景的專業人士,有猜到嗎?就是這個技術部落格的作者阿良老師啦(灑花)。


不是相關科系也可以做韌體研發?會不會贏不過理工相關科系呢?

對於想轉職的朋友,這個問題確實是相當重要。想當初我也問過阿良老師一模一樣的問題🤓。

當時大學畢業,剛出社會工作兩年的我,在阿良老師的建議下,決定轉職電資工程相關領域(電機電子資工),由於我是食品科系畢業,在阿良老師的輔導及討論評估下,認為我需要再去修習理工相關科系,原因是有利於找尋電資工程方面相關的工作,當然每個人狀況不同老師都會給予不同的建議(老師在學界及業界都有相關經驗)。

經過他的評估、輔導和討論之後,我決定再次地回到學校(沒錯,我想都沒想過我會讀碩士,我又不喜歡讀書🤣),當時我已經24歲。

從一開始報考碩士班考試,阿良老師就開始輔導我,針對碩士班考試相關基礎和科目開始準備,像是程式語言、計算機概論、數位邏輯電路、作業系統、資料結構等專業內容目標一一教學。

後來順利考上研究所碩士班之後,阿良老師依照他對於產業界和學術界的了解,輔導我該如何選擇學校的課程,過程中遇到任何專業領域問題,阿良老師都跟我一起參與並解決我的問題。在修習研究所的過程中,除了課堂上所需完成的專案(project)外,阿良老師也安排、鼓勵我參加聯發科與經濟部合辦的比賽,來增加自己的表達能力等經驗以及增加後續應徵工作的經驗值,一直到寫碩士論文,阿良老師也非常積極的指導我研究方向及內容,一直到我碩士畢業。

碩士畢業後,阿良老師也持續輔導我關於找工作的方向,甚至包含找工作所需的履歷表、面試內容準備,阿良老師都會給予經驗的傳授,過程中也會不斷地指導專業內容相關的細節

經過阿良老師的長期用心輔導後(包含就業過程),我在26歲時轉職成功!順利地在當時找到國立名校大學(國內四大名校之一)研究單位的韌體程式研發工程師的工作(待過這學校的幾個單位,工作內容都是與嵌入式系統&物聯網裝置相關的軟韌體程式研發相關),工作過程中也不斷有阿良老師的輔導協助。

值得一提的是,在名校大學研究單位的其中一段工作時間內,在我辦公室座位的右手邊坐的是清華大學電機工程碩士畢業的工程師同事,而我左手邊坐的是台灣大學畢業的工程師同事,這些是在以前不是畢業於電資相關科系、也不是名校畢業的我,在過去從來沒想像過可以達成的事


名片

然而,在國立名校大學的研究單位上班,其實也常會接觸到許多的博士後研究員(博後)同事、主管和研究生們,許多人都是國立名校大學畢業,當然也看了許多令人「大開眼界的事情…比如說某些名校畢業的同事在專業基礎能力上的一些狀況,有時也會讓我感到相當意外 (當然這又是另一方面的許多故事了(笑)),讓我深刻理解到什麼是阿良老師長期以來所敘述台灣社會很普遍發生的「產學落差」、「學用落差」。

所以,關於非本科系是否適合做韌體、專業方面是否一定會比不上本科系名校畢業生?在看完上述內容之後,我想,大家的心中應該有答案了。


轉職為韌體工程師,學到了什麼?

對於大學就讀食品科系的我轉職到電資工程領域,覺得落差真的是蠻大的。現在回頭思考,會發覺過去我個人在大學時期比較多是背誦題目及應付考試(當然也有實驗課),相較起來我個人在當時是比較缺乏深度的思考,也缺乏有經驗的老師的引導。

而在後來跨入到電資工程領域並且參與工程專案研發之後,發現很多是需要深入思考的邏輯。過程中也有參與比賽(需要表達),因為要介紹自己開發的作品的功能發想及特色,所以表達能力也會訓練到、需要簡報presentation,製作簡報PPT的能力會變強(至少要有基本sense)、在過程中對於比賽作品專案時程的掌握、過程中開發作品遇到bug,也要學會找答案,所以找資料的能力會增加相對的英文能力也會增加,最最重要的是透過參與比賽、以及科技發展技術及綜合以上的能力增強後,自己的認知與視野會不同!其實這些都是無形中就增加的能力,有的甚至還要會拍影片😅(例如參加競賽的時候)

韌體研發工程師的薪水真的比較高嗎?

對於在大學剛畢業時期的我,每個月的薪水大約落在23K~28K左右。而在經過阿良老師的長期輔導、電機碩士班畢業之後,我找到的韌體工程師職位工作的薪水相較於過去大幅增加了50%~60%,等於投資自己、替自己加薪加值,在經濟方面終於也不用像以前那樣的緊迫,而且所學習到的軟韌體相關專業技能,是會隨著經驗的增加而持續精進進步,所以我覺得,學得專業一技之長」是真的非常重要


最後最後鼓勵各位朋友一句話:

「你不需要很厲害才能開始,但你需要開始才會很厲害」

雖然這句話已經聽到老掉牙了,但這句話在我有時候失落時都還能鼓勵到我😝


以上為學員之經驗與心得內容



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


阿良的嵌入式系統技術學習區

部落格作者(課程講師)簡介: https://sites.google.com/view/wenliangsun/

【若需要嵌入式系統技術輔導課程 可來信洽談合作方式: 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,亦可先參考這篇介紹文章