Как настроить пример 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. На самом деле я делаю это так:

  1. добавлять cmocka.c к вашим источникам
  2. Добавьте 'cmocka.h и cmocka_pbc.h а также cmocka_private.h к вашим включенным каталогам.
  3. Скомпилируйте и запустите ваше программное обеспечение

PS: я не знаю libcmocka-dev. Я думаю, что это предварительно скомпилированная версия cmocka?

PPS: У меня были некоторые проблемы с перенаправлением вывода cmocka на мой серийный UART. Если у вас возникли те же проблемы, не стесняйтесь спрашивать.

Другие вопросы по тегам