我试图通过在包含十六进制数的寄存器上使用库“check.h”来检查返回值是否正确来进行单元测试。寄存器用于对STM32F030F4 ARM Cortex M0微控制器进行编程。然而,当运行我的测试时,我有一个分段错误。
以下是我要测试的功能:
#define GPIOA_BASE 0x48000000
#define GPIOA_ODR (*(volatile uint32_t *)(GPIOA_BASE + 0x14))
#define LED1 (*(volatile uint32_t *)(0))
#define OFF 0UL
uint32_t LED1_off (void) {
GPIOA_ODR |= (OFF << LED1);
return GPIOA_ODR ;
}
这是我的测试:
START_TEST (test_LED1_off) {
ck_assert_int_eq(0x48000014, LED1_off());
}
END_TEST
关于信息,ck_assert_int_eq函数与uint32_t一起工作,我有另一个测试,它与这种类型的返回值一起工作。
尽管返回值不一定等于我想要测试的值,但当我运行测试时,我会遇到分段错误。以下是错误:
跑步套件:功能测试
66%:检查:3,失败:0,错误:1
tests/tests.c:31:E:核心:test_LED1_off:0:(在此点之后)接收信号11(分段故障)
通过删除以下行:“GPIOA_ODR|=(OFF<<LED1);”并将返回值设置为“1”,我不再存在分段故障。我的印象是,当我运行测试时,我的计算机明白我试图访问它自己的内存。
我所尝试的是可能的吗?如果是,怎么办?如果没有,我可以尝试什么样的测试?我已经为此挣扎了好几个小时。谢谢