[英]unit test of arbitrary function on a remote embedded mcu using function pointers and variable arguments of arbitrary type, in C
这个想法是编写一个通用单元测试函数,该函数将使用外部生成的测试输入参数(例如来自通信)在嵌入式目标 mcu 端执行任意被测函数。 这样远程mcu的单元测试函数只写一次,测试用例通过某种通信方式发送已知函数地址和输入参数在主机PC上生成。
例如,如果在远程 mcu 上有一个 int sumoftwoints(int, int) 的函数要测试,主机 pc 会将 sumoftwoints 的地址(链接器知道)和主机上生成的两个随机 int 传递给这个 unitTestFcn 指针pc 然后通过 uart 发送到嵌入式目标。 嵌入式目标通过接收到的函数指针“调用”提供的参数数量,并返回结果以发送回主机 pc 以进行结果检查。
关于这是否合理或该测试方案存在根本缺陷的任何反馈?
好处是将单元测试从嵌入式端移到主机端,具有无限的测试用例可扩展性。
如果我要制作这样的系统,我会让它由 3 个部分组成:
PC 端软件可以读取您的构建过程产生的一些工件以简化事情,例如,您可以使用实际的函数名称,而不必在测试中指定实际地址。
通信协议应该是基于文本的,依靠接收器来转换适合接收平台的值。
执行器必须实现特定于 MCU 架构的 ABI。 这是你将达到你的第一个主要障碍的地方。 首先,ABI 变化很大。 从一些参数在一个或多个寄存器中传递的 Arm,一些作为指向实际参数的指针,一些在堆栈上,到 x86,它都是基于堆栈的。
您的下一个主要障碍将是结构。 如果您要允许调用带有结构参数或返回值的函数,您必须知道您的编译器如何选择为每个特定结构打包字段。
总而言之,创建这样的东西将是一项艰巨的任务,并且可能最终没有那么有用,除非您投入大量工作,例如将其变成商业产品。
另一种选择是在设备上留一些暂存空间,然后在PC上交叉编译你的测试,然后将它们一个一个或一组发送到MCU,安装在暂存空间中并执行。
在任何情况下,由于明显的安全问题,此类功能绝不应包含在运输产品中。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.