嵌入式C語(yǔ)言自我修養(yǎng):從芯片、編譯器到操作系統(tǒng)(附送書(shū)籍)
最近,閱讀了王工(王利濤)贈(zèng)送的一本由他編著的書(shū)籍《嵌入式C語(yǔ)言自我修養(yǎng)》,感覺(jué)寫(xiě)的挺不錯(cuò),也有讀者問(wèn)我要這本書(shū)的pdf,今天分享一下這本書(shū)籍《嵌入式C語(yǔ)言自我修養(yǎng)》:從芯片、編譯器到操作系統(tǒng)。
然后,再送10本《嵌入式C語(yǔ)言自我修養(yǎng)》紙質(zhì)書(shū)籍作為粉絲福利;
1從芯片、編譯器到操作系統(tǒng)
嵌入式是一門(mén)交叉學(xué)科。一個(gè)嵌入式電子產(chǎn)品(比如手機(jī))從底層到上層,一般會(huì)涉及半導(dǎo)體芯片、電子電路、計(jì)算機(jī)、操作系統(tǒng)、多媒體等不同專(zhuān)業(yè)領(lǐng)域的知識(shí)。很多從事嵌入式開(kāi)發(fā)的朋友,通常來(lái)自不同的專(zhuān)業(yè)(電子、電氣、計(jì)算機(jī)、機(jī)械、自動(dòng)化、物理,甚至一些文科專(zhuān)業(yè)),在實(shí)際學(xué)習(xí)和開(kāi)發(fā)中,由于專(zhuān)業(yè)背景的限制,經(jīng)常會(huì)遇到各種技術(shù)壁壘:搞硬件的不懂軟件,搞軟件的不懂硬件,搞底層芯片的不懂上層軟件,搞上層軟件的不懂底層芯片。嵌入式技術(shù)棧太深,除了極少數(shù)人,一般人很難實(shí)現(xiàn)“技術(shù)破圈”,將整個(gè)技術(shù)棧從上到下捋一遍,徹底打通。相對(duì)于桌面開(kāi)發(fā),嵌入式開(kāi)發(fā)還具有碎片化特點(diǎn):不同架構(gòu)(如ARM、MIPS、RISC-V等)、不同廠家的SoC處理器(如Cortex-M系列、cortex-A系列、AI芯片等),不同的操作系統(tǒng)(Linux、uC/OS、FreeRTOS、Android等),一般都需要對(duì)應(yīng)的編譯開(kāi)發(fā)環(huán)境與之匹配,然后工程師才能基于這個(gè)編譯環(huán)境做應(yīng)用開(kāi)發(fā)。如果把軟件開(kāi)發(fā)比作開(kāi)飯館賣(mài)餃子,對(duì)于桌面軟件開(kāi)發(fā),鍋碗瓢盆、水電煤氣,甚至餃子(超市里的速凍餃子)都準(zhǔn)備好了,統(tǒng)一的標(biāo)準(zhǔn),就等著你下鍋,根據(jù)顧客不同的需求,做成一道道不同的美食:豬肉芹菜的、三鮮的、蒸的、煮的、煎的。而對(duì)于嵌入式開(kāi)發(fā),可能情況就不太一樣了:沒(méi)有現(xiàn)成的餃子成品可以用,搟餃子皮、剁餡、鍋碗瓢盆都需要自己動(dòng)手準(zhǔn)備,開(kāi)發(fā)環(huán)境需要自己搭建。遇到問(wèn)題,不能僅僅局限于當(dāng)前的軟件業(yè)務(wù)邏輯,可能還要從芯片、硬件電路、操作系統(tǒng)、底層驅(qū)動(dòng),甚至編譯器等不同的維度去分析,去定位出現(xiàn)問(wèn)題的原因。
隨著半導(dǎo)體行業(yè)趨勢(shì)的變化,以及國(guó)內(nèi)對(duì)芯片行業(yè)的大力投入,國(guó)產(chǎn)芯片越來(lái)越多,未來(lái)嵌入式軟件工程師的工作崗位和工作內(nèi)容也會(huì)隨之發(fā)生一些變化:嵌入式開(kāi)發(fā)人員不再僅僅是基于芯片廠家提供的現(xiàn)成的開(kāi)發(fā)板、BSP軟件包、產(chǎn)品方案去開(kāi)發(fā)產(chǎn)品,而是有越來(lái)越多的工程師直接進(jìn)入芯片原廠工作,參與芯片底層軟件的開(kāi)發(fā)和維護(hù)工作:芯片測(cè)試、操作系統(tǒng)移植、驅(qū)動(dòng)開(kāi)發(fā)與維護(hù)、以及基于自家芯片產(chǎn)品方案的推廣和技術(shù)支持等工作。在芯片設(shè)計(jì)前期,嵌入式軟件工程師有時(shí)候還需要和IC工程師一起去測(cè)試芯片,編寫(xiě)相應(yīng)的測(cè)試代碼和測(cè)試案例。
工作職責(zé)和工作內(nèi)容的變化,需要嵌入式軟件開(kāi)發(fā)人員不斷擴(kuò)充自己的知識(shí)體系,不斷學(xué)習(xí)和解鎖新的技能:C語(yǔ)言編程技能、軟件工程、編譯原理、計(jì)算機(jī)體系結(jié)構(gòu)、操作系統(tǒng)、匯編語(yǔ)言、硬件電路,有時(shí)甚至還需要了解一些芯片設(shè)計(jì)、芯片制造、CPU內(nèi)部結(jié)構(gòu)等“圈外”知識(shí)。每一個(gè)新的知識(shí)點(diǎn),每一門(mén)新的技能,市面上都有大量的經(jīng)典書(shū)籍可以參考閱讀,但每一本書(shū)都很厚,都有自己偏向的領(lǐng)域和側(cè)重點(diǎn),和我們的實(shí)際工程需求往往有一定偏差,都需要花大量的時(shí)間和精力去閱讀和消化,然后才能提煉出我們?cè)谇度胧介_(kāi)發(fā)中所需要的一些核心知識(shí)點(diǎn)和關(guān)鍵技能。有了這些核心知識(shí)點(diǎn)和關(guān)鍵技能作為理論支撐,我們就可以在嵌入式開(kāi)發(fā)中更好、更快地解決各種工程問(wèn)題。工程師都很忙,沒(méi)有大片的時(shí)間和精力去通讀各種經(jīng)典書(shū)籍,或者說(shuō)很少有人能堅(jiān)持讀完。嵌入式開(kāi)發(fā)人員的專(zhuān)業(yè)背景各不相同,每個(gè)人的知識(shí)儲(chǔ)備和點(diǎn)亮的技能樹(shù)也參差不齊,知識(shí)體系的不完善和基礎(chǔ)技能的儲(chǔ)備不足,往往會(huì)影響實(shí)際工作的輸出效率,在工作和學(xué)習(xí)中會(huì)遇到各種各樣的問(wèn)題無(wú)法解決,學(xué)習(xí)陷入困境,或者工作陷入卡殼。
那有沒(méi)有更好的方法,快速掌握這些嵌入式開(kāi)發(fā)所需要的核心知識(shí)點(diǎn)和關(guān)鍵技能呢?答案是:有。
基于這個(gè)現(xiàn)實(shí)需求,《嵌入式C語(yǔ)言自我修養(yǎng):從芯片、編譯器到操作系統(tǒng)》出版了。
作者基于自己的嵌入式學(xué)習(xí)經(jīng)歷和工作經(jīng)驗(yàn)總結(jié),從最底層的一堆沙子開(kāi)始,一步一步,帶領(lǐng)大家學(xué)習(xí)CPU芯片是如何設(shè)計(jì)和制造出來(lái)的,CPU內(nèi)部結(jié)構(gòu)是什么樣的,CPU是如何工作的,編譯器和指令集的作用是什么,一個(gè)程序的編譯、鏈接、安裝和運(yùn)行的過(guò)程是怎么樣的,程序運(yùn)行時(shí)的內(nèi)存世界是什么樣的?為什么會(huì)有內(nèi)存錯(cuò)誤?棧溢出攻擊是怎么回事?如何才能真正地理解和掌握C語(yǔ)言?為什么很多人在閱讀Linux內(nèi)核源碼時(shí)感到很吃力,看不懂?非計(jì)算機(jī)科班的朋友如何快速掌握操作系統(tǒng)的核心原理和概念?如何快速理解多任務(wù)編程思想?進(jìn)程、線程和協(xié)程有什么區(qū)別?這些疑問(wèn)在書(shū)中都會(huì)一一講解。
本書(shū)的寫(xiě)作初衷,主要是為不同專(zhuān)業(yè)背景的嵌入式學(xué)員彌補(bǔ)理論短板:以C語(yǔ)言為切入點(diǎn),從最底層的芯片開(kāi)始,到編譯器、操作系統(tǒng)、軟件工程、系統(tǒng)框架、進(jìn)程、線程、協(xié)程,搭建一個(gè)嵌入式開(kāi)發(fā)所需要的完整知識(shí)體系和認(rèn)知框架。不會(huì)像經(jīng)典書(shū)籍那樣面面俱到,深入每一個(gè)細(xì)節(jié),而是有的放矢,在理論和工程之間做一個(gè)平衡,一切都剛剛好:一切以滿(mǎn)足實(shí)際工程需要為參考點(diǎn),所有學(xué)習(xí)的知識(shí)點(diǎn)滿(mǎn)足實(shí)際項(xiàng)目所需要的理論支撐即可,不會(huì)深入到學(xué)院派關(guān)注的各種細(xì)節(jié)和性能指標(biāo),以免深入其中無(wú)法自拔,耗費(fèi)太多的時(shí)間。掌握了這些實(shí)際開(kāi)發(fā)中需要的核心知識(shí)點(diǎn)和關(guān)鍵技能,也就補(bǔ)齊了理論短板,此時(shí),相信大家也會(huì)對(duì)嵌入式開(kāi)發(fā)有了一個(gè)更加清晰的整體認(rèn)識(shí),在工作中遇到各種問(wèn)題,都可以嘗試用這個(gè)知識(shí)體系和認(rèn)知框架去分析和解決,分析問(wèn)題有了著力點(diǎn),也就有了思路,也就不再迷茫。
相比其他書(shū)籍,本書(shū)堅(jiān)持使用大白話(huà)寫(xiě)作,通俗易懂,不怕學(xué)不會(huì),就怕你不學(xué)。使用風(fēng)趣幽默的寫(xiě)作風(fēng)格,以增強(qiáng)閱讀體驗(yàn),無(wú)論讀多久都不會(huì)覺(jué)得枯燥。
在本書(shū)內(nèi)容安排上,做了很多嘗試性創(chuàng)新,比如獨(dú)家講解GNU C編譯器擴(kuò)展語(yǔ)法,幫你破解閱讀Linux內(nèi)核源碼時(shí)遇到的各種稀奇古怪的語(yǔ)法難題。
首家在ARM平臺(tái)下,通過(guò)反匯編,帶你理解C語(yǔ)言背后的底層運(yùn)行機(jī)制,深度講解程序的編譯、鏈接、安裝和運(yùn)行原理,深度講解程序運(yùn)行時(shí)的動(dòng)態(tài)內(nèi)存管理、內(nèi)存泄漏、棧溢出攻擊示例等。
結(jié)合嵌入式開(kāi)發(fā)常用的三種場(chǎng)景:裸機(jī)環(huán)境、RTOS、Linux,幫助大家去分析和總結(jié)這三種場(chǎng)景下的內(nèi)存管理,讓你一覽整個(gè)嵌入式開(kāi)發(fā)環(huán)境概貌。
針對(duì)當(dāng)前火熱的人工智能、AIoT、異構(gòu)計(jì)算等熱門(mén)技術(shù),從一堆沙子開(kāi)始,一步一步帶你了解整個(gè)CPU芯片設(shè)計(jì)、制造、封裝流程,CPU內(nèi)部結(jié)構(gòu)及工作原理:流水線、cache、單發(fā)射、多發(fā)射、亂序執(zhí)行,SIMD、NEON、多核、異構(gòu)...
針對(duì)Linux內(nèi)核驅(qū)動(dòng)閱讀難題,在本書(shū)中也分享了C語(yǔ)言的OOP編程思想,教你如何使用C語(yǔ)言來(lái)實(shí)現(xiàn)OOP編程,如何利用OOP思想去分析Linux內(nèi)核中復(fù)雜的驅(qū)動(dòng)和子系統(tǒng)。
針對(duì)電子類(lèi)、自動(dòng)化類(lèi)等跨行進(jìn)入嵌入式專(zhuān)業(yè)的朋友,零基礎(chǔ)入門(mén)操作系統(tǒng)的核心概念,教你如何在裸機(jī)環(huán)境下使用多任務(wù)思想編程,如何使用狀態(tài)機(jī)進(jìn)行任務(wù)分解,以及RTOS任務(wù)調(diào)度的核心數(shù)據(jù)結(jié)構(gòu)。讓你不需要去啃大塊頭的《操作系統(tǒng)》書(shū)籍,直接切入操作系統(tǒng)最核心的知識(shí)點(diǎn)。
重點(diǎn)分享C語(yǔ)言的模塊化編程思想,從零開(kāi)始,從一個(gè)單文件開(kāi)始,一步一步教你如何去封裝一個(gè)模塊,如何去使用一個(gè)模塊,如何模塊間通信,如何建立模塊依賴(lài),軟件如何分層,模塊如何解耦,如何將你的軟件迭代為框架,幫你樹(shù)立軟件工程的意識(shí),框架編程思想,讓你寫(xiě)的代碼更加容易擴(kuò)展和維護(hù)。
ARM架構(gòu)越來(lái)越流行,在手機(jī)、平板、桌面PC和服務(wù)器領(lǐng)域攻城拔地,市場(chǎng)份額越來(lái)越大,而目前很多編譯原理都是基于X86架構(gòu)來(lái)分析的。本書(shū)打破慣例,首次在ARM平臺(tái)上,通過(guò)反匯編手段,剔除編譯過(guò)程中各種語(yǔ)法分析等對(duì)嵌入式工程師無(wú)關(guān)緊要的技術(shù),給大家分享ARM平臺(tái)下程序的編譯、鏈接、安裝、運(yùn)行全景圖,尤其是動(dòng)態(tài)鏈接過(guò)程、多進(jìn)程如何共享動(dòng)態(tài)庫(kù)、內(nèi)核模塊是如何動(dòng)態(tài)加載和運(yùn)行的、U-boot是如何自舉并重定位的,這些嵌入式開(kāi)發(fā)中經(jīng)常遇到的核心知識(shí)點(diǎn)和難點(diǎn),會(huì)帶領(lǐng)大家逐一分析。
本書(shū)的大部分內(nèi)容基于作者幾年前錄制的、專(zhuān)門(mén)為嵌入式工程師打造的C語(yǔ)言視頻教程:C語(yǔ)言嵌入式Linux高級(jí)編程改編。結(jié)合幾千名學(xué)員的中肯評(píng)價(jià)和不斷反饋,幾經(jīng)修改,不斷優(yōu)化結(jié)構(gòu)和內(nèi)容安排,紙質(zhì)版如今才得以和大家見(jiàn)面。全書(shū)正文560 頁(yè),加上目錄、前言等,差不多600頁(yè),握在手上,沉甸甸的,全是干貨。寫(xiě)書(shū)是枯燥的,耗時(shí)的,幾經(jīng)拖延,幾經(jīng)修改,最后還是跟大家見(jiàn)面了,用口碑和信念做編程教育,致力于分享最原汁原味的技術(shù)和干貨知識(shí),幾千名學(xué)員的中肯反饋和積極評(píng)價(jià)是最讓人欣慰的,也是這本書(shū)質(zhì)量的保障。
愿這本書(shū)也能為你的嵌入式學(xué)習(xí)盡一份力,為你的嵌入式職場(chǎng)生涯增磚添瓦。
2送10本紙質(zhì)書(shū)籍
這本書(shū)的作者和電子工業(yè)出版社,為了感謝大家的支持,這次申請(qǐng)了10本書(shū),送給公眾號(hào)的粉絲作為福利。1.抽獎(jiǎng)助手 送5本在我的公眾號(hào)『程序員編程基地』,后臺(tái)回復(fù)關(guān)鍵字“書(shū)籍”參與抽獎(jiǎng)。
2.留言集贊 送5本為了照顧那部分“中獎(jiǎng)絕緣體”,這次依然采用另外一種中獎(jiǎng)方式,在本文留言區(qū):走心留言 集贊,前5名將有機(jī)會(huì)獲得書(shū)籍。
截止集贊時(shí)間:2021-06-06?20:00
公布中獎(jiǎng):2021-06-06推文留言區(qū)公布中獎(jiǎng)名單。
提示:開(kāi)獎(jiǎng)24小時(shí)之內(nèi)填寫(xiě)中獎(jiǎng)信息(集贊中獎(jiǎng)?wù)撸⑿怕?lián)系我),否則視為放棄。
最后,感謝王工、電子工業(yè)出版社的贊助,同時(shí),這本書(shū)已經(jīng)在各大網(wǎng)店售賣(mài),歡迎大家買(mǎi)買(mǎi)買(mǎi)!