我很难理解为什么下面的代码给了我关于规则 11.3 的两个错误
#define NUM_TASKS 3
typedef struct
{
void (*TaskFunc)(void);
uint32_t Periodicity;
uint32_t StartOffset;
} TaskConfig_t;
typedef enum
{
IDLE,
RUNNING
} TaskStatus_t;
typedef struct
{
uint32_t ExecTime;
uint32_t MinExecTime;
uint32_t MaxExecTime;
} TaskMetrics_t;
typedef struct
{
uint32_t TimeToRun;
uint8_t OverrunCnt;
TaskStatus_t Status;
TaskMetrics_t Metrics;
} TaskParam_t;
typedef struct
{
uint32_t *CpuUtilizationPercent;
uint32_t *Counter;
TaskParam_t *Params;
TaskConfig_t *Tasks;
uint8_t NumTasks;
} PPTS_Config_t;
static uint32_t PPTS_CpuUtilizationPercent;
static uint32_t PPTS_Counter;
static TaskParam_t TaskParams[NUM_TASKS];
static TaskConfig_t TaskConfig[NUM_TASKS];
const PPTS_Config_t CnfPPTS =
{
&PPTS_CpuUtilizationPercent,
&PPTS_Counter,
TaskParams, /* MISRA-C rule 11.3 violation */
TaskConfig, /* MISRA-C rule 11.3 violation */
NUM_TASKS
};
在这两种情况下,错误都是:不应在指向对象类型的指针和指向不同对象类型的指针之间执行强制转换
这里的问题是TaskParams和TaskConfig都是相同类型的指针,它们分别是结构元素Params和Tasks。我不明白为什么我不能将TaskParams分配给*Params如果它们具有完全相同的类型。我错过了什么吗?
非常感谢您的帮助,我希望这可以得到解释,因为我真的很沮丧。
编辑:如果有帮助的话,我已经包含了所有相关的数据类型。
问候。