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

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