Mdr-C-Tutorial 总目录
建设状态
编写中,欢迎大家参与。
第 0 部分:导读与学习指南
第一部分:语法和标准库
第一部分只要求读者编写单文件程序。标准头和标准库正常使用;自建头文件、多源文件和工程工具从第二部分开始。
- 认识一个 C 程序
- 值、对象、类型与声明
- 表达式与类型转换
- 选择与复合语句
- 循环与跳转
- 函数
- 数组
- 指针
- 字符与字符串
- 枚举、结构与联合
- 动态存储与所有权
- 函数接口进阶
- 输入输出
- 文本转换、错误与程序生命周期
- 声明、名称与生存期
- 对象与内存模型
- 预处理与翻译
- 标准库的使用契约
- 数值、位运算与随机数
- 日期与时间
- 本地化与扩展文本
- 非局部控制与信号
- 原子操作与并发
- 标准版本、可选能力与扩展
第二部分:开发与工程基础
本部分把单文件程序扩展为可构建、可测试、可协作维护的工程。库接口实现专题只选择能够由普通 C 清晰实现、适合作为语言练习的接口。
- 开发环境与工具角色
- 命令行与目录操作
- 从源文件到可执行文件
- Git 本地工作流
- 分别编译与统一链接
- 头文件与接口边界
- 项目目录与模块划分
- 构建图与 Make
- CMake 与 XMake
- 库与第三方依赖
- 自动化测试
- 调试器
- 编译器诊断与程序检查
- 覆盖率与模糊测试
- 测量、分析与优化
- 可移植构建
- Git 协作
- 持续集成
- 文档、版本与发布
- JSON 解析器工程化
- 库接口实现练习
第三部分:数据结构与算法
数据结构
算法
第四部分:系统编程
- 平台边界、POSIX 与系统调用
- 文件描述符与非缓冲 I/O
- 文件系统、目录与权限
- 虚拟内存与内存映射
- 进程的创建、执行与回收
- 信号、时间与定时器
- 进程间通信
- 操作系统线程与同步
- 网络基础
- 套接字编程
- 非阻塞 I/O 与 I/O 多路复用
- 事件循环
- 终端、伪终端与作业控制
- 系统程序的健壮性与安全边界
- 拓展A:Windows 系统编程
- A.1 Win32 API 概览与 POSIX 对照
- A.2 字符与文本:ANSI、Unicode 与 UTF-16
- A.3 内核对象与句柄
- A.4 文件与目录操作
- A.5 错误处理与结构化异常处理(SEH)
- A.6 内存管理与内存映射文件
- A.7 动态链接库(DLL)
- A.8 进程的创建、执行与等待
- A.9 线程与线程本地存储
- A.10 同步原语(一):等待函数与内核对象
- A.11 同步原语(二):临界区、SRWLock 与条件变量
- A.12 管道与进程间通信
- A.13 Winsock 特有主题
- A.14 异步 I/O 与重叠结构
- A.15 I/O 完成端口与线程池
- A.16 安全与访问控制(ACL 与令牌)
- A.17 控制台与 ConPTY
- A.18 Windows 服务、注册表与系统设施
- 拓展B:eBPF
- B.1 eBPF 概览:历史、架构与应用场景
- B.2 环境准备与工具链
- B.3 第一个 eBPF 程序
- B.4 程序的解剖:受限的 C
- B.5 辅助函数与上下文
- B.6 Map:内核态与用户态的数据交换
- B.7 加载与附加:bpf() 系统调用与程序生命周期
- B.8 libbpf、BTF 与 CO-RE
- B.9 验证器
- B.10 程序类型与附加类型
- B.11 跟踪与观测:kprobe、uprobe 与 tracepoint
- B.12 网络应用:XDP 与 tc
- B.13 安全应用:seccomp、LSM 与 cgroup
- B.14 bpftrace 与编程工具链
- B.15 实战:编写一个系统观测工具
- B.16 eBPF for Windows 与跨平台前景
第五部分:项目案例
- 源码阅读与案例方法
- kilo:源码阅读、构建、调试与修改任务
- Mdr Chat Room:项目概述、协议、消息与执行路径、测试与扩展任务
- Mdr Server:项目概述、连接生命周期与事件分发、资源管理、健壮性与测试
- Redis:架构与请求生命周期、SDS 与字典、ae 事件循环、跳表、调试、测试与修改任务
- SQLite:架构概述、虚拟机、B 树与存储、调试、测试与修改任务
- MdrDB:项目概述、存储、页面与索引、查询路径、恢复与测试
- Mdr Lang:项目概述、词法与语法分析、语义、执行与代码生成、测试与扩展任务
- MdrOS:项目概述、项目搭建、引导程序、视频驱动程序、中断系统、内存管理、文件系统、多任务、ACPI、PCI、OSDEV 代码校正、疑难解答
第六部分:嵌入式
- 平台与工具链:软件路线、执行环境、芯片与开发板资料、最小程序、交叉编译、构建、烧录与调试、片上调试、复位、启动与链接
- MCU 裸机开发:地址空间与外设、内存映射 I/O、时钟与复位、GPIO、中断、定时器与 PWM、UART、SPI 与 I²C、ADC、DAC 与 DMA、看门狗、低功耗与故障处理
- 驱动、通信与中间件:CMSIS 与设备头文件、HAL、LL 与 BSP、非阻塞驱动、数据帧与状态机、CAN 与 Modbus、USB、以太网与 lwIP、无线通信、非易失存储与文件系统
- RTOS 与固件架构:临界区与边界、任务与调度、同步与通信、中断与任务协作、内存与资源、实时性问题、FreeRTOS、RT-Thread、架构、跟踪与测试
- 嵌入式 Linux:与系统编程的边界、启动链、工具链与根文件系统、Buildroot 与 Yocto、设备树、内核模块与驱动模型、字符设备接口、总线驱动、中断、DMA 与并发、服务、部署与调试
- 质量、安全与交付:固件架构与资源预算、日志与故障诊断、测试与硬件在环、Bootloader 与固件升级、性能与功耗测量、规范与静态分析、安全启动与映像校验、发布与现场维护
- 综合实践:裸机外设驱动、RTOS 多任务设备、联网固件、嵌入式 Linux 驱动与应用
- 术语表