C语言 如何使用 arm-none-eabi-gcc + cmake 设置一个 cmocka 示例?



我正在为基于stm32f4xx的系统开发固件。 为此,我基于ARM和cmake的arm-none-eabi-gcc工具链设置了一个工具链。 这个工具链适用于 Ubuntu。我可以x编译和调试(通过openocd + eclipse IDE(。 现在我想为我的代码添加一些功能测试。我正在检查,似乎cmocka是用于嵌入式软件测试的好工具。

我现在正在寻找一个将测试集成到 cmake 构建中的示例/模板。

让我们在myfunc.c上假设一个简单的函数

#include "myFunc.h"
int buffer[10];
void myFunc(int i, int val) {
buffer[i] = val;
}

如果我做对了,我可以在单独的 c 文件中进行测试,例如"test.c">

#include "myFunc.h"
#include <cmocka.h>
// function success
static void test_myFunc_positive() {
for(int i = 0; i < 10; i++) {
myFunc(i,i);
}
}
static void test_myFunc_outofbounds() {
myFunc(100,44);
}

int main(void) {
const struct CMUnitTest tests[] = {
cmocka_unit_test(test_myFunc_positive),
cmocka_unit_test(test_myFunc_outofbounds),
};
return cmocka_run_group_tests(tests, NULL, NULL);
}

通常我跑步

cmake .. -DCMAKE_BUILD_TYPE=Debug -DCMAKE_TOOLCHAIN_FILE="cmake/STM32Toolchain.cmake"

我的问题包含一些子问题: 1.(我安装了libcmocka-dev。这适用于我的主机系统。我需要为我的arm-none-eabi-gcc编译器安装cmocka吗? 2.( 如何设置 cmake 来选择 cmocka 库,构建测试并在主机系统上运行它?认为我的工具链文件需要忽略。

你的源代码看起来很好。这是如何使用cmocka的食谱。 我也建议交叉编译cmocka的源代码。事实上,我是这样做的:

  1. 向源添加cmocka.c
  2. 将 'cmocka.h 和cmocka_pbc.hcmocka_private.h添加到您的包含目录中。
  3. 编译并运行您的软件

PS:我不知道libcmocka-dev。我认为这是 cmocka 的预编译版本?

PPS:我在将cmocka的输出重定向到我的串行UART时遇到了一些麻烦。如果您遇到同样的问题,请随时询问。

相关内容

  • 没有找到相关文章

最新更新