5

我对 TDD 有点陌生,尽管我已经使用 C 有一段时间了。因此,我使用 ceedling 来测试我的嵌入式项目。

我可以rake test:all在 gcc 中,但我现在正试图将其移至嵌入式目标模拟器。我通过“project.yml”文件指定我的交叉编译器、链接器等。

当 Irake test:all时,“编译 cmock.c”时出现错误(其他几个文件编译没有问题):

< path_to_cmock >/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 的文档,并在“编译选项”下,

还存在许多用于自定义 cmock 体验的#defines...

它继续列出我在源代码中找到的#defines,但没有说明在哪里可以找到它们。我试图用适当的定义制作一个包含文件,并通过“project.yml”传递包含文件,但没有成功。

我怀疑答案非常简单,只是在我搜索过的任何地方都没有概述。感谢您的时间,

4

2 回答 2

7

当然,答案是盯着我的脸。

在“project.yml”文件中,有一个名为“defines”的部分。默认定义为:

: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
于 2016-05-06T18:11:09.337 回答
2

为您的 prohect 设置 cmock 的正确方法与之前的答案中所指出的一样,但是您还可以在 project.yml 文件中为您的 cmock 提供隐藏设置,如下所示:

: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 进行了测试

于 2017-09-12T15:24:39.897 回答