我对TDD有点新鲜,虽然我已经使用C一段时间了。结果,我正在使用ceedling来测试我的嵌入式项目。
我可以在gcc中rake test:all
,但我现在正尝试将其移至嵌入式目标模拟器。我通过' project.yml'指定我的交叉编译器,链接器等。文件。
当我rake 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的文档,并在" Compiled Options",
下找到了还有许多#defines可用于自定义cmock体验...
继续列出我在源代码中找到的#defines,但它没有说明在哪里找到它们。我试图用适当的定义创建一个包含文件,并通过' project.yml'传递包含文件。没有运气。
我怀疑答案简单得令人难以置信,在我搜索的任何地方都没有概述。谢谢你的时间,
答案 0 :(得分:3)
当然,答案就是盯着我。
在'project.yml'文件中,有一个名为'definitions'的部分。默认定义为:
: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
答案 1 :(得分:2)
为您的prohect设置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
测试了该设置