我正在为一个嵌入式C项目工作,我目前正在为该项目编写单元测试。我使用的是fff模拟框架,它本质上创建了假函数调用,这些函数调用应该重载特定于硬件的调用。
当我创建一个“假函数”时,我会得到一个错误,说明
重载函数的
地址与所需类型'void()‘不匹配
每次我试图制造假的时候都会发生这种事。我主要是一个嵌入式C程序员,并且只使用C++的元素来进行单元测试。我真的不明白这条信息在告诉我什么,也不明白为什么它是个问题。如果有人能提供任何见解,我将非常感激。
有关代码如下所示。该错误在函数名上突出显示: xTaskCreate、HAL_TIM_Base_Init和HAL_TIM_ConfigClockSource。
#include <TinyEmbeddedTest.h>
#include <stdio.h>
#include "stm32f1xx_hal.h"
#include "FreeRTOS.h"
#include "task.h"
#include "fff.h"
#include "heater.c" //source file being tested
DEFINE_FFF_GLOBALS;
FAKE_VALUE_FUNC(BaseType_t, xTaskCreate, TaskFunction_t, char *, configSTACK_DEPTH_TYPE, void *, UBaseType_t, TaskHandle_t *);
FAKE_VALUE_FUNC(HAL_StatusTypeDef, HAL_TIM_Base_Init, TIM_HandleTypeDef);
FAKE_VALUE_FUNC(HAL_StatusTypeDef, HAL_TIM_ConfigClockSource, TIM_HandleTypeDef, TIM_ClockConfigTypeDef*);发布于 2021-02-14 08:22:55
由于您的错误与重载有关,这意味着您试图对同一个函数使用多个定义。我建议您确保这些模拟声明(也是定义)不会重新定义问题函数的原始定义。因此,例如,如果您在模拟一个函数int func(void),那么您就不能仅仅添加一个模拟声明FAKE_VALUE_FUNC(int,func)。您需要在原始函数实现之前添加weak属性,或者用函数指针替换原始函数实现。在我之前就类似问题给出的两个答案中,您可以更广泛地阅读到关于它的更多内容:
https://stackoverflow.com/questions/64821121
复制相似问题