我正在开发一个嵌入式C项目,它依赖于一些外部硬件。我希望暂时屏蔽访问这些部分的代码,以便在不使用任何硬件的情况下模拟系统。到目前为止,我已经使用了一些宏,但这迫使我对生产代码进行了一些修改,我想避免这种情况。
示例:
stub.h
#ifdef _STUB_HW
#define STUB_HW(name) Stub_##name
#else /*_STUB_HW*/
#define STUB_HW(name) name
#endif /*_STUB_HW*/
my_hw.c
WORD STUB_HW(clear_RX_TX)()
{ /* clear my rx/tx buffer on target HW */ }
test_my_hw.c
#ifdef _STUB_HW
WORD clear_RX_TX()
{ /* simulate clear rx/tx buffer on target HW */ }
使用这段代码,我可以通过预处理器标签
_STUB_HW
打开/关闭存根。有没有一种方法可以在不改变生产代码的情况下完成此操作,并避免大量的ifdef。如果可以避免,在同一个文件中不会混合生产和测试代码。只要我能尽可能地将其保留在生产代码之外,我就不在乎测试代码的外观。
编辑:
如果可以选择/重命名函数而不替换整个文件,那就太好了。比如以
nRF_##
开头的所有函数都被赋予新名称,然后将test_nRF_##
插入到nRF_##
中。