# embedded **Repository Path**: embeddedpro/embedded ## Basic Information - **Project Name**: embedded - **Description**: The repository for the book of Professional Embedded Software Development - **Primary Language**: C - **License**: GPL-3.0 - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 42 - **Forks**: 16 - **Created**: 2021-11-03 - **Last Updated**: 2025-05-09 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # Embedded 本项目是 2012 年出版的《专业嵌入式软件开发:全面走向高质高效编程》一书的配套代码(购书请发邮件给作者),旨在帮助读者成为高效且高质量的(嵌入式和非嵌入式)程序员。当年实践书中的代码需要安装 VMware 虚拟机软件,并运行在 32 位的 Linux 操作系统上。十多年后的今天,随着 Windows 操作系统从 Windows 10 开始支持 WSL(Windows Subsystem for Linux),安装 VMware 虚拟机软件已成为过去式,本项目中的代码也已升级为运行在 64 位的 Linux 操作系统上。 《专业嵌入式软件开发》封面 对于程序员来说,最好的学习方法是“做中学”,因此本项目的设计与实现充分考虑了这一点。例如: - 为了帮助读者深入理解实时操作系统的原理,编写了一个可以在 Linux 上运行的操作系统 **ClearRTOS**,从源代码级别帮助读者掌握任务(task)、队列(queue)、信号量(semaphore)、互斥锁(mutex)、事件组(event group)、定时器(timer)等核心概念。 - 从工具和流程的工程方法论层面,示范了如何打造高效且高质量的开发环境。通过无缝整合单元测试、静态分析、动态分析、性能分析等工具,帮助读者提升工作效率和代码质量。 --- ## 准备环境 ### Windows 10(及以上) #### 1)安装 `Windows 终端`(Windows Terminal) 请从 [这里](https://github.com/microsoft/terminal/releases) 下载最新的绿色软件包,解压后直接运行即可。`Windows 终端` 相比 Windows 自带的 `Command Prompt` 和 `Windows PowerShell` 更好用(例如,支持 `Ctrl` + `+`/`-` 缩放界面字体),因此推荐安装使用。 > **注意**:此步骤为可选项。 #### 2)启用 Windows 的开发者模式(Developer Mode) 设置路径为:**开始菜单 > 设置 > 更新与安全 > 开发者选项**。 启用开发者模式 打开开发者模式开关后,在弹出的对话框中选择“是”。 确认启用开发者模式 #### 3)启用 WSL 功能 通过 `Win` + `R` 组合键运行 `optionalfeatures.exe`,找到 **WSL** 选项并勾选,点击“确定”后按照提示重启系统。 启用 WSL #### 4)安装 Ubuntu Linux 打开 **Microsoft Store**,搜索“ubuntu”并选择安装 **Ubuntu 24.04.x LTS**(“x”表示最新的版本号;“LTS”是 Long Term Support 的缩写,表示长期支持版本)。 安装 Ubuntu 安装完成后,点击“打开”。 Ubuntu 安装完成 等待后续的安装工作完成。 Ubuntu 安装中 #### 5)配置 Ubuntu Linux Ubuntu Linux 安装完成后,会提示新建一个用户。输入“iubuntu”后回车(当然,你可以自定义用户名)。 输入新用户名 接着,输入该用户的密码并进行确认。请注意,此密码也是系统自动创建的“root”用户(类似于 Windows 中的 Administrator 管理员)的密码,在使用 Linux 的 `sudo` 命令时需要输入。 确认用户密码 最后,出现类似以下界面表示 Ubuntu Linux 已准备就绪。 Ubuntu 准备就绪 如果你安装了 `Windows 终端`,可以在 `Windows 终端` 中运行 `wsl` 命令启动 Ubuntu Linux。此时,`Windows 终端` 的操作环境即为 Linux。 在 Windows 终端中运行 WSL #### 6)升级到 WSL 2 在 `Windows 终端` 或 `Windows PowerShell` 中运行以下命令,启用 Windows 的虚拟机平台功能: ```bash dism.exe /online /enable-feature /featurename:VirtualMachinePlatform /all /norestart ``` 接着,分别执行以下命令将 WSL 版本设置为 2,并更新 WSL: ```bash wsl --set-default-version 2 wsl --update wsl --set-version Ubuntu-24.04 2 ``` --- ### Ubuntu Linux 无论你是在 Windows WSL 下还是原生安装的 Ubuntu Linux 中,接下来的环境准备工作都是相同的,且必不可少。 #### 1)更新 Linux(可选) 如果你的 Linux 是全新安装的,建议先运行以下命令更新系统,以避免后续步骤出错。注意,运行 `sudo` 命令时需要输入 root 用户的密码。 ```bash sudo apt update sudo apt upgrade ``` #### 2)安装编译工具 运行以下命令安装本项目所需的工具: ```bash sudo apt install gcc g++ gdb make valgrind lcov kcachegrind cppcheck clang clang-tools ``` 当提示是否继续时,输入“Y”并回车。安装过程可能需要一些时间。 安装 Linux 工具 --- ## 着手开发 接下来的步骤均在 Ubuntu Linux 中以命令行方式完成。 ### 获取代码 在 `Windows 终端` 中进入 Linux 代码存放的目录: ```bash cd /home/iubuntu ``` 运行以下命令获取本项目的代码: ```bash git clone https://gitee.com/embeddedpro/embedded.git ``` ### 编译 进入本项目的 `build` 子目录。注意:`buildv1` 至 `buildv5` 的功能与 `build` 相同,展示了整个项目构建能力的演进过程,便于你更好地学习和掌握。 ```bash cd embedded/build ``` 编译选项包括: - `make` 或 `make release`:编译生成 release 版本(采用 O2 优化)的程序,生成的可执行文件位于 `release` 子目录中。 - `make debug`:编译生成 debug 版本的程序,生成的可执行文件位于 `debug` 子目录中。 - `make unitest`:编译单元测试程序,生成的可执行文件位于 `unitest` 子目录中。 - `make test`:执行单元测试。 - `make coverage`:生成单元测试代码覆盖率报告。生成的报告位于 `coverage` 子目录中,用浏览器打开其中的 `index.html` 文件即可查看。 代码覆盖率报告 - `make cppcheck`:使用 cppcheck 对代码进行静态分析。 - `make scan-build`:使用 scan-build 对代码进行静态分析。 - `make asan`:编译生成 Address Sanitizer(ASAN)所需的程序,生成的可执行文件位于 `asan` 子目录中。 - `make do-asan`:执行 Address Sanitizer(ASAN)测试。 - `make profile`:执行性能分析,分析生成的数据可用 `KCachegrind` 工具查看。`KCachegrind` 是一个开源的 Linux 可视化工具,用于查看性能分析结果。 KCachegrind 性能分析 - `make clean`:清理编译生成的中间文件和可执行文件。 --- ## 目录说明 - `build`:包含工程构建相关的文件,例如关键的 Makefile。`buildv1` 至 `buildv5` 展示了构建系统的演进过程。 - `code`:包含源代码。 - `application`:应用层代码。 - `framework`:框架层代码。 - `platform`:平台层代码。 - `tools`:项目自建工具链相关代码。 - `docs`:包含 ABI 规范、CPU 指令手册等文档。 - `test`:包含单元测试框架和项目的单元测试代码。 - `cmocka`:cmocka 单元测试框架。 - `application`:应用层的单元测试代码。 - `framework`:框架层的单元测试代码。 - `platform`:平台层的单元测试代码。 - `tools`:包含第三方工具链。 --- ## 联系作者 如果你遇到任何问题,可以通过以下方式联系作者: - 在项目中提交一个 Issue。 - 通过微信公众号“至简李云”与我取得联系。