万本电子书0元读

万本电子书0元读

顶部广告

嵌入式C语言实践(微课视频版)电子书

售       价:¥

纸质售价:¥109.00购买纸书

0人正在读 | 0人评论 6.4

作       者:孟皓

出  版  社:清华大学出版社

出版时间:2025-07-01

字       数:25.7万

所属分类: 科技 > 计算机/网络 > 程序设计

温馨提示:数字商品不支持退换货,不提供源文件,不支持导出打印

为你推荐

  • 读书简介
  • 目录
  • 累计评论(条)
  • 读书简介
  • 目录
  • 累计评论(条)
"本书以嵌式软件发中用到的C语言为主线,带领读者嵌式世界的技术海洋。本书研究了从计算机的硬件架构到C语言对硬件的操作,从C语言的设计思想,到硬件对C语言的兼容、竞争和妥协设计等问题,这些问题是理解嵌式技术的关键,本书是一本尝试通过C语言讲透嵌式底层世界的书。 本书分5篇共24章。扫盲篇(第1~3章)和上手篇(第4~10章)讲解基础内容且通用的C语言知识,并针对嵌式发做了少量的内容优化;提高篇(第11~17章)和高级篇(第18~22章)专为嵌式软件从业者造,具有很强的针对性;职场篇(第23章和第24章)为职业方向和代码管理等内容,以便于读者快速寻找并融团队。 本书适合初学者门,部分高级内容对于工作多年的发者也有一定参考价值,并配有示例代码和视频教程,可作为高等院校学生、相关从业者作为学习参考用书。 "<br/>
目录展开

封面页

书名页

版权页

内容简介

作者简介

目录

前言

扫盲篇 计算机底层的世界

第1章 计算机体系概述

1.1 CPU原理

1.1.1 CPU在计算机中的位置

1.1.2 运算器和控制器

1.1.3 CPU架构

1.2 内存和总线

1.2.1 内存和缓存

1.2.2 CPU寄存器和总线

1.3 指令集分类

1.3.1 指令集的意义

1.3.2 两种指令集的特点

1.4 内存和I/O设备统一编址

1.4.1 非总线型设备的形态

1.4.2 I/O设备和驱动

第2章 从汇编语言到C语言

2.1 汇编语言和C语言简介

2.1.1 第1代编程语言

2.1.2 第2代编程语言

2.1.3 汇编语言组成

2.2 汇编操作的寄存器

2.2.1 数据寄存器

2.2.2 指令寄存器

2.2.3 程序计数寄存器

2.2.4 地址寄存器

2.2.5 累加寄存器

2.2.6 程序状态寄存器

2.3 CPU的寻址方式

2.3.1 立即寻址

2.3.2 直接寻址

2.3.3 间接寻址

2.4 C语言简介

2.4.1 C语言发展历史

2.4.2 C语言的特点

2.4.3 C语言的缺点

2.5 C语言构成

2.5.1 基本构成

2.5.2 关键字

2.5.3 程序结构

2.5.4 函数

2.5.5 开发环境

第3章 Ubuntu18 x64 GCC开发环境搭建

3.1 使用虚拟机安装Ubuntu18 x64

3.1.1 Ubuntu简介

3.1.2 什么是虚拟机

3.1.3 安装VMware Workstation 17

3.1.4 安装Ubuntu 18.4 x64

3.1.5 设置共享目录

3.2 Linux常用命令

3.2.1 文件和目录

3.2.2 用户及用户组管理命令

3.3 vim编辑器使用

3.3.1 使用vi新建并编辑文本文件

3.3.2 文本的删除、撤销、复制和查找

3.4 压缩和查找

3.4.1 tar压缩解压命令

3.4.2 文件及文件内容查找

3.5 使用GCC编译一个C语言程序

3.5.1 GCC发展历史

3.5.2 GCC常用命令

3.5.3 写出第1个C语言程序

上手篇 初学C语言

第4章 C语言概览

4.1 C语言程序结构

4.1.1 顺序结构

4.1.2 分支结构

4.1.3 循环结构

4.2 变量、常量和声明

4.2.1 变量

4.2.2 常量

4.2.3 C语言声明

4.3 标准输入/输出

4.3.1 标准输入scanf函数

4.3.2 标准输出printf函数

4.4 简单函数

4.4.1 库函数

4.4.2 形参和实参

4.4.3 局部变量和全局变量

第5章 运算符和表达式

5.1 优先级和结合性

5.1.1 优先级表

5.1.2 左结合和右结合

5.1.3 表达式的值

5.2 表达式中的隐式规则

5.2.1 整型提升

5.2.2 隐式转换

第6章 数组和字符串

6.1 数据类型和长度

6.1.1 数据类型

6.1.2 不同平台的类型长度

6.2 一维数组

6.2.1 初识数组

6.2.2 数组的定义和使用

6.3 多维数组

6.3.1 一维数组作为数组元素

6.3.2 多维数组

6.4 字符串

6.4.1 定义一个字符串

6.4.2 把字符串当成数组

6.5 strlen、strcmp和strcpy函数

6.5.1 strlen函数

6.5.2 strcmp函数

6.5.3 strcpy函数

6.6 sizeof、memset和memcpy函数

6.6.1 取长度运算符sizeof()

6.6.2 memset函数

6.6.3 memcpy函数

第7章 数制转换和位操作

7.1 二进制、十进制和十六进制之间的转换

7.1.1 二进制和十六进制

7.1.2 各种进制到十进制的转换

7.2 位操作

7.2.1 左移和右移操作的意义

7.2.2 给指定位送1或者0

7.2.3 指定位取反

7.3 计算机中整数的表示

7.3.1 负整数面临的困境

7.3.2 用加法表示减法

7.3.3 符号位的由来

第8章 控制流

8.1 switch-case、break和continue

8.1.1 switch-case

8.1.2 break语句

8.1.3 continue语句

8.2 goto语句和标号

8.2.1 标号

8.2.2 使用标号进行跳转

8.3 while、do-while和for

8.3.1 while和do-while语句

8.3.2 for循环

8.4 嵌套循环

8.4.1 多重for循环

8.4.2 多重while循环

8.5 if和else if深入

8.5.1 if-else语句的联动

8.5.2 上升沿下降沿检测

第9章 程序调试

9.1 给main函数传参

9.1.1 main函数的参数

9.1.2 *argv[]的本质

9.2 常见的编译报错

9.2.1 未定义错误

9.2.2 头文件错误

9.2.3 函数隐式声明警告

9.2.4 未声明错误

9.3 打印调试

9.3.1 编译阶段打印

9.3.2 使用goto处理出错

9.4 main函数返回

9.4.1 main函数是否特殊

9.4.2 main函数为何需要返回

第10章 简单排序算法

10.1 冒泡排序

10.1.1 冒泡排序基本思想

10.1.2 冒泡排序实现逻辑

10.2 选择排序

10.2.1 选择排序基本思想

10.2.2 选择排序实现逻辑

10.3 插入排序

10.3.1 插入排序基本思想

10.3.2 插入排序实现逻辑

提高篇 C代码在运行中

第11章 构造类型和指针

11.1 C语言结构体

11.2 共用体和枚举

11.2.1 共用体

11.2.2 枚举

11.3 指针类型

11.3.1 什么是指针

11.3.2 指针的定义和野指针

11.3.3 指针的解引用

11.3.4 指针类型和数据类型

11.4 void空类型

11.4.1 空类型的意义

11.4.2 空类型的使用

11.5 typedef重定义类型

11.5.1 typedef重定义基本数据类型

11.5.2 typedef重定义结构体类型

11.5.3 typedef重定义函数指针类型

第12章 语言对内存的使用C

12.1 强制类型转换和大小端

12.1.1 强制类型转换

12.1.2 大端和小端格式

12.2 结构体的对齐访问

12.2.1 结构体中成员的偏移

12.2.2 结构体为何要对齐访问

12.2.3 在GCC中对齐访问的方法

12.3 变量的作用域和生命周期

12.3.1 变量的作用域

12.3.2 变量的生命周期

12.4 运算中的临时变量

12.4.1 临时变量现象

12.4.2 临时变量的内因

第13章 指针初探

13.1 数组和指针

13.1.1 数组在内存中的存在

13.1.2 数组下标本质

13.2 指针越界访问

13.2.1 指针越界读取

13.2.2 指针越界写入

13.3 指针类型的作用

13.3.1 指针类型和解引用

13.3.2 指针类型和内存读取

13.3.3 指针类型和偏移量

13.4 函数指针

13.4.1 函数指针初探

13.4.2 使用地址调用函数

第14章 栈和堆

14.1 变量的内存分配

14.1.1 变量的地址

14.1.2 函数参数的地址

14.1.3 函数返回值的传递

14.2 栈内存简介

14.2.1 栈内存

14.2.2 栈内存的注意事项

14.3 堆内存

14.3.1 堆内存的申请和释放

14.3.2 堆内存和栈内存的区别

第15章 函数深入

15.1 函数在内存中的体现

15.1.1 函数所在的内存

15.1.2 函数运行时的问题

15.2 函数的参数

15.2.1 函数形参在内存中

15.2.2 函数形参的编程误区

15.3 函数的返回和递归

15.3.1 函数的运行和返回原理

15.3.2 函数返回类型和一般规则

15.3.3 函数的递归调用

15.4 递归函数的分析

15.4.1 递归函数的参数

15.4.2 单递归函数返回逻辑

15.4.3 二次递归的分析

15.4.4 二次递归函数分析总结

15.5 递归实例之归并排序

15.5.1 归并排序实现逻辑

15.5.2 合并算法分析

15.5.3 二次递归算法分析

第16章 编译和链接

16.1 程序的编译

16.1.1 预处理

16.1.2 编译和链接过程

16.2 C程序在内存中的分布

16.2.1 代码段和数据段

16.2.2 栈和堆

16.2.3 各个段的内存分布

16.3 动态链接和静态链接

16.3.1 库文件的意义

16.3.2 静态库文件的制作和使用

16.3.3 程序运行中加载动态库

16.3.4 静态库和动态库对程序运行的意义

16.4 编译调试方法

16.4.1 反汇编

16.4.2 格式转换

16.4.3 手动链接

第17章 状态机和多线程

17.1 有限状态

17.1.1 什么是有限状态机

17.1.2 使用C语言编写一个简单状态机

17.1.3 状态机解决了什么问题

17.2 多线程简介

17.2.1 进程和线程

17.2.2 线程安全

17.2.3 函数的可重入性

17.3 多线程编程入门

17.3.1 Linux常用多线程库

17.3.2 多线程编程实战

17.4 线程同步简介

17.4.1 线程不同步问题

17.4.2 互斥锁

17.4.3 自旋锁

高级篇 C代码在操作系统层

第18章 C语言指针高级部分

18.1 结构体指针

18.1.1 结构体指针的定义和使用

18.1.2 使用结构体指针作为函数参数

18.2 二重指针

18.2.1 char **argv或char *argv[]

18.2.2 定义二重指针并使用

18.3 指针数组和数组指针,函数指针和指针函数

18.3.1 指针数组和数组指针

18.3.2 函数指针和指针函数

18.4 offsetof和container_of宏

18.4.1 offsetof宏

18.4.2 container_of宏

第19章 语言函数高级部分C

19.1 函数的输入型参数和输出型参数

19.1.1 形参中的const关键字

19.1.2 形参的输入/输出接口形式

19.2 函数类型和函数指针类型

19.2.1 函数指针和函数类型匹配

19.2.2 函数指针和函数类型不匹配

19.3 回调函数

19.3.1 使用回调函数进行方法绑定

19.3.2 回调函数注册

19.4 函数的调用策略

19.4.1 C语言函数调用的流程

19.4.2 C语言函数效率

19.5 再论可重入函数

19.5.1 设计可重入函数

19.5.2 可重入函数的设计规范

第20章 语言底层特性C

20.1 const和volatile修饰指针

20.1.1 const *p和*const p

20.1.2 volatile修饰

20.2 指针和作为指针的数据

20.2.1 再论指针

20.2.2 设备寄存器的读写

20.2.3 指定地址跳转

20.3 二重指针在底层

20.3.1 字符串指针集合

20.3.2 异常/中断向量表

20.4 函数指针在底层

20.4.1 函数指针数组在底层

20.4.2 结构体包含函数指针

20.5 论函数地址

20.5.1 链接地址和运行地址

20.5.2 位置有关码和位置无关码

20.6 attribute关键字

20.6.1 段声明

20.6.2 对齐声明

20.6.3 弱符号声明

20.6.4 inline内联声明

第21章 语言链表C

21.1 单链表数据结构

21.1.1 单链表的构成

21.1.2 单链表节点创建

21.2 单链表的操作

21.2.1 单链表的尾插

21.2.2 单链表的头插

21.2.3 单链表的遍历

21.2.4 单链表节点的删除

21.2.5 单链表的逆序

21.3 双链表数据结构

21.3.1 双链表的构成

21.3.2 双链表节点创建

21.4 双链表的操作

21.4.1 双链表的尾插

21.4.2 双链表的头插

21.4.3 双链表的遍历

21.4.4 双链表节点的删除

21.4.5 双链表的逆序

21.5 循环链表浅析

21.5.1 循环单链表的数据结构

21.5.2 循环单链表的建立和遍历

21.5.3 循环双链表的数据结构

21.5.4 循环双链表的建立和遍历

第22章 二叉树和哈希表

22.1 二叉树简介

22.1.1 树的概念及结构

22.1.2 二叉树

22.2 二叉树的实现

22.2.1 二叉树节点创建

22.2.2 二叉树的创建

22.3 二叉树的遍历

22.3.1 先序遍历

22.3.2 中序遍历

22.3.3 后序遍历

22.3.4 层序遍历

22.4 哈希表简介

22.4.1 哈希表基本概念

22.4.2 哈希冲突的解决

22.5 实现简单的哈希表

22.5.1 开放定址法

22.5.2 链地址法

实战篇 C语言在职场

第23章 嵌入式软件开发

23.1 单片机和嵌入式软件开发

23.1.1 单片机开发岗

23.1.2 嵌入式Linux开发岗

23.2 嵌入式操作系统简介

23.2.1 单片机操作系统

23.2.2 嵌入式操作系统

23.3 职业方向

23.3.1 应用层开发

23.3.2 驱动层开发

23.3.3 物联网开发简介

第24章 编译管理方法

24.1 C代码的头文件

24.1.1 头文件的意义

24.1.2 头文件的一般规则

24.2 多个C代码文件编译

24.2.1 多个C文件编译体系

24.2.2 多文件编译的管理问题

24.2.3 使用脚本管理工程

24.3 代码的层次管理

24.3.1 H文件和C文件的分离

24.3.2 代码的分层管理脚本

24.4 开始写Makefile

24.4.1 写一个最简单的Makefile

24.4.2 Makefile最小系统

24.5 Makefile进阶

24.5.1 Makefile的变量和自动推导

24.5.2 Makefile实践

参考文献

累计评论(条) 个书友正在讨论这本书 发表评论

发表评论

发表评论,分享你的想法吧!

买过这本书的人还买过

读了这本书的人还在读

回顶部