# embedded
**Repository Path**: caogenwangbaoqiang/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**: 0
- **Forks**: 16
- **Created**: 2024-08-07
- **Last Updated**: 2024-08-07
## Categories & Tags
**Categories**: Uncategorized
**Tags**: None
## README
# embedded
本项目是2012年出版的《[专业嵌入式软件开发:全面走向高质高效编程](https://detail.tmall.com/item.htm?id=781593108165)》(已重新上架可购买)这本书的配套代码,用于帮助读者成为高质效的(嵌入式和非嵌入式)程序员。那时实践书中的代码需要安装VMware虚拟机软件,且是运行在32位的Linux操作系统之上的。12年后的今天,随着Windows操作系统从Windows 10开始支持WSL(Windows Subsystem for Linux),为了实践而安装WMware虚拟机软件成为了过去时,且本项目中的代码也变成了运行在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)
设置路径是:Start > Settings > Update & security > For developers。
开发者模式开关打开后,在弹出的选择框中选择“Yes”。
#### 3)打开WSL特性
通过 `Win` + `R` 组合键运行optionalfeatures.exe,找到WSL特性选项并选中,最后点击“OK”后按照提示重启系统。
#### 4)安装Ubuntu Linux
打开微软应用商店(Microsoft Store)后,搜索“ubuntu”并选择安装“Ubuntu 24.04.x LTS”(“x”是指最后一个版本号,具体是多少不重要;“LTS”是Long Term Support的缩写)。
安装完成后选择打开。
等待后续的安装工作完成。
#### 5)配置Ubuntu Linux
Ubuntu Linux彻底安装完成后,会要求新建一个用户,输入“iubuntu”后回车(当然,你可以自行取一个自己喜欢的名)。
接着,需要输入这个新建用户名的密码并做校验。请注意,这个密码也是系统自动内建的“root”根用户(类似于Windows中的Administrator系统管理员)的密码,在使用Linux中的“sudo”命令时需要用到。
最后出现类似下面的界面代表Ubuntu Linux已完全准备好了。
如果你安装了`Windows终端`,那么在`Windows终端`中运行`wsl`命令,就能启动Ubuntu Linux。换句话说,在`Windows终端`内接下来的操作环境就是Linux了。
#### 6)升级到WSL2
在`Windows终端`或`Windows PowerShell`内运行如下的命令,开启Windows的虚拟机平台特性。
```
dism.exe /online /enable-feature /featurename:VirtualMachinePlatform /all /norestart
```
接着分别执行如下的命名设置WSL的版本为2,以及对WSL进行更新。
```
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账号的密码。
```
sudo apt update
sudo apt upgrade
```
#### 2)安装编译工具
运行如下的命令安装本项目所使用到的工具。
```
sudo apt install gcc g++ gdb make valgrind lcov kcachegrind cppcheck
```
当被询问是否继续时回答“Y”并回车。安装过程需要花些时间,
## 着手开发
接下来的步骤都在Ubuntu Linux中以命令行的方式完成人机交互。
### 获取代码
在`Windows终端`进到Linux代码将存放的目录中。
```
cd /home/iubuntu
```
运行如下命令获取本项目的代码。
```
git clone https://gitee.com/embeddedpro/embedded.git
```
### 编译
进入本项目的`build`子目录。注意:`buildv1`~`buildv5`的功能与`build`是一样的,代表整个项目的构建能力是如何一步步增强演进的,以便你更好地学习掌握。
```
cd embedded/build
```
编译选项有:
- `make`或`make release` : 编译生成release版本(采用O2优化)的程序,生成的可执行文件位于`release`子目录中。
- `make debug` : 编译生成debug版本的程序,生成的可执行文件位于`debug`子目录中。
- `make unitest` : 编译单元测试程序,生成的可执行文件位于`unitest`子目录中。
- `make test` : 执行单元测试。
- `make coverage` : 生成单元测试代码覆盖率报告。生成的报告位于`coverage`子目录中,用浏览器打开其中的`index.html`文件即可查看。
- `make scheck` : 对代码进行静态分析(采用cppcheck)。
- `make asan` : 编译生成Address Sanitizer(ASAN)所需的程序,生成的可执行文件位于`asan`子目录中。
- `make do_asan` : 执行Address Sanitizer(ASAN)测试。
- `make profile` : 执行性能分析,分析生成的数据可用`KCachegrind`工具查看。注意`KCachegrind`是一个开源的Linux上的可视化工具,可以查看性能分析结果。
- `make clean` : 清理编译生成的中间文件和可执行文件。
## 目录说明
- `build` :包含工程构建相关的文件,比如最关键的Makefile。`buildv1`至`buildv5`展示了最终的构建系统的演进过程。
- `code` :包含源代码。
- `application` :包含应用层的代码。
- `framework` :包含框架层的代码。
- `platform` :包含平台层的代码。
- `tools` :包含项目自建工具链相关的代码。
- `docs` :放包含ABI规范、CPU指令手册等在内的各种文档。
- `test` : 包含单元测试框架和整个项目的单元测试代码。
- `cmocka` : cmocka单元测试框架。
- `application` : 包含应用层的单元测试代码。
- `framework` : 包含框架层的单元测试代码。
- `platform` : 包含平台层的单元测试代码。
- `tools` : 包含第三方工具链。
## 联系作者
如果你碰到什么问题,可以开一个Issue让我跟进,或者通过微信公众号“至简李云”与我取得联系。