如何快速構建嵌入式全棧知識體系?

嵌入式是一門交叉學科。

一個嵌入式電子產品(比如手機)從底層到上層,一般會涉及半導體芯片、電子電路、計算機、操作系統、多媒體等不同專業領域的知識。

很多從事嵌入式開發的朋友,通常來自不同的專業(電子、電氣、計算機、機械、自動化、物理,甚至一些文科專業),在實際學習和開發中,由於專業背景的限制,經常會遇到各種技術壁壘:搞硬件的不懂軟件,搞軟件的不懂硬件,搞底層芯片的不懂上層軟件,搞上層軟件的不懂底層芯片。

嵌入式技術棧太深,除了極少數人,一般人很難實現“技術破圈”,將整個技術棧從上到下捋一遍,徹底打通。

相對於桌面開發,嵌入式開發還具有碎片化特點:不同架構(如ARM、MIPS、RISC-V等)、不同廠家的SoC處理器(如Cortex-M系列、cortex-A系列、AI芯片等),不同的操作系統(Linux、uC/OS、FreeRTOS、Android等),一般都需要匹配對應的編譯開發環境,然後工程師才能基於這個編譯環境做應用開發。

如果把軟件開發比作開飯館賣餃子,那麼對於桌面軟件開發而言,鍋碗瓢盆、水電煤氣,甚至餃子(超市裏的速凍餃子)都準備好了,標準統一,就等着你下鍋,可以根據顧客不同的需求,做成一道道不同的美食:豬肉芹菜的、三鮮的、蒸的、煮的、煎的。

而對於嵌入式開發,可能情況就不太一樣了:沒有現成的餃子成品可以用,擀餃子皮、剁陷、鍋碗瓢盆都需要自己動手準備,開發環境需要自己搭建。

遇到問題,不能僅僅侷限於當前的軟件業務邏輯,可能還要從芯片、硬件電路、操作系統、底層驅動,甚至編譯器等不同的維度去分析,去定位出現問題的原因。

隨着半導體行業趨勢的變化,以及國內對芯片行業的大力投入,國產芯片越來越多,未來嵌入式軟件工程師的工作崗位和工作內容也會隨之發生一些變化:

嵌入式開發人員不再僅僅是基於芯片廠家提供的現成的開發板、BSP軟件包、產品方案去開發產品,而是有越來越多的工程師直接進入芯片原廠工作,參與芯片底層軟件的開發和維護工作:芯片測試、操作系統移植、驅動開發與維護、以及基於自家芯片產品方案的推廣和技術支持等工作。

在芯片設計前期,嵌入式軟件工程師有時候還需要和IC工程師一起去測試芯片,編寫相應的測試代碼和測試案例。

工作職責和工作內容的變化,需要嵌入式軟件開發人員不斷擴充自己的知識體系,不斷學習和解鎖新的技能:C語言編程技能、軟件工程、編譯原理、計算機體系結構、操作系統、彙編語言、硬件電路,有時甚至還需要了解一些芯片設計、芯片製造、CPU內部結構等“圈外”知識。

每一個新的知識點,每一門新的技能,市面上都有大量的經典書籍可以參考閱讀,但每一本書都很厚,都有自己偏向的領域和側重點,和我們的實際工程需求往往有一定偏差,都需要花大量的時間和精力去閱讀和消化,然後才能提煉出我們在嵌入式開發中所需要的一些核心知識點和關鍵技能。

有了這些核心知識點和關鍵技能作爲理論支撐,我們就可以在嵌入式開發中更好、更快地解決各種工程問題。

工程師都很忙,沒有大片的時間和精力去通讀各種經典書籍,或者說很少有人能堅持讀完。

嵌入式開發人員的專業背景各不相同,每個人的知識儲備和點亮的技能樹也參差不齊,知識體系的不完善和基礎技能的儲備不足,往往會影響實際工作的輸出效率,在工作和學習中會遇到各種各樣的問題無法解決,學習陷入困境,或者工作陷入卡殼。

那有沒有更好的方法,快速掌握這些嵌入式開發所需要的核心知識點和關鍵技能呢?

答案是:有。

基於這個現實需求,《嵌入式C語言自我修養:從芯片、編譯器到操作系統》出版了。

作者基於自己的嵌入式學習經歷和工作經驗總結,從最底層的一堆沙子開始,一步一步,帶領大家學習CPU芯片是如何設計和製造出來的:

CPU內部結構是什麼樣的?

CPU是如何工作的?

編譯器和指令集的作用是什麼?

一個程序的編譯、鏈接、安裝和運行的過程是怎麼樣的?

程序運行時的內存世界是什麼樣的?

爲什麼會有內存錯誤?

棧溢出攻擊是怎麼回事?

如何才能真正地理解和掌握C語言?

爲什麼很多人在閱讀Linux內核源碼時感到很喫力,看不懂?

非計算機科班的朋友如何快速掌握操作系統的核心原理和概念?

如何快速理解多任務編程思想?

進程、線程和協程有什麼區別?

這些疑問在書中都會一一講解。

寫作初衷

本書的寫作初衷,主要是爲不同專業背景的嵌入式學員彌補理論短板:以C語言爲切入點,從最底層的芯片開始,到編譯器、操作系統、軟件工程、系統框架、進程、線程、協程,搭建一個嵌入式開發所需要的完整知識體系和認知框架。

平衡理論與工程

本書不會像經典書籍那樣面面俱到,深入每一個細節,而是有的放矢,在理論和工程之間做一個平衡,一切都剛剛好:一切以滿足實際工程需要爲參考點,所有學習的知識點滿足實際項目所需要的理論支撐即可,不會深入到學院派關注的各種細節和性能指標,以免深入其中無法自拔,耗費太多的時間。

掌握了這些實際開發中需要的核心知識點和關鍵技能,也就補齊了理論短板。

此時,相信大家也會對嵌入式開發有一個更加清晰的整體認識,在工作中遇到各種問題,都可以嘗試用這個知識體系和認知框架去分析和解決,分析問題有了着力點,也就有了思路,也就不再迷茫。

通俗風趣

相比其他書籍,本書堅持使用大白話寫作,通俗易懂,不怕學不會,就怕你不學。

使用風趣幽默的寫作風格,以增強閱讀體驗,越讀越想讀,無論讀多久都不會覺得枯燥。

內容新穎

在本書內容安排上,做了很多嘗試性創新,比如:

  • 獨家講解GNU C編譯器擴展語法,幫你破解閱讀Linux內核源碼時遇到的各種稀奇古怪的語法難題。

  • 首次在ARM平臺下,通過反彙編,帶你理解C語言背後的底層運行機制,深度講解程序的編譯、鏈接、安裝和運行原理,深度講解程序運行時的動態內存管理、內存泄漏、棧溢出攻擊示例等。

  • 結合嵌入式開發常用的三種場景:裸機環境、RTOS、Linux,幫助大家去分析和總結這三種場景下的內存管理,讓你一覽整個嵌入式開發環境概貌。

  • 針對當前火熱的人工智能、AIoT、異構計算等熱門技術,從一堆沙子開始,一步一步帶你瞭解整個CPU芯片設計、製造、封裝流程,CPU內部結構及工作原理:流水線、cache、單發射、多發射、亂序執行,SIMD、NEON、多核、異構...

  • 針對Linux內核驅動閱讀難題,在本書中也分享了C語言的OOP編程思想,教你如何使用C語言來實現OOP編程,如何利用OOP思想去分析Linux內核中複雜的驅動和子系統。
  • 針對電子類、自動化類等跨行進入嵌入式專業的朋友,零基礎入門操作系統的核心概念,教你如何在裸機環境下使用多任務思想編程,如何使用狀態機進行任務分解,以及RTOS任務調度的核心數據結構。讓你不需要去啃大塊頭的《操作系統》書籍,直接切入操作系統最核心的知識點。
  • 重點分享C語言的模塊化編程思想,從零開始,從一個單文件開始,一步一步教你如何去封裝一個模塊,如何去使用一個模塊,如何模塊間通信,如何建立模塊依賴,軟件如何分層,模塊如何解耦,如何將你的軟件迭代爲框架,幫你樹立軟件工程的意識,框架編程思想,讓你寫的代碼更加容易擴展和維護。
  • ARM架構越來越流行,在手機、平板、桌面PC和服務器領域攻城拔地,市場份額越來越大,而目前很多編譯原理都是基於X86架構來分析的。本書打破慣例,首次在ARM平臺上,通過反彙編手段,剔除編譯過程中各種語法分析等對嵌入式工程師無關緊要的技術,給大家分享ARM平臺下程序的編譯、鏈接、安裝、運行全景圖,尤其是動態鏈接過程、多進程如何共享動態庫、內核模塊是如何動態加載和運行的、U-boot是如何自舉並重定位的,這些嵌入式開發中經常遇到的核心知識點和難點,會帶領大家逐一分析。

口碑之作

本書的大部分內容基於作者幾年前錄製的、專門爲嵌入式工程師打造的C語言視頻教程:C語言嵌入式Linux高級編程改編。

結合幾千名學員的中肯評價和不斷反饋,幾經修改,不斷優化結構和內容安排,紙質版如今才得以和大家見面。

全書正文560+頁,加上目錄、前言等,差不多600頁,握在手上,沉甸甸的,全是乾貨。寫書是枯燥的,耗時的,幾經拖延,幾經修改,最後還是跟大家見面了,用口碑和信念做編程教育,致力於分享最原汁原味的技術和乾貨知識,幾千名學員的中肯反饋和積極評價是最讓人欣慰的,也是這本書質量的保障。

願這本書也能爲你的嵌入式學習盡一份力,爲你的嵌入式職場生涯增磚添瓦。

▊《嵌入式C語言自我修養——從芯片、編譯器到操作系統》

王利濤 著

  • AIoT時代嵌入式開發集大成之作
  • 10年工作及培訓總結
  • 從芯片編譯器到操作系統等嵌入式開發所需核心理論和技能一應俱全
  • 51CTO/CSDN/淘寶/QQ學員力薦

本書是一本專門爲嵌入式讀者打造的C語言進階學習圖書。本書的學習重點不再是C語言的基本語法,而是和嵌入式、C語言相關的一系列知識。作者以C語言爲切入點,分別探討了嵌入式開發所需要的諸多核心理論和技能,力圖幫助讀者從零搭建嵌入式開發所需要的完整知識體系和技能樹。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章