Модульный тест C с ключевыми словами, специфичными для компилятора

Я пишу модульные тесты для некоторых встроенных C, которые выполняются на хост-компьютере (еще не тестируются на целевом компьютере) и компилируются с помощью GCC. Для тестирования я использовал систему сборки Ceedling с инфраструктурой тестирования Unity.

Один из файлов, который я хотел бы проверить, включает в себя файл (скажем, ах), который включает в себя другой файл (скажем, cpu.h), который является частью пакета поддержки платы от поставщика встроенных устройств, и использует ключевые слова, специфичные для целевого компилятора (например __cregisterнапример, в extern __cregister volatile unsigned int IER;,

Другой проблемой, опять же с таким файлом, включенным из BSP, является встроенная сборка asm() разделы, такие как в #define FOO_ASM asm("FOO"),

Они оба, конечно, выдают ошибку при построении тестов, поскольку GCC не распознает эти ключевые слова.

Я думал, что смогу предотвратить добавление этих заголовков BSP, если Ceedling создаст макет, добавив #include "mock_a.h" в мой тестовый файл, но GCC по-прежнему компилирует ах, и, следовательно, BH

Есть ли лучший способ решения таких проблем?

Я мог бы добавить что-то вроде ниже к рассматриваемому файлу BSP, но я не хочу изменять код поставщика, который изменил бы или переписал мои изменения с новой версией версии, я бы скорее понял, как правильно изолировать модуль.

// Unknown how __cregister is initially defined
#ifdef TEST
    #undef __cregister // Redefine __cregister to nothing
    #define __cregister
#endif

extern __cregister volatile unsigned int IER;

1 ответ

Решение

В итоге я следовал методу, указанному в ссылке в моем комментарии к ФП.

Так что для примера из моего оригинального поста

/* foo.h */
extern __cregister volatile unsigned int IER;
#define FOO_BAR_ASM asm("BAR");

Я создал следующий файл с тем же именем в test/support/ каталог и удалил путь включения для реальных файлов BSP из настроек тестовой сборки:

/*foo.h - in test/support */
extern volatile unsigned int IER;
#define FOO_BAR_ASM

Затем добавил, как включить #include "mock_foo.h" в тестовый файл.

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