对于ESP32开发版单元测试源码分析

  1. 源码目录结构

    ESP32官方提供的源码资源很丰富,有兴趣的开发者可选择下载,参见下图。另外也提供了ESP32的IOT解决方案

  可以看出,整个目录结构完全按照功能模块来划分,每个功能模块都有自己的CMakeList.txt文件,main文件夹,Makefile文件,以及README.md文件。

  分别代表:

  • CMakeList.txt: CMake 是一个跨平台的自动化建构系统,它使用CMakeLists.txt文件来描述构建过程,可以产生标准的构建文件,如 Unix 的 Makefile 或Windows Visual C++ 的 projects/workspaces 。
  • Makefile:在Makefile文件中描述了整个工程所有文件的编译顺序、编译规则。一旦写好,只需要一个make命令,整个工程完全自动编译,极大的提高了软件开发的效率。
  • Main文件夹: 里面包括c文件以及头文件,用以实现具体的功能。

    下图为其中一个模块的目录结构:

  2.单元测试结构

  ESP-IDF 是乐鑫为 ESP32 提供的物联网开发框架。其包含一系列库及头文件,提供了基于 ESP32 构建软件项目所需的核心组件;ESP-IDF 还提供了开发和量产过程中最常用的工具及功能,例如:构建、烧录、调试和测量等。

  ESP-IDF 中附带了一个基于Unity的单元测试应用程序框架,且所有的单元测试用例分别保存在 ESP-IDF 仓库中每个组件的test子目录中。

  单元测试被添加在相应组件的test子目录中,test 子目录需要包含 :ref:组件 CMakeLists.txt <component-directories>,因为他们本身就是一种组件。ESP-IDF 使用了 unity 测试框架,需要将其指定为组件的依赖项。

    单元测试被添加在相应组件的test子目录中,测试用例写在 C 文件中,一个 C 文件可以包含多个测试用例。测试文件的名字要以“test”开头。

    测试文件需要包含 unity.h 头文件,此外还需要包含待测试 C 模块需要的头文件。如下图所示,为EPS32 VFS模块的单元测试源码目录为例:

    测试用例需要通过 C 文件中特定的函数来添加,如下所示:

1     TEST_CASE("test name", "[module name]"
2     {
3           // 在这里添加测试用例
4     }

  第一个参数是字符串,用来描述当前测试; 第二个参数是字符串,用方括号中的标识符来表示,标识符用来对相关测试或具有特定属性的测试进行分组。以下为vfs中对 TEST_CASE() 函数的调用:

1        TEST_CASE("Can use access() for UART", "[vfs]"){}

vfs模块的单元测试源码整体框架如下图所示:

  3.代码风格

    函数名命名举例:

1       static void sdio_intr_host(void*);
2       static void sdio_intr_send(void*);
3       static void sdio_intr_recv(void*);

    变量命名举例:

1       uint8_t command_bits;
2       uint8_t address_bits;
3       uint8_t dummy_bits; 

    注释举例:

  由上面两个例子可看出为了提升代码的可读性,项目的函数名、变量名等都是根据函数功能或者变量含义来命名,且相同模块的不同功能是通过使用下划线连接模块名和功能名称来实现的,非常直观,且整个项目看下来,命名方式非常统一,且不同功能模块之间有注释分割,使得代码看起来简洁清晰,可读性非常强!

原文地址:https://www.cnblogs.com/zhouyuxi/p/11664508.html

时间: 2024-08-11 08:08:54

对于ESP32开发版单元测试源码分析的相关文章

Linux c 开发 - Memcached源码分析之命令解析(2)

前言 从我们上一章<Linux c 开发 - Memcached源码分析之基于Libevent的网络模型>我们基本了解了Memcached的网络模型.这一章节,我们需要详细解读Memcached的命令解析. 我们回顾上一章发现Memcached会分成主线程和N个工作线程.主线程主要用于监听accpet客户端的Socket连接,而工作线程主要用于接管具体的客户端连接. 主线程和工作线程之间主要通过基于Libevent的pipe的读写事件来监听,当有连接练上来的时候,主线程会将连接交个某一个工作线

东麓庄园游戏开发系统源码分析

东麓庄园游戏开发系统源码分析 袁生:151.1222.4001(微信同步)东麓庄园游戏,东麓庄园模式,东麓庄园理财,东麓庄园软件,东麓庄园app,东麓庄园源码,东麓庄园农场,东麓庄园平台,东麓庄园开发,东麓庄园返利,东麓庄园定制开发. 注册和交易注册后最低投资66元,普通领导人帮下级玩家注册激活收66元,转660个金币,其中6元是平台管理费.到达下级会员账号600个金币.会员之间交易不收手续费,果实兑换成金币平台收取10%的手续费.东麓庄园源码开发 151.1222.4001(微信同步) 东麓庄

JVM源码分析之警惕存在内存泄漏风险的FinalReference(增强版)

概述 JAVA对象引用体系除了强引用之外,出于对性能.可扩展性等方面考虑还特地实现了四种其他引用:SoftReference.WeakReference.PhantomReference.FinalReference,本文主要想讲的是FinalReference,因为我们在使用内存分析工具比如mat等在分析一些oom的heap的时候,经常能看到 java.lang.ref.Finalizer占用的内存大小远远排在前面(其实通过jmap -histo就能发现,如下图所示),而这个类占用的内存大小又

IOS开发数据存储篇--FMDB源码分析3(FMDatabaseQueue+FMDatabasePool)

一.前言 如上一章所讲,FMDB源码主要有以下几个文件组成: FMResultSet : 表示FMDatabase执行查询之后的结果集. FMDatabase : 表示一个单独的SQLite数据库操作实例,通过它可以对数据库进行增删改查等等操作. FMDatabaseAdditions : 扩展FMDatabase类,新增对查询结果只返回单个值的方法进行简化,对表.列是否存在,版本号,校验SQL等等功能. FMDatabaseQueue : 使用串行队列 ,对多线程的操作进行了支持. FMDat

FiddlerCoreAPI开发(一)源码分析

1.前言 前一段时间想利用fiddlercore截取本地HTTPS的流量做一些分析,按照样例代码的注释学习了一下,没搞清楚怎么实现,后来又在网上查了些资料,对HTTPS的处理提及很少,都没有解决我的问题,主要是HTTPS证书的问题,索性自己研究了一下,终于解决了问题.我会在下篇文章中分享下我的思路,本篇文章先简单分析下fiddlercore自带样例的代码,帮助刚接触fiddlercore的人快速入门,如果有说的不对的地方,欢迎批评指正. 2.源码分析 首先从官网下载FiddlerCoreAPI

keystone源码分析(一)——Paste Deploy的应用

本keystone源码分析系列基于Juno版Keystone,于2014年10月16日随Juno版OpenStack发布. Keystone作为OpenStack中的身份管理与授权模块,主要实现系统用户的身份认证.基于角色的授权管理.其他OpenStack服务的地址发现和安全策略管理等功能.Keystone作为开源云系统OpenStack中至关重要的组成部分,与OpenStack中几乎所有的其他服务(如Nova, Glance, Neutron等)都有着密切的联系.同时,Keystone作为开源

iOS开发-博客导出工具开发教程(附带源码)

前言: 作为一名学生, 作为一名iOS开发学习者, 我个人浏览信息包括博客, 更多的选择移动终端.然而, csdn并没有现成的客户端(不过有个web版的). 之前曾经看到一款开源的导出工具, 但是它是基于Windows平台的.导出的也仅仅是PDF格式.而且, 对于文章的导出, 需要精确URL.无法做到边浏览别导出. 另外, 我想实现的是, 可以在没有网络的情况下, 浏览自己收藏的文章.并且, 对于自己收藏的文章, 可以分类管理. 最关键的是, 对于自己的文章, 可以做一个备份.我曾经遇到过这样一

AngularJS 源码分析1

AngularJS简介 angularjs 是google出品的一款MVVM前端框架,包含一个精简的类jquery库,创新的开发了以指令的方式来组件化前端开发,可以去它的官网看看,请戳这里 再贴上一个本文源码分析对应的angularjs源码合并版本1.2.4,精简版的,除掉了所有的注释, 请戳这里 从启动开始说起 定位到4939行,这里是angularjs开始执行初始化的地方,见代码 ? 1 2 3 bindJQuery(), publishExternalAPI(angular), jqLit

Backbone.js源码分析(珍藏版)

源码分析珍藏,方便下次阅读! // Backbone.js 0.9.2 // (c) 2010-2012 Jeremy Ashkenas, DocumentCloud Inc. // Backbone may be freely distributed under the MIT license. // For all details and documentation: // http://backbonejs.org (function () { // 创建一个全局对象, 在浏览器中表示为w