Ceedling cómo pasar define a CMock

Soy algo nuevo en TDD, aunque he estado usando C por algún tiempo. Como resultado, estoy usando ceedling para probar mi proyecto incrustado.

Puedo realizar una rake test:all en gcc, pero ahora estoy intentando moverlo a un simulador de objectives integrado. Estoy especificando mi comstackdor cruzado, enlazador, etc. a través del archivo ‘project.yml’.

Cuando realizo la rake test:all , recibo un error al “comstackr cmock.c” (varios otros archivos se comstackn sin problemas):

/cmock.c:17:31: error: el tamaño de la matriz ‘CMock_Guts_Buffer’ es demasiado grande

Hay otros errores después de esto, pero este es el que los inicia.

Cuando voy a cmock.c , veo esto en la parte superior del archivo:

 #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 

Perfecto, así que solo necesito encontrar dónde se declaran. Hago una búsqueda de texto solo para encontrar que no están declarados en ningún lado … así que sospecho que vienen de los valores predeterminados dentro de ceedling.

Encontré la documentación para CMOCK y, en “Opciones comstackdas”,

También existen varios #defines para personalizar la experiencia cmock …

Continúa enumerando las # definiciones que he encontrado en el código fuente, pero no indica dónde encontrarlas. He intentado hacer un archivo de inclusión con las definiciones adecuadas y pasar el archivo de inclusión a través del ‘project.yml’ sin suerte.

Sospecho que la respuesta es increíblemente simple, simplemente no está delineada en ningún lugar donde haya buscado. Gracias por tu tiempo,

Por supuesto, la respuesta fue mirarme fijamente a la cara.

En el archivo ‘project.yml’, hay una sección llamada ‘define’. Las definiciones por defecto son:

 :defines: # in order to add common defines: # 1) remove the trailing [] from the :common: section # 2) add entries to the :common: section (eg :test: has TEST defined) :commmon: &common_defines [] :test: - *common_defines - TEST :test_preprocess: - *common_defines - TEST 

Simplemente agregué las definiciones para mi objective:

 :defines: # in order to add common defines: # 1) remove the trailing [] from the :common: section # 2) add entries to the :common: section (eg :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 

La forma correcta de configurar el cmock para su proyecto es un poco puntiagudo en la respuesta anterior, pero también puede proporcionar una configuración oculta para sus cmocks en su archivo project.yml de la siguiente manera:

 :cmock: :mock_prefix: mock_ :when_no_prototypes: :warn :enforce_strict_ordering: TRUE :includes_h_pre_orig_header: - ../.h :plugins: - :ignore - :ignore_arg - :callback - :expect - :expect_any_args :treat_as: uint8: HEX8 uint16: HEX16 uint32: UINT32 int8: INT8 bool: UINT8 

Esta configuración se ha probado con Ceedling 0.27, 0.28 y 0.28.1