c - 微 Controller C 代码的单元测试模式

标签 c unit-testing embedded microcontroller

虽然有很多支持 C 的单元测试框架,但我对如何为微 Controller 代码编写单元测试有点困惑(在我的例子中是 PIC,但我认为这个问题比这更笼统)。

为微 Controller 编写的大部分代码都围绕将配置和数据值写入寄存器、从寄存器读取传入数据以及响应中断事件展开。我想知道是否有人可以提供一些关于最有效方法的指示。

最佳答案

你写;

“为微 Controller 编写的大部分代码都围绕着将配置和数据值写入寄存器、从寄存器读取传入数据以及响应中断事件”。

我同意这在实践中经常发生,但实际上我并不认为这是一件好事,我认为稍微重新思考一下会帮助您实现测试目标。

也许是因为微 Controller 程序员可以在他们喜欢的任何时候伸出手去触摸硬件,他们中的许多人(大多数?)已经养成了在他们的代码中这样做的习惯。通常这种习惯是毫无疑问地遵循的,也许是因为很多从事此类工作的人都是 EE,而不是受过训练和倾向的计算机科学家。我知道,我自己就是这样开始的。

我想表达的观点是,微 Controller 项目可以而且应该像任何其他软件项目一样精心设计。良好设计的一个真正重要的部分是限制硬件对硬件驱动程序的访问!将写入寄存器、响应中断等的所有代码划分为模块,为您的软件的其余部分提供对硬件的良好、干净、抽象的访问。使用逻辑分析仪、示波器、自定义测试装置或其他任何有意义的工具在目标上测试这些驱动模块。

非常重要的一点是,现在您的软件的其余部分(希望其中的大部分)现在只是您可以在主机系统上运行和测试的 C 代码。在主机系统上,硬件模块以一种提供被测代码正在做什么的可见性的方式被删除。您可以对此代码使用主流的单元测试方法。这需要一些准备和工作,但如果您组织得当,您可以创建一个可重复使用的系统,该系统可以应用于您的所有项目。潜在的好处是巨大的。我在这里写了更多关于这些想法的文章;

[ http://discuss.joelonsoftware.com/default.asp?joel.3.530964.12][1]

关于c - 微 Controller C 代码的单元测试模式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/958841/

相关文章:

angular - 在 Angular 7 中模拟本地存储

在 cobertura-maven-plugin 测试中加载 Spring ApplicationContext

c - 在 C 中处理动态函数参数

c - 为什么转换为 uint64_t 会改变此代码中的结果?

c - 阻塞管道,c,linux

计算 posix read() 接收到的字节数

c - 是否将二维数组视为一个定义的行为?

unit-testing - 在未安装 SDK 的情况下运行 xUnit 测试

c - 有哪些重构方法可以减少编译代码的大小?

c - 嵌入式应用中的最佳任务调度策略