作者 | strongerHuang
微信公眾號 | strongerHuang
你可能覺得微控制器沒啥技術含量,但事實是微控制器涵蓋的技術非常之多,從底層到應用,應該沒有一個人能熟練掌握其中所有的技術。
這裡就站在面試的角度來說說:微控制器工程師面試常見問題。
1、微控制器上電之後不執行,可能的原因有哪些?
可能的原因包括供電問題(如VCC電壓偏離正常範圍)、晶振問題(如晶振損壞或未起振)、RESET引腳電平邏輯錯誤(如一直處於復位狀態)、程式下載或擦除問題(如flash無法下載或損壞)以及控制程式問題(如程式存在bug)。
2、看門狗定時器的作用?
看門狗定時器(Watchdog Timer)在嵌入式系統中用於監控和重置系統,以防止因軟體故障導致的系統崩潰。它透過定時檢查系統是否正常執行,並在超時後觸發系統重置,從而提高系統的可靠性和穩定性。
3、微控制器中斷處理流程是怎樣的?
微控制器中斷處理流程通常包括三個步驟:中斷響應、中斷處理和中斷返回。
當中斷髮生時,中斷系統透過硬體自動生成長呼叫指令(LACLL),將斷點地址壓入堆疊保護,並將對應的中斷入口地址裝入程式計數器PC,使程式轉向該中斷入口地址執行中斷服務程式。中斷服務程式完成後,計算機透過中斷返回指令RE將斷點地址從堆疊中彈出,返回到程式計數器PC,並通知中斷系統已完成中斷處理。
4、解釋一下程序、執行緒、協程的概念
程序:程序是併發執行的程式在執行過程中分配和管理資源的基本單位,是一個動態概念,競爭計算機系統資源的基本單位。
執行緒:執行緒是程序的一個執行單元,是程序內科排程實體。比程序更小的獨立執行的基本單位。執行緒也被稱為輕量級程序。
協程:是一種比執行緒更加輕量級的存在。一個執行緒也可以擁有多個協程。其執行過程更類似於子例程,或者說不帶返回值的函式呼叫。

5、什麼是嵌入式系統?
嵌入式系統是以應用為中心,以計算機技術為基礎,軟硬體可裁剪的專用計算機系統。它適用於應用系統對功能、可靠性、成本、體積、功耗有嚴格要求的場合。嵌入式系統通常由處理器、儲存器、輸入輸出裝置、軟體等組成,具有體積小、功耗低、可靠性高、功能專用等特點。
6、C語言中堆和棧的區別是什麼?
堆和棧是C語言中用於儲存資料的兩種不同區域。棧由系統自動分配和管理,通常用於儲存區域性變數和函式呼叫時的臨時資料;而堆需要程式設計師自己申請和釋放,通常用於儲存動態分配的資料。兩者在儲存內容、管理方式、空間大小、能否產生碎片、生長方向、分配方式和分配效率等方面都存在差異。
7、請簡單說下嵌入式系統中的RTOS排程策略
RTOS(即時作業系統)的排程策略包括基於優先順序的排程、輪詢排程、時間片輪轉排程等。這些策略直接影響系統的即時性和效率,確保任務能夠按照預定要求得到執行。
8、你如何保證微控制器程式碼的質量和可靠性?
在微控制器專案中,我通常會採取以下措施來保證程式碼的質量和可靠性:首先,我會對程式碼進行嚴格的測試和驗證,包括單元測試、整合測試和系統測試等;其次,我會遵循良好的程式設計規範和程式碼風格,以提高程式碼的可讀性和可維護性;最後,我會定期回顧和更新程式碼,以消除潛在的錯誤和漏洞。
9、程式的區域性變數、全域性變數和動態申請資料分別存在於哪裡?
-
區域性變數存在於棧區。 -
全域性變數存在於靜態區(資料段)。 -
動態申請的資料存在於堆區。
10、在C語言中,如何實現連結串列?請舉例說明。
連結串列是一種動態資料結構,由節點組成,每個節點包含資料部分和指向下一個節點的指標。
在C語言中,可以透過結構體和指標來實現連結串列。例如,單鏈表的節點可以定義為:
struct Node {
int data;
struct Node* next;
};
然後透過動態分配記憶體和設定指標來構建連結串列。例如,建立一個新的節點並插入到連結串列的開頭:
struct Node* head = NULL;
struct Node* newNode = (struct Node*)malloc(sizeof(struct Node));
newNode->data = 10;
newNode->next = head;
head = newNode;
由於篇幅有限,今天就分享這些,其實還有很多很多,大家面試之前,儘量先刷一波面試題。