Ceedling, как передать определения в CMock
Я немного новичок в TDD, хотя я использую C в течение некоторого времени. В результате я использую ceedling для тестирования моего встроенного проекта.
Я могу rake test:all
в gcc, но сейчас я пытаюсь переместить это во встроенный целевой симулятор. Я указываю свой кросс-компилятор, компоновщик и т. Д. Через файл project.yml.
Когда я rake test:all
Я получаю сообщение об ошибке при компиляции cmock.c (несколько других файлов компилируются без проблем):
/cmock.c:17:31: ошибка: размер массива 'CMock_Guts_Buffer' слишком велик
Есть и другие ошибки после этого, но это тот, который их сбивает.
Когда я иду в cmock.c
Я вижу это в верхней части файла:
#ifdef CMOCK_MEM_DYNAMIC
static unsigned char* CMock_Guts_Buffer = NULL;
static CMOCK_MEM_INDEX_TYPE CMock_Guts_BufferSize = CMOCK_MEM_ALIGN_SIZE;
static CMOCK_MEM_INDEX_TYPE CMock_Guts_FreePtr;
#else
static unsigned char CMock_Guts_Buffer[CMOCK_MEM_SIZE + CMOCK_MEM_ALIGN_SIZE];
static CMOCK_MEM_INDEX_TYPE CMock_Guts_BufferSize = CMOCK_MEM_SIZE + CMOCK_MEM_ALIGN_SIZE;
static CMOCK_MEM_INDEX_TYPE CMock_Guts_FreePtr;
#endif
Отлично, поэтому мне просто нужно найти, где они объявлены. Я делаю текстовый поиск только для того, чтобы обнаружить, что они нигде не объявлены... поэтому я подозреваю, что они исходят из значений по умолчанию в ceedling.
Я нашел документацию для CMOCK и, в разделе "Скомпилированные параметры",
Также существует ряд #defines для настройки опыта cmock...
Далее перечисляются #defines, которые я нашел в исходном коде, но не указывается, где их найти. Я попытался создать файл включения с соответствующими определениями и пропустить файл включения через "project.yml", но безуспешно.
Я подозреваю, что ответ невероятно прост, он просто нигде не обозначен, что я искал. Спасибо за ваше время,
2 ответа
Конечно, ответ смотрел мне в лицо.
В файле 'project.yml' есть раздел под названием 'define'. Определения по умолчанию:
:defines:
# in order to add common defines:
# 1) remove the trailing [] from the :common: section
# 2) add entries to the :common: section (e.g. :test: has TEST defined)
:commmon: &common_defines []
:test:
- *common_defines
- TEST
:test_preprocess:
- *common_defines
- TEST
Я просто добавил определения для моей цели:
:defines:
# in order to add common defines:
# 1) remove the trailing [] from the :common: section
# 2) add entries to the :common: section (e.g. :test: has TEST defined)
:commmon: &common_defines
- __dsPIC33EP32MC204__
- UNITY_INT_WIDTH=16
- CMOCK_MEM_INDEX_TYPE=uint16_t
- CMOCK_MEM_PTR_AS_INT=uint16_t
- CMOCK_MEM_ALIGN=1
- CMOCK_MEM_SIZE=1024
- CMOCK_MEM_STATIC
:test:
- *common_defines
- TEST
:test_preprocess:
- *common_defines
- TEST
Правильный способ настройки cmock для вашего проекта, как указано в предыдущем ответе, slightlynybbled затруднен, но вы также можете предоставить скрытую настройку для ваших cmocks в свой файл project.yml следующим образом:
:cmock:
:mock_prefix: mock_
:when_no_prototypes:
:warn
:enforce_strict_ordering: TRUE
:includes_h_pre_orig_header:
- ../<cmock_headers_includes>.h
:plugins:
- :ignore
- :ignore_arg
- :callback
- :expect
- :expect_any_args
:treat_as:
uint8: HEX8
uint16: HEX16
uint32: UINT32
int8: INT8
bool: UINT8
Эта установка была протестирована с Ceedling 0.27, 0.28 и 0.28.1