Как настроить пример cmocka с помощью arm-none-eabi-gcc + cmake?
Я разрабатываю прошивку для систем на основе 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. Это для моей хост-системы. Нужно ли устанавливать cmocka для моего компилятора arm-none-eabi-gcc? 2.) Как настроить cmake, чтобы выбрать библиотеку cmocka, собрать тест и запустить его на хост-системе? Думаю, мой файл набора инструментов должен быть проигнорирован.
1 ответ
Ваш исходный код выглядит довольно хорошо. Вот рецепт того, как вы можете использовать cmocka. Я также рекомендую кросс- компилировать исходный код cmocka. На самом деле я делаю это так:
- добавлять
cmocka.c
к вашим источникам - Добавьте 'cmocka.h и
cmocka_pbc.h
а такжеcmocka_private.h
к вашим включенным каталогам. - Скомпилируйте и запустите ваше программное обеспечение
PS: я не знаю libcmocka-dev. Я думаю, что это предварительно скомпилированная версия cmocka?
PPS: У меня были некоторые проблемы с перенаправлением вывода cmocka на мой серийный UART. Если у вас возникли те же проблемы, не стесняйтесь спрашивать.