fbpx

掌握 ARM Cortex-M4 上的嵌入式“System Programming”

Contents

啟動、記憶體訪問、中斷、鏈接器、Make、I/O 和 Clock Tree 的詳盡動手拆解

從這 27.5 小時的課程,你會學到

  • 了解 STM32F411 探索板上的 ARM Cortex-M4 核心、資料表和參考手冊
  • 學習 32 位元控制器的嵌入式 C。 寄存器和記憶體存取、按位運算( Bitwise operations )、內聯彙編( Inline Assembly )的不同方法
  • 了解非浮點和浮點模式的中斷子系統( Interrupt Subsystem )。 設置異常向量表( Exception Vector Table ),設置 Systick 和 EXTI 中斷
  • 學習 ELF 目標檔案格式、鏈接器符號( Linker Symbol)重定位和解析、鏈接器變量、VMA 和 LMA。 編寫鏈接腳本( Linker Script )檔案。
  • 了解 Clock 子系統,了解 PLL 操作,Clock Tree 的裸機配置和無需配置工具的 PLL
  • 了解 I/O 子系統、I/O 引腳的電路。 了解不同的引腳模式,如漏極開路( open drain )、推拉( push-pull )、交替功能和內部上拉
  • 了解啟動過程,設置中斷向量表並學習如何編寫復位處理程式,設置資料、堆棧和 .bss 部分

要求

  • 基本的微控制器知識是必要的,至少了解任何 8 位元控制器,如果你了解 16 位元架構則更好
  • 需要 C 程式設計的中級知識以及基本的指針和資料結構概念。 根本不需要嵌入式 C 的知識,因為必要的嵌入式 C 將在課程本身中解決

課程說明

深入研究 ARM Cortex M4 架構和使用帶有 GNU ARM Cross Toolchain 的 STM32F411 探索板的系統程式設計。 了解程式設計師模型,IDE(整合開發環境)。 深入學習資料表和參考手冊、關於記憶體訪問及其陷阱的演示和案例研究(不同的方法,如帶有偏移和結構的 Macros)、編譯和鏈接過程、輸入/輸出子系統、中斷(非浮動和浮動兩者)和 Clock Tree 配置,並深入討論 PLL 電路和操作。 簡報、程式碼演練、白板和 Debug sessions 是課程不可或缺的一部分。

我保留了完整的第一章給你預覽,以便你了解一些基本概念,開始任何微控制器上的學習。

嵌入式系統中有某些主題,特別是針對高級微控制器的主題,這些主題提出獨特的挑戰

  • 通過 macros 或結構指針直接在微控制器上操作記憶體的過程
  • 嵌入式系統的指針。 儘管看起來與他們的工作站相似,但存在細微差別,如果不小心處理,可能會搞亂應用程式
  • 在嵌入式韌體開發中,應用程式效率、確定性、功率效率、記憶體大小、編寫高效的 C 程式以及追蹤從 C/C++ 編譯的組合程式碼至關重要。
  • 中斷處理過程很複雜,創建的堆棧幀( stack frames )像浮點和非浮點、堆棧和非堆棧等實現之間有所不同。 中斷搶占( interrupt preemption )是一個複雜的特性,需要小心處理。
  • Linking and Make 的過程也被嚴重誤解了。 目標檔案、重定位、符號解析等主題提出了獨特的挑戰,並且關於這些的綜合資訊很少。
  • 目標檔案格式也是一個灰色區域,在理解鏈接過程時會造成很多麻煩。 如果沒有適當的指導,目標檔案中的不同表(如符號表、重定位表)很難理解。
  • 如果不能很好地理解引腳的電氣和電路,輸入/輸出引腳配置也會帶來挑戰。 有多種配置,其中微控制器的每個引腳都可以運作如開漏、推拉、高阻抗等。
  • 高端微控制器的 Clock Tree 也非常複雜。 向不同子系統提供 clocks 的多個 clock 源使得初始學習曲線非常陡峭。 除此之外,高頻 clocks 由 PLL 驅動,PLL 本身就是複雜的電路,在配置它們時需要大量的理解。
  • 處理器啟動可能很棘手,尤其是在每次重置後設置記憶體的部分。 理解 .text、.data、.bss 部分並在啟動期間正確設置都是獨特的挑戰。

在本課程中,我努力通過理論、圖表、動畫和程式碼來解決上述所有挑戰。 有很多演示來解釋難以理解的概念。 我通過 IDE 上的大量 debug sessions 清除了所有概念,同時實時檢查了控制器的不同子系統。

我已採取以下步驟來應對挑戰

  • 以不同的方式(如 Macros 和結構)處理記憶體訪問和操作。 我逐漸建立了概念,直到我達到了表達的最終形式。 我已經展示了通過結構和它們的緩解措施未對齊訪問記憶體的示例。 位元運算已在除錯器上實時處理。
  • 為了理解鏈接過程,我創建了程式碼示例並首先手動編譯每個源文件並查看 ELF 目標檔案、符號表和重定位表以及反彙編。 一旦鏈接器將這些文件編譯成單個目標檔案,通過查看最終目標檔案就可以清楚地解釋符號解析以及程式碼和符號重定位。 鏈接器腳本檔案用記憶初始化前後的圖表進行了詳細解釋。
  • 啟動過程的大規模 debug session 解釋了處理器如何實時設置記憶。 復位處理程式在 C 語言中進行了說明和演示。演示了初始化 RAM 中的 .data 部分以及設置 .bss 部分和堆棧的過程。
  • 使用多個 Makefile 解釋 Make 過程,每個 Makefile 的複雜性略有增加,直到編寫並完全理解最終的“神秘”makefile。 解釋了依賴關係圖,並在 make 上討論了許多可能的錯誤場景,以解釋 make 如何處理 Makefile。 這是對 Make 的相當詳盡的處理,它將有助於開發人員為深度嵌入式系統編寫 makefles。
  • 詳細說明了中斷處理連同其理論。 非浮點和浮點配置的中斷( interrupt )處理和搶占( preemption )的演示和理論。 在 debugger 上解釋和演示了惰性堆棧( lazy stacking )等概念。
  • 詳細解釋了 Clock Tree。 用於設置頻率的 PLL 計算。 PLL 操作理論,解釋不同的 PLL 子系統,例如電壓控制器振盪器、分頻器、相位頻率檢測器、低通濾波器,並帶有插圖、動畫和時序圖。 演示了在 debugger 上 clock tree 子系統中寄存器的初始化。
  • I/O 電路,然後配置 I/O 引腳。 所有引腳模式解釋為推拉、漏極開路、類比和交替功能。

目標受眾

  • 計算機科學、電機和電子本科生和應屆畢業生在嵌入式系統領域尋找職業
  • 希望從 8 位元或 16 位元控制器升級到 ARM Cortex-M4 控制器的工作專業人士
  • 對在 STM32F4 微控制器上進行裸機編程感興趣的愛好者和發燒友

講師簡介

Diptopal Basu 技術指導員

在深度嵌入式系統、嵌入式 Linux 和企業軟體方面擁有 20 年的行業經驗,擁有電子和通信專業的研究生學位。 我是一個熱心的學習者,對實時嵌入式系統、硬件設計特別是工業控制感興趣。

我喜歡科幻小說,並且是 BSG、StarTrek 和 Star Wars 等系列的狂熱粉絲

英文字幕:有

  • 想要了解如何將英文字幕自動翻譯成中文? 請參考這篇 How-To

🙌 如何有效率地管理 ChatGPT 輸出與整理自己的 ChatGPT 提示( prompts )使用情境?LN+ for Web 已經針對 ChatGPT 的整合做最佳化


🙌 讓 Notion AI 成為你線上學習的得力助手,詳細操作請參考 – 使用 Notion AI 功能來為 udemy 的課程做摘要總結


  • 點選這個優惠連結 課程特價 | Udemy 永久擁有課程 NT370 起( 請登入 Udemy|按過“優惠連結”後到”報名參加課程“連結網頁做更新 )
  • Udemy 現在越來越多課程有中文字幕,請參考 Soft & Share 中文線上課程
  • 手機上點選優惠連結看到的價格比電腦上看到的貴
  • $代表當地貨幣, 如在台灣為 NT
  • 點選”報名參加課程”有可能因瀏覽器 cookies 轉久一點或回報錯誤而無法連上,請稍等刷新或重新點選就會出現

報名參加課程

Sponsored by Udemy


也許你會有興趣

不受 FB 演算法影響,歡迎透過 e-mail 訂閱網站更新

這個網站採用 Akismet 服務減少垃圾留言。進一步了解 Akismet 如何處理網站訪客的留言資料

Powered by WordPress.com.

Up ↑

%d 位部落客按了讚: