问题描述
我正在尝试为嵌入式系统编写生产测试软件,在这里我可以编写单个测试脚本(理想情况下只是C ++代码),其中部分在主机上执行,而部分在DUT(设备在下)执行测试)。通过串行端口进行通信。
这里的一个重要目标是减少嵌入式方面的代码大小,而又不降低测试输出的可读性。所以我的0级目标(可以说是一个热身运动)是能够编写如下内容:
//TestScript.cpp
START_TESTS()
...
const unsigned pot1res = testPotentiometer(pot1);
TEST_PRINT("Potentiometer 1 test result %u",pot1res);
const unsigned pot2res = testPotentiometer(pot2);
TEST_PRINT("Potentiometer 2 test result %u",pot2res);
...
END_TESTS()
将通过预处理程序的技巧和嵌入式方面的选择性编译进行编译
const unsigned pot1res = testPotentiometer(pot1);
write_uart(123); //Unique id,perhaps from __COUNTER__
write_uart(pot1res);
const unsigned pot2res = testPotentiometer(pot2);
write_uart(124); //Unique id,perhaps from __COUNTER__
write_uart(pot2res);
并在主机上
std::array gTestStrings = {
... other strings ....
TestString{123,"Potentiometer 1 test result %u",unsigned_tag},TestString{124,"Potentiometer 2 test result %u",... more strings ....
};
然后,后者的目的当然是主机软件仅侦听UART中的唯一ID,然后从gTestStrings
查找所需的参数,接收它们,然后将消息打印出来进行测试日志。请注意,这些字符串已经完全从嵌入的一侧消失了。
这里的嵌入式方面当然很容易,只需以明显的方式定义TEST_PRINT
宏,并且支持varargs等也不会太困难。但是,尚不清楚如何定义主机端,因为宏之间的代码必须完全消失。我很确定我可以通过一些模板等正确处理unsigned_tag
等。
赞赏使用标准C ++ 17,但是如果需要,可以使用GCC / Clang规范,显然预处理器将在其中发挥重要作用。当然,也可以在必要时调整宏的语法。
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)