微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何在 Linux PC 上运行 stm32 单元测试?

如何解决如何在 Linux PC 上运行 stm32 单元测试?

我正在尝试在我的 linux 机器上对一些 STM32 代码进行单元测试(使用 unity+ceedling),但是每次我访问任何寄存器时,代码都会失败并显示错误

weatherBindingData.WeatherDataForecastHourly.List[0].MainForecasts.TempForecast

例如,此代码将导致 PASSED 1/1(请注意,我正在测试返回 a+b 且与 STM 外设无关的函数)。

> Produced no final test result counts in $stdout:
Segmentation fault (core dumped)
> And exited with status: [0] (count of Failed tests).
> This is often a symptom of a bad memory access in source or test code

但是这段代码会产生上面提到的错误

#include "unity.h"
#include "sum2nums.h"
#include "stm32f4xx.h"

void test_Sum(){
    TEST_ASSERT_EQUAL_UINT32(5,Sum(3,2));
}

是否可以通过这种方式对其进行测试,或者我是否必须使用 QEMU(以及如何在不使用 Eclipse 或任何其他 IDE 的情况下进行测试)?请注意,Ceedling 使用 gcc,如果我使用 arm-none-eabi,它将生成十六进制文件,而我无法在我的 PC 上运行它。

解决方法

如果我理解正确,这个测试框架只是尝试使用主机 x86 C 编译器编译您的测试用例并直接运行它们。这将在您的测试代码不执行任何特定于硬件的事情的情况下工作,这就是为什么您的第一个测试用例很好,但是一旦您的代码尝试接触硬件,如果该硬件实际上不存在,它就会崩溃,如果您将其作为普通的 x86 Linux 进程运行,则显然不是这样。

如果您需要运行访问硬件的测试用例,那么您需要运行它们:

  • 实际上在硬件上,例如通过将开发板插入您的 PC 并使用知道如何交叉编译测试的测试框架,将生成的测试用例二进制文件复制到开发板,运行它并捕获输出。

  • 或在提供硬件模型的模拟器或模拟器上。 QEMU 是这里的一种可能性,假设它具有您正在使用的电路板模型,并且该模型对于您正在运行的任何东西都足够好。同样,您的测试框架需要知道如何交叉编译测试以及如何在模拟器上运行它并捕获输出。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。