注冊(cè) | 登錄讀書(shū)好,好讀書(shū),讀好書(shū)!
讀書(shū)網(wǎng)-DuShu.com
當(dāng)前位置: 首頁(yè)出版圖書(shū)科學(xué)技術(shù)工業(yè)技術(shù)建筑科學(xué)建筑設(shè)計(jì)嵌入式C語(yǔ)言自我修養(yǎng):從芯片、編譯器到操作系統(tǒng)

嵌入式C語(yǔ)言自我修養(yǎng):從芯片、編譯器到操作系統(tǒng)

嵌入式C語(yǔ)言自我修養(yǎng):從芯片、編譯器到操作系統(tǒng)

定 價(jià):¥118.00

作 者: 王利濤 著
出版社: 電子工業(yè)出版社
叢編項(xiàng):
標(biāo) 簽: 暫缺

購(gòu)買(mǎi)這本書(shū)可以去


ISBN: 9787121408564 出版時(shí)間: 2021-04-01 包裝: 平裝
開(kāi)本: 16開(kāi) 頁(yè)數(shù): 568 字?jǐn)?shù):  

內(nèi)容簡(jiǎn)介

  《嵌入式C語(yǔ)言自我修養(yǎng):從芯片、編譯器到操作系統(tǒng)》是一本專(zhuān)門(mén)為嵌入式讀者打造的C語(yǔ)言進(jìn)階學(xué)習(xí)圖書(shū)。本書(shū)的學(xué)習(xí)重點(diǎn)不再是C語(yǔ)言的基本語(yǔ)法,而是和嵌入式、C語(yǔ)言相關(guān)的一系列知識(shí)。作者以C語(yǔ)言為切入點(diǎn),分別探討了嵌入式開(kāi)發(fā)所需要的諸多核心理論和技能,力圖幫助讀者從零搭建嵌入式開(kāi)發(fā)所需要的完整知識(shí)體系和技能樹(shù)。 《嵌入式C語(yǔ)言自我修養(yǎng):從芯片、編譯器到操作系統(tǒng)》從底層CPU的制造流程和工作原理開(kāi)始講起,到計(jì)算機(jī)體系結(jié)構(gòu),C程序的反匯編分析,程序的編譯、運(yùn)行和重定位,程序運(yùn)行時(shí)的堆棧內(nèi)存動(dòng)態(tài)變化,GNU C編譯器的擴(kuò)展語(yǔ)法,指針的靈活使用,C語(yǔ)言的面向?qū)ο缶幊趟枷耄珻語(yǔ)言的模塊化編程思想,C語(yǔ)言的多任務(wù)編程思想,進(jìn)程、線(xiàn)程和協(xié)程的概念,從底層到上層,從芯片、硬件到軟件、框架,幾乎涵蓋了嵌入式開(kāi)發(fā)的所有知識(shí)點(diǎn)。 本書(shū)適合嵌入式學(xué)習(xí)者、開(kāi)發(fā)者閱讀學(xué)習(xí),同樣適合從事Linux下C語(yǔ)言開(kāi)發(fā)工作的人員作為參考。閱讀本書(shū)需要讀者有一定的C語(yǔ)言基礎(chǔ),無(wú)論你是在校學(xué)生,還是需要充電學(xué)習(xí)的工程師,掌握了C語(yǔ)言的基本語(yǔ)法和編程技能后再閱讀本書(shū),學(xué)習(xí)效果會(huì)更佳。

作者簡(jiǎn)介

  王利濤 嵌入式工程師,培訓(xùn)講師,多年嵌入式開(kāi)發(fā)經(jīng)驗(yàn),包括芯片測(cè)試、BSP、驅(qū)動(dòng)開(kāi)發(fā)、USB子系統(tǒng)等,目前在開(kāi)發(fā)“嵌入式工程師自我修養(yǎng)”系列在線(xiàn)視頻教程,以及在個(gè)人博客“宅學(xué)部落”分享更多的嵌入式、Linux、AIoT技術(shù)。

圖書(shū)目錄

第1章工欲善其事,必先利其器
1.1 代碼編輯工具:Vim
1.1.1 安裝Vim
1.1.2 Vim常用命令
1.1.3 Vim配置文件:vimrc
1.1.4 Vim的按鍵映射
1.2 程序編譯工具:make
1.2.1 使用IDE編譯C程序
1.2.2 使用gcc編譯C源程序
1.2.3 使用make編譯程序
1.3 代碼管理工具:Git
1.3.1 什么是版本控制系統(tǒng)
1.3.2 Git的安裝和配置
1.3.3 Git常用命令
第2章計(jì)算機(jī)體系結(jié)構(gòu)與CPU工作原理
2.1 一顆芯片是怎樣誕生的
2.1.1 從沙子到單晶硅
2.1.2 PN結(jié)的工作原理
2.1.3 從PN結(jié)到芯片電路
2.1.4 芯片的封裝
2.2 一顆CPU是怎么設(shè)計(jì)出來(lái)的
2.2.1 計(jì)算機(jī)理論基石:圖靈機(jī)
2.2.2 CPU內(nèi)部結(jié)構(gòu)及工作原理
2.2.3 CPU設(shè)計(jì)流程
2.3 計(jì)算機(jī)體系結(jié)構(gòu)
2.3.1 馮·諾依曼架構(gòu)
2.3.2 哈弗架構(gòu)
2.3.3 混合架構(gòu)
2.4 CPU性能提升:Cache機(jī)制
2.4.1 Cache的工作原理
2.4.2 一級(jí)Cache和二級(jí)Cache
2.4.3 為什么有些處理器沒(méi)有Cache
2.5 CPU性能提升:流水線(xiàn)
2.5.1 流水線(xiàn)工作原理
2.5.2 超流水線(xiàn)技術(shù)
2.5.3 流水線(xiàn)冒險(xiǎn)
2.5.4 分支預(yù)測(cè)
2.5.5 亂序執(zhí)行
2.5.6 SIMD和NEON
2.5.7 單發(fā)射和多發(fā)射
2.6 多核CPU
2.6.1 單核處理器的瓶頸
2.6.2 片上多核互連技術(shù)
2.6.3 big.LITTLE結(jié)構(gòu)
2.6.4 超線(xiàn)程技術(shù)
2.6.5 CPU核數(shù)越多越好嗎
2.7 后摩爾時(shí)代:異構(gòu)計(jì)算的崛起
2.7.1 什么是異構(gòu)計(jì)算
2.7.2 GPU
2.7.3 DSP
2.7.4 FPGA
2.7.5 TPU
2.7.6 NPU
2.7.7 后摩爾時(shí)代的XPU們
2.8 總線(xiàn)與地址
2.8.1 地址的本質(zhì)
2.8.2 總線(xiàn)的概念
2.8.3 總線(xiàn)編址方式
2.9 指令集與微架構(gòu)
2.9.1 什么是指令集
2.9.2 什么是微架構(gòu)
2.9.3 指令助記符:匯編語(yǔ)言
第3章ARM體系結(jié)構(gòu)與匯編語(yǔ)言
3.1 ARM體系結(jié)構(gòu)
3.2 ARM匯編指令
3.2.1 存儲(chǔ)訪(fǎng)問(wèn)指令
3.2.2 數(shù)據(jù)傳送指令
3.2.3 算術(shù)邏輯運(yùn)算指令
3.2.4 操作數(shù):operand2詳解
3.2.5 比較指令
3.2.6 條件執(zhí)行指令
3.2.7 跳轉(zhuǎn)指令
3.3 ARM尋址方式
3.3.1 寄存器尋址
3.3.2 立即數(shù)尋址
3.3.3 寄存器偏移尋址
3.3.4 寄存器間接尋址
3.3.5 基址尋址
3.3.6 多寄存器尋址
3.3.7 相對(duì)尋址
3.4 ARM偽指令
3.4.1 LDR偽指令
3.4.2 ADR偽指令
3.5 ARM匯編程序設(shè)計(jì)
3.5.1 ARM匯編程序格式
3.5.2 符號(hào)與標(biāo)號(hào)
3.5.3 偽操作
3.6 C語(yǔ)言和匯編語(yǔ)言混合編程
3.6.1 ATPCS規(guī)則
3.6.2 在C程序中內(nèi)嵌匯編代碼
3.6.3 在匯編程序中調(diào)用C程序
3.7 GNU ARM匯編語(yǔ)言
3.7.1 重新認(rèn)識(shí)編譯器
3.7.2 GNU ARM編譯器的偽操作
3.7.3 GNU ARM匯編語(yǔ)言中的標(biāo)號(hào)
3.7.4 .section偽操作
3.7.5 基本數(shù)據(jù)格式
3.7.6 數(shù)據(jù)定義
3.7.7 匯編代碼分析實(shí)戰(zhàn)
第4章程序的編譯、鏈接、安裝和運(yùn)行
4.1 從源程序到二進(jìn)制文件
4.2 預(yù)處理過(guò)程
4.3 程序的編譯
4.3.1 從C文件到匯編文件
4.3.2 匯編過(guò)程
4.3.3 符號(hào)表與重定位表
4.4 鏈接過(guò)程
4.4.1 分段組裝
4.4.2 符號(hào)決議
4.4.3 重定位
4.5 程序的安裝
4.5.1 程序安裝的本質(zhì)
4.5.2 在Linux下制作軟件安裝包
4.5.3 使用apt-get在線(xiàn)安裝軟件
4.5.4 在Windows下制作軟件安裝包
4.6 程序的運(yùn)行
4.6.1 操作系統(tǒng)環(huán)境下的程序運(yùn)行
4.6.2 裸機(jī)環(huán)境下的程序運(yùn)行
4.6.3 程序入口main()函數(shù)分析
4.6.4 BSS段的小秘密
4.7 鏈接靜態(tài)庫(kù)
4.8 動(dòng)態(tài)鏈接
4.8.1 與地址無(wú)關(guān)的代碼
4.8.2 全局偏移表
4.8.3 延遲綁定
4.8.4 共享庫(kù)
4.9 插件的工作原理
4.10 Linux內(nèi)核模塊運(yùn)行機(jī)制
4.11 Linux內(nèi)核編譯和啟動(dòng)分析
4.12 U-boot重定位分析
4.13 常用的binutils工具集
第5章內(nèi)存堆棧管理
5.1 程序運(yùn)行的“馬甲”:進(jìn)程
5.2 Linux環(huán)境下的內(nèi)存管理
5.3 棧的管理
5.3.1 棧的初始化
5.3.2 函數(shù)調(diào)用
5.3.3 參數(shù)傳遞
5.3.4 形參與實(shí)參
5.3.5 棧與作用域
5.3.6 棧溢出攻擊原理
5.4 堆內(nèi)存管理
5.4.1 裸機(jī)環(huán)境下的堆內(nèi)存管理
5.4.2 uC/OS的堆內(nèi)存管理
5.4.3 Linux堆內(nèi)存管理
5.4.4 堆內(nèi)存測(cè)試程序
5.4.5 實(shí)現(xiàn)自己的堆管理器
5.5 mmap映射區(qū)域探秘
5.5.1 將文件映射到內(nèi)存
5.5.2 mmap映射實(shí)現(xiàn)機(jī)制分析
5.5.3 把設(shè)備映射到內(nèi)存
5.5.4 多進(jìn)程共享動(dòng)態(tài)庫(kù)
5.6 內(nèi)存泄漏與防范
5.6.1 一個(gè)內(nèi)存泄漏的例子
5.6.2 預(yù)防內(nèi)存泄漏
5.6.3 內(nèi)存泄漏檢測(cè):MTrace
5.6.4 廣義上的內(nèi)存泄漏
5.7 常見(jiàn)的內(nèi)存錯(cuò)誤及檢測(cè)
5.7.1 總有一個(gè)Bug,讓你淚流滿(mǎn)面
5.7.2 使用core dump調(diào)試段錯(cuò)誤
5.7.3 什么是內(nèi)存踩踏
5.7.4 內(nèi)存踩踏監(jiān)測(cè):mprotect
5.7.5 內(nèi)存檢測(cè)神器:Valgrind
第6章GNU C編譯器擴(kuò)展語(yǔ)法精講
6.1 C語(yǔ)言標(biāo)準(zhǔn)和編譯器
6.1.1 什么是C語(yǔ)言標(biāo)準(zhǔn)
6.1.2 C語(yǔ)言標(biāo)準(zhǔn)的內(nèi)容
6.1.3 C語(yǔ)言標(biāo)準(zhǔn)的發(fā)展過(guò)程
6.1.4 編譯器對(duì)C語(yǔ)言標(biāo)準(zhǔn)的支持
6.1.5 編譯器對(duì)C語(yǔ)言標(biāo)準(zhǔn)的擴(kuò)展
6.2 指定初始化
6.2.1 指定初始化數(shù)組元素
6.2.2 指定初始化結(jié)構(gòu)體成員
6.2.3 Linux內(nèi)核驅(qū)動(dòng)注冊(cè)
6.2.4 指定初始化的好處
6.3 宏構(gòu)造“利器”:語(yǔ)句表達(dá)式
6.3.1 表達(dá)式、語(yǔ)句和代碼塊
6.3.2 語(yǔ)句表達(dá)式
6.3.3 在宏定義中使用語(yǔ)句表達(dá)式
6.3.4 內(nèi)核中的語(yǔ)句表達(dá)式
6.4 typeof與container_of宏
6.4.1 typeof關(guān)鍵字
6.4.2 typeof使用示例
6.4.3 Linux內(nèi)核中的container_of宏
6.4.4 container_of宏實(shí)現(xiàn)分析
6.5 零長(zhǎng)度數(shù)組
6.5.1 什么是零長(zhǎng)度數(shù)組
6.5.2 零長(zhǎng)度數(shù)組使用示例
6.5.3 內(nèi)核中的零長(zhǎng)度數(shù)組
6.5.4 思考:指針與零長(zhǎng)度數(shù)組
6.6 屬性聲明:section
6.6.1 GNU C編譯器擴(kuò)展關(guān)鍵字:__attribute__
6.6.2 屬性聲明:section
6.6.3 U-boot鏡像自復(fù)制分析
6.7 屬性聲明:aligned
6.7.1 地址對(duì)齊:aligned
6.7.2 結(jié)構(gòu)體的對(duì)齊
6.7.3 思考:編譯器一定會(huì)按照aligned指定的方式對(duì)齊嗎
6.7.4 屬性聲明:packed
6.7.5 內(nèi)核中的aligned、packed聲明
6.8 屬性聲明:format
6.8.1 變參函數(shù)的格式檢查
6.8.2 變參函數(shù)的設(shè)計(jì)與實(shí)現(xiàn)
6.8.3 實(shí)現(xiàn)自己的日志打印函數(shù)
6.9 屬性聲明:weak
6.9.1 強(qiáng)符號(hào)和弱符號(hào)
6.9.2 函數(shù)的強(qiáng)符號(hào)與弱符號(hào)
6.9.3 弱符號(hào)的用途
6.9.4 屬性聲明:alias
6.10 內(nèi)聯(lián)函數(shù)
6.10.1 屬性聲明:noinline
6.10.2 什么是內(nèi)聯(lián)函數(shù)
6.10.3 內(nèi)聯(lián)函數(shù)與宏
6.10.4 編譯器對(duì)內(nèi)聯(lián)函數(shù)的處理
6.10.5 思考:內(nèi)聯(lián)函數(shù)為什么定義在頭文件中
6.11 內(nèi)建函數(shù)
6.11.1 什么是內(nèi)建函數(shù)
6.11.2 常用的內(nèi)建函數(shù)
6.11.3 C標(biāo)準(zhǔn)庫(kù)的內(nèi)建函數(shù)
6.11.4 內(nèi)建函數(shù):__builtin_constant_p(n)
6.11.5 內(nèi)建函數(shù):__builtin_expect(exp,c)
6.11.6 Linux內(nèi)核中的likely和unlikely
6.12 可變參數(shù)宏
6.12.1 什么是可變參數(shù)宏
6.12.2 繼續(xù)改進(jìn)我們的宏
6.12.3 可變參數(shù)宏的另一種寫(xiě)法
6.12.4 內(nèi)核中的可變參數(shù)宏
第7章數(shù)據(jù)存儲(chǔ)與指針
7.1 數(shù)據(jù)類(lèi)型與存儲(chǔ)
7.1.1 大端模式與小端模式
7.1.2 有符號(hào)數(shù)和無(wú)符號(hào)數(shù)
7.1.3 數(shù)據(jù)溢出
7.1.4 數(shù)據(jù)類(lèi)型轉(zhuǎn)換
7.2 數(shù)據(jù)對(duì)齊
7.2.1 為什么要數(shù)據(jù)對(duì)齊
7.2.2 結(jié)構(gòu)體對(duì)齊
7.2.3 聯(lián)合體對(duì)齊
7.3 數(shù)據(jù)的可移植性
7.4 Linux內(nèi)核中的size_t類(lèi)型
7.5 為什么很多人編程時(shí)喜歡用typedef
7.5.1 typedef的基本用法
7.5.2 使用typedef的優(yōu)勢(shì)
7.5.3 使用typedef需要注意的地方
7.5.4 typedef的作用域
7.5.5 如何避免typedef被大量濫用
7.6 枚舉類(lèi)型
7.6.1 使用枚舉的三種方法
7.6.2 枚舉的本質(zhì)
7.6.3 Linux內(nèi)核中的枚舉類(lèi)型
7.6.4 使用枚舉需要注意的地方
7.7 常量和變量
7.7.1 變量的本質(zhì)
7.7.2 常量存儲(chǔ)
7.7.3 常量折疊
7.8 從變量到指針
7.8.1 指針的本質(zhì)
7.8.2 一些復(fù)雜的指針聲明
7.8.3 指針類(lèi)型與運(yùn)算
7.9 指針與數(shù)組的“曖昧”關(guān)系
7.9.1 下標(biāo)運(yùn)算符[]
7.9.2 數(shù)組名的本質(zhì)
7.9.3 指針數(shù)組與數(shù)組指針
7.10 指針與結(jié)構(gòu)體
7.11 二級(jí)指針
7.11.1 修改指針變量的值
7.11.2 二維指針和指針數(shù)組
7.11.3 二級(jí)指針和二維數(shù)組
7.12 函數(shù)指針
7.13 重新認(rèn)識(shí)void
第8章C語(yǔ)言的面向?qū)ο缶幊趟枷?br />8.1 代碼復(fù)用與分層思想
8.2 面向?qū)ο缶幊袒A(chǔ)
8.2.1 什么是OOP
8.2.2 類(lèi)的封裝與實(shí)例化
8.2.3 繼承與多態(tài)
8.2.4 虛函數(shù)與純虛函數(shù)
8.3 Linux內(nèi)核中的OOP思想:封裝
8.3.1 類(lèi)的C語(yǔ)言模擬實(shí)現(xiàn)
8.3.2 鏈表的抽象與封裝
8.3.3 設(shè)備管理模型
8.3.4 總線(xiàn)設(shè)備模型
8.4 Linux內(nèi)核中的OOP思想:繼承
8.4.1 繼承與私有指針
8.4.2 繼承與抽象類(lèi)
8.4.3 繼承與接口
8.5 Linux內(nèi)核中的OOP思想:多態(tài)
第9章C語(yǔ)言的模塊化編程思想
9.1 模塊的編譯和鏈接
9.2 系統(tǒng)模塊劃分
9.2.1 模塊劃分方法
9.2.2 面向?qū)ο缶幊痰乃季S陷阱
9.2.3 規(guī)劃合理的目錄結(jié)構(gòu)
9.3 一個(gè)模塊的封裝
9.4 頭文件深度剖析
9.4.1 基本概念
9.4.2 隱式聲明
9.4.3 變量的聲明與定義
9.4.4 如何區(qū)分定義和聲明
9.4.5 前向引用和前向聲明
9.4.6 定義與聲明的一致性
9.4.7 頭文件路徑
9.4.8 Linux內(nèi)核中的頭文件
9.4.9 頭文件中的內(nèi)聯(lián)函數(shù)
9.5 模塊設(shè)計(jì)原則
9.6 被誤解的關(guān)鍵字:goto
9.7 模塊間通信
9.7.1 全局變量
9.7.2 回調(diào)函數(shù)
9.7.3 異步通信
9.8 模塊設(shè)計(jì)進(jìn)階
9.8.1 跨平臺(tái)設(shè)計(jì)
9.8.2 框架
9.9 AIoT時(shí)代的模塊化編程
第10章C語(yǔ)言的多任務(wù)編程思想和操作系統(tǒng)入門(mén)
10.1 多任務(wù)的裸機(jī)實(shí)現(xiàn)
10.1.1 多任務(wù)的模擬實(shí)現(xiàn)
10.1.2 改變?nèi)蝿?wù)的執(zhí)行頻率
10.1.3 改變?nèi)蝿?wù)的執(zhí)行時(shí)間
10.2 操作系統(tǒng)基本原理
10.2.1 調(diào)度器工作原理
10.2.2 函數(shù)棧與進(jìn)程棧
10.2.3 可重入函數(shù)
10.2.4 臨界區(qū)與臨界資源
10.3 中斷
10.3.1 中斷處理流程
10.3.2 進(jìn)程棧與中斷棧
10.3.3 中斷函數(shù)的實(shí)現(xiàn)
10.4 系統(tǒng)調(diào)用
10.4.1 操作系統(tǒng)的API
10.4.2 操作系統(tǒng)的權(quán)限管理
10.4.3 CPU的特權(quán)模式
10.4.4 Linux系統(tǒng)調(diào)用接口
10.5 揭開(kāi)文件系統(tǒng)的神秘面紗
10.5.1 什么是文件系統(tǒng)
10.5.2 文件系統(tǒng)的掛載
10.5.3 根文件系統(tǒng)
10.6 存儲(chǔ)器接口與映射
10.6.1 存儲(chǔ)器與接口
10.6.2 存儲(chǔ)映射
10.6.3 嵌入式啟動(dòng)方式
10.7 內(nèi)存與外部設(shè)備
10.7.1 內(nèi)存與外存
10.7.2 外部設(shè)備
10.7.3 I/O端口與I/O內(nèi)存
10.8 寄存器操作
10.8.1 位運(yùn)算應(yīng)用
10.8.2 操作寄存器
10.8.3 位域
10.9 內(nèi)存管理單元MMU
10.9.1 地址轉(zhuǎn)換
10.9.2 權(quán)限管理
10.10 進(jìn)程、線(xiàn)程和協(xié)程
10.10.1 進(jìn)程
10.10.2 線(xiàn)程
10.10.3 線(xiàn)程池
10.10.4 協(xié)程
10.10.5 小結(jié)

本目錄推薦

掃描二維碼
Copyright ? 讀書(shū)網(wǎng) ranfinancial.com 2005-2020, All Rights Reserved.
鄂ICP備15019699號(hào) 鄂公網(wǎng)安備 42010302001612號(hào)