2016-05-06 16 views
2

Я несколько новичок в TDD, хотя я использовал C в течение некоторого времени. В результате я использую ceedling для тестирования моего встроенного проекта.Ceedling как передать определяет CMock

Я могу rake test:all в gcc, но теперь я пытаюсь переместить его во встроенный целевой симулятор. Я указываю свой кросс-компилятор, компоновщик и т. Д. Через файл project.yml.

Когда я rake test:all, я получаю сообщение об ошибке при компиляции «cmock.c» (несколько других файлов, компилировать без проблем):

< path_to_cmock >/cmock.c:17:31: error: size of array 'CMock_Guts_Buffer' is too large

Есть другие ошибки после этого, но это тот, который бьет их выкл.

Когда я иду в 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 и, в разделе «Опции» Составитель,

A number of #defines also exist for customizing the cmock experience...

Он выходит на список #defines, что я нашел в исходном коде, но не указывает, где найти их. Я попытался сделать файл include с соответствующими определениями и передать файл include через «project.yml» без везения.

Я подозреваю, что ответ невероятно прост, он просто не очерчен нигде, что я искал. Спасибо за ваше время,

ответ

2

Конечно, ответ смотрел мне в лицо.

В файле 'project.yml' имеется раздел под названием 'определяет'. по умолчанию определяет, являются:

: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 
2

Правильным способом для настройки cmock для prohect как 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