wil*_*amg 3 c testing embedded tdd microcontroller
我正在研究一个涉及微控制器编程的机器人研究项目.我希望能够在最大程度上将测试软件与测试硬件进行分离.这既是为了提高开发速度,也是为了在将代码放到机器人上之前,我可以更轻松地对代码进行单元测试/模拟.例如,我可能会写一个"MyRobot"库.然后我可以在嵌入代码和非嵌入式模拟/测试代码中包含这个库.在运行时,我会提供函数指针,这些函数指针可以读取(在嵌入式情况下)或模拟(在模拟中)传感器数据并将其提供到库中.
因此,我需要做的就是在编译时生成两个库:一个用于嵌入式代码,另一个用于非嵌入式代码.
我的问题是这是否可行/如果有更好的方法可行/如果有任何问题我应该注意.
提前致谢!
这是嵌入式系统开发中的常见情况,您创建两个库的方法通常是推荐的解决方案.将嵌入式系统固件中的低级硬件与软件分离是一种最佳实践.
您提到的库通常称为"硬件抽象层"或HAL.HAL的API(应用程序编程接口)可以在名为类似的单个头文件中提供hal.h.软件中需要访问硬件的每个源模块都会在源文件的顶部显示以下行:
#include "hal.h"
Run Code Online (Sandbox Code Playgroud)
像这样设计系统的好处包括:
对于您的两个场景,如您所建议的那样,您将创建两个版本的HAL库:包含在嵌入式硬件上运行的代码的标准版本,以及模拟硬件的模拟版本,用于在控制方式.您可以命名标准库hal.lib(可能具有不同的扩展名,具体取决于您的开发环境)和模拟库hal_simulated.lib.两者都具有相同的界面,如中所述hal.h.也就是说,这两个库将包含所有功能中声明hal.h,诸如void halInit(),int halReadProximitySensor()等等.
假设您的IDE支持Release和Debug配置,您可以为命名的软件测试创建第三个配置SW_Test.此配置将与您的Debug配置重复,除了hal_simulated.lib将链接到项目而不是标准hal.lib.
也可以看看