# 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操作系统之上了。 image 对于程序员来说,最好的学习方法是做中学,所以本项目的设计与实现充分考虑到了这一点。比如: - 为了讲清楚实时操作系统的原理,编写了一个可以在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。 image 开发者模式开关打开后,在弹出的选择框中选择“Yes”。 image #### 3)打开WSL特性 通过 `Win` + `R` 组合键运行optionalfeatures.exe,找到WSL特性选项并选中,最后点击“OK”后按照提示重启系统。 image #### 4)安装Ubuntu Linux 打开微软应用商店(Microsoft Store)后,搜索“ubuntu”并选择安装“Ubuntu 24.04.x LTS”(“x”是指最后一个版本号,具体是多少不重要;“LTS”是Long Term Support的缩写)。 image 安装完成后选择打开。 image 等待后续的安装工作完成。 image #### 5)配置Ubuntu Linux Ubuntu Linux彻底安装完成后,会要求新建一个用户,输入“iubuntu”后回车(当然,你可以自行取一个自己喜欢的名)。 image 接着,需要输入这个新建用户名的密码并做校验。请注意,这个密码也是系统自动内建的“root”根用户(类似于Windows中的Administrator系统管理员)的密码,在使用Linux中的“sudo”命令时需要用到。 image 最后出现类似下面的界面代表Ubuntu Linux已完全准备好了。 image 如果你安装了`Windows终端`,那么在`Windows终端`中运行`wsl`命令,就能启动Ubuntu Linux。换句话说,在`Windows终端`内接下来的操作环境就是Linux了。 image #### 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”并回车。安装过程需要花些时间, image ## 着手开发 接下来的步骤都在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`文件即可查看。 image - `make scheck` : 对代码进行静态分析(采用cppcheck)。 - `make asan` : 编译生成Address Sanitizer(ASAN)所需的程序,生成的可执行文件位于`asan`子目录中。 - `make do_asan` : 执行Address Sanitizer(ASAN)测试。 - `make profile` : 执行性能分析,分析生成的数据可用`KCachegrind`工具查看。注意`KCachegrind`是一个开源的Linux上的可视化工具,可以查看性能分析结果。 image - `make clean` : 清理编译生成的中间文件和可执行文件。 ## 目录说明 - `build` :包含工程构建相关的文件,比如最关键的Makefile。`buildv1`至`buildv5`展示了最终的构建系统的演进过程。 - `code` :包含源代码。 - `application` :包含应用层的代码。 - `framework` :包含框架层的代码。 - `platform` :包含平台层的代码。 - `tools` :包含项目自建工具链相关的代码。 - `docs` :放包含ABI规范、CPU指令手册等在内的各种文档。 - `test` : 包含单元测试框架和整个项目的单元测试代码。 - `cmocka` : cmocka单元测试框架。 - `application` : 包含应用层的单元测试代码。 - `framework` : 包含框架层的单元测试代码。 - `platform` : 包含平台层的单元测试代码。 - `tools` : 包含第三方工具链。 ## 联系作者 如果你碰到什么问题,可以开一个Issue让我跟进,或者通过微信公众号“至简李云”与我取得联系。