成  就  一  直  前  進  的  你

成  就  一  直  前  進  的  你

loanding...

首頁>求職面試>新手必看!成為嵌入式工程師前必須掌握的基礎原理|工作甘苦談

新手必看!成為嵌入式工程師前必須掌握的基礎原理|工作甘苦談

無論你正面臨面試挑戰,或是在職場中努力站穩腳步,這裡整理了實用經驗與建議,協助你釐清方向、提升應對力,並在每個職涯轉折點做出更明智的選擇。

新手必看!成為嵌入式工程師前必須掌握的基礎原理|工作甘苦談
share

book 文章目錄

arrow_uparrow_up
share

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

❓許多初學者或工程師朋友們常會問我,想學好嵌入式系統基礎,到底該學ARM、8051還是PIC? 該學習幾位元的CPU平台?

新手必看!成為嵌入式工程師前必須掌握的基礎原理
▲新手必看!成為嵌入式工程師前必須掌握的基礎原理,圖片來源: freepik

首先,我建議應該先了解這個問題是在「問什麼」,什麼是ARM?

ARM是CPU,而8051和PIC是MCU,朋友們可自行想想看,CPU和MCU是一樣的東西嗎?

又,假設初學者只有呼叫過(複製貼上、頂多改參數/引數) 人家所寫好的API (例如開源社群 或者 IC Design公司的軟韌體單位 所提供的API Library函數庫)來驅動MCU作事(完成功能)的話,

🔎我們以呼叫下列函數為例子 (不針對特定平台,但看函數名稱應該很清楚這在做啥):

GPIO_Setup(Pin_number, Output);

GPIO_Output(Pin_number, High);

無論你是使用什麼CPU based的MCU/SoC晶片為核心的板子(無論CPU是ARM、8051、MIPS、AVR、PIC MCU內的CPU),上述code確實能讓MCU的GPIO Port輸出數位訊號的1(高電位),

但是,如果只是呼叫這些函數的話,有讓你接觸到CPU架構嗎? 和CPU有什麼關係? 甚至很多人可能沒思考過,到底什麼是CPU?

初學者或沒思考過這些問題的工程師朋友們,也有可能會連上述這些範例程式碼,在MCU上電開始動作時,到底是被存放在哪裡的狀態下被CPU給提取和執行,可能都不清楚 。

🧐但我們試想一個問題,如果只是呼叫函數,而從來沒了解過背後的原理基礎,那是否一位受過基本實驗訓練的國中生、高中生就能作這些了? 對於系統開發設計的基礎知識與深度是否足夠?

恐怕有許多朋友從來沒有思考過這些問題。

‼本園區的 「嵌入式系統基礎原理與實務課程」,能藉由適合初學者奠定基礎觀念的8051 MCU (架構相對簡易清晰的微電腦平台) 作為教材,讓你了解CPU到底做了些什麼? 當然每款CPU之間會有差異,但是建立基礎觀念之後,許多觀念都是通用且可延伸的。

再次重申‼ 這個課程並不是只教你8051 MCU怎麼用,也不是只教8051,

而是以8051這款 架構相對簡易清晰的微電腦平台 (且資料完整豐富)作為實作/實驗/理論觀念驗證的實驗平台,

期望學員能在學習完課程後能奠定嵌入式系統(更精確來說是電腦底層觀念,不只是嵌入式系統)基礎,包含CPU指令集/行為、記憶體存取、基礎常見周邊裝置驅動應用、基本介面電子電路(類比&數位),

希望學員將這些學習內容消化吸收後,在未來於職場工作上遇到其它微電腦晶片平台時,可以有清晰的架構觀念,能舉一反三、能藉由紮實的基礎而在未來工作之中遇到其它平台時,能有自行舉一反三、擁有自學熟悉新平台的能力。

-

再延伸上述的說明內容,以subroutine call或者function call為例
👉無論是哪款CPU,基本上都會有一些必須的暫存器,例如PC (Program Counter register,程式計數器)、 SP (stack pointer register,堆疊指標)、PSW (Program Status Word register,程式狀態字組),這些暫存器的用途為何?
👉堆疊(stack)是什麼時候需要使用? 呼叫subroutine(這邊是指組合語言的副程式)或者在C語言作function call時是如何被使用? 是如何被實現? CPU在此時做了哪些事?
👉當撰寫C語言去呼叫函數、或者撰寫組合語言呼叫副程式,CPU所執行的程式流程是怎麼跳 過去執行subroutine的?
👉中斷(Interrupt)發生時,又是如何使用堆疊來完成中斷機制? CPU所執行的程式流程是怎麼跳 過去執行ISR (Interrupt Service Routine,中斷服務程式)的?
👉以8051內的CPU指令集為例,CALL指令分為ACALL和LCALL,差別在哪? 而和Stack(堆疊)相關的PUSH/POP/RET/RETI指令是在做什麼的? 實際上做了哪些相關的事?
👉CPU在執行完subroutine或者ISR(中斷服務程式)之後要如何回家(回到主流程?) 如果堆疊之中這些被存放的值被意外地改掉,會發生什麼事?
再講些題外話,
👉如果用C語言撰寫MCU程式,你知道main()函數被執行之前做了什麼事嗎?
👉如果用C語言撰寫MCU程式,例如宣告變數 unsigned char i=1; 你知道這個i變數的物理實體設備空間實際上是什麼嗎? 知道實際上這個i=1是如何被實現的嗎?
 
【嵌入式系統基礎原理與實務課程】初學者到底該學習哪款MCU?

【嵌入式系統基礎原理與實務課程】初學者到底該學習哪款MCU?

再強調一次,如果只有經歷過呼叫現成的API的經驗,讓MCU會動就滿足,而從來沒了解過這些API背後的底層原理基礎的話,那是否一位受過最基本的實驗步驟訓練的國高中生就能做這些了? 讀到大學甚至碩、博士畢業,或者身為工程師的專業度在哪裡呢?
我想這些是很值得大家思考的事! 我認為專業領域的視野和深度,可以決定一位工程領域人員的實際專業價值。
上一篇: JD SCENT 行銷企劃在做甚麼呢?開箱行銷實習生日常工作生活|工作甘苦談 下一篇: 掌握三大關鍵階段,成功轉職成為 Python 工程師,順利進入職場|應徵技巧分享

你可能會喜歡的文章

author

作者簡介

我是面試經驗談 / 各行各業面試全攻略!

分享各行各業的面試技巧與準備心法,從履歷撰寫到面試應答一手掌握!也記錄進入職場後的甘苦點滴,無論是升遷瓶頸、人際相處,還是轉職迷惘,都陪你一起思考下一步。

totop