gpt4 book ai didi

c - 出现错误[Pe020] : identifier "" is undefined in IAR with an typedef enum

转载 作者:行者123 更新时间:2023-11-30 20:38:00 25 4
gpt4 key购买 nike

我在互联网上没有找到任何解决方案,这就是我在这里提问的原因。

我的 Led_TypeDef 变量在 MyDriverConfig.h 中未定义。首先,我在 MyApplications.h 中定义了:

/* Define to prevent recursive inclusion -------------------------------------*/
#ifndef __MYAPPLICATIONS_H
#define __MYAPPLICATIONS_H


#ifdef __cplusplus
extern "C" {
#endif


#include "main.h"

typedef enum
{
LED1 = 0,
LED_GREEN = LED1
} Led_TypeDef;

#define LEDn 1
#define LED1_PIN GPIO_PIN_0
#define LED1_GPIO_PORT GPIOB
#define LED1_GPIO_CLK_ENABLE() __GPIOA_CLK_ENABLE()
#define LED1_GPIO_CLK_DISABLE() __GPIOA_CLK_DISABLE()

#define LEDx_GPIO_CLK_ENABLE(__INDEX__) (((__INDEX__) == 0) ? LED1_GPIO_CLK_ENABLE() : 0)
#define LEDx_GPIO_CLK_DISABLE(__INDEX__) (((__INDEX__) == 0) ? LED1_GPIO_CLK_DISABLE() : 0)

void LED_On(Led_TypeDef Led);
void LED_Off(Led_TypeDef Led);
void LED_Toggle(Led_TypeDef Led);

void MCU_Configuration(void);



#endif /* __MYAPPLICATIONS_H */

然后,在 MyConfigDriver.h 中:

    /* Define to prevent recursive inclusion -------------------------------------*/
#ifndef __MYCONFIG_H
#define __MYCONFIG_H

#ifdef __cplusplus
extern "C" {
#endif

#include "main.h"



void SystemClock_Config(void);


void MX_LED_Init(Led_TypeDef Led);
void MX_CAN_Init(void);
void MX_I2C1_Init(void);
void MX_SPI1_Init(void);
void MX_USART2_UART_Init(void);


#endif /* __MYCONFIG_H */

我认为它定义良好,因为我的 main.h 包含了所有内容:

/* Define to prevent recursive inclusion -------------------------------------*/
#ifndef __MAIN_H
#define __MAIN_H

#include "stm32f0xx_hal.h"
#include "MyDriverConfig.h"
#include "MyApplications.h"


#endif /* __MAIN_H */

这些是我收到的错误:

MyApplications.c  
Error[Pe020]: identifier "Led_TypeDef" is undefined C:\Inc\MyDriverConfig.h 24
Error while running C/C++ Compiler
main.c
Error[Pe020]: identifier "Led_TypeDef" is undefined C:\Inc\MyDriverConfig.h 24
Error while running C/C++ Compiler

错误总数:2警告总数:0

当我将 MyApplication.h 包含在 MyDriverConfig.h 中时,我得到:

Updating build tree... 
MyApplications.c
Error[Pe020]: identifier "Led_TypeDef" is undefined C:\Users\Inc\MyDriverConfig.h 25
Error while running C/C++ Compiler
main.c
MyDriverConfig.c
Total number of errors: 1
Total number of warnings: 0

我不明白为什么当我在 MyDriverConfig.h 中使用 Led_TypDef 时不包括 MyApplications 时会出现两个错误。

我也尝试过添加 extern Led_TypeDef Led;在 MyApplication.h 中没有任何结果。

最佳答案

好的,谢谢。对于可能感兴趣的人来说,这种方式效果很好:

    /* Define to prevent recursive inclusion -------------------------------------*/
#ifndef __MAIN_H
#define __MAIN_H



#include "stm32f0xx_hal.h"
#include "MyDriverConfig.h"
#include "MyApplications.h"



#endif /* __MAIN_H */

现在在 MyDriverConfig.h

    /* Define to prevent recursive inclusion -------------------------------------*/
#ifndef __MYCONFIG_H
#define __MYCONFIG_H

#ifdef __cplusplus
extern "C" {
#endif

#include "stm32f0xx_hal.h"
#include "MyApplications.h"

extern GPIO_TypeDef* LED_PORT[LEDn];
extern const uint16_t LED_PIN[LEDn];
[...]

void MX_LED_Init(Led_TypeDef Led);


#endif /* __MYCONFIG_H */

然后,在MyDriverConfig.c中

        /* Includes ------------------------------------------------------------------*/
#include "MyDriverConfig.h"

[...]
void MX_LED_Init(Led_TypeDef Led)
{
[...]
}

然后,在 MyApplications.h 中

#ifndef __MYAPPLICATIONS_H
#define __MYAPPLICATIONS_H




#ifdef __cplusplus
extern "C" {
#endif

#include "stm32f0xx_hal.h"




typedef enum
{
LED1 = 0,
LED_GREEN = LED1
} Led_TypeDef;

[...]

void LED_On(Led_TypeDef Led);


#endif /* __MYAPPLICATIONS_H */

最后在 MyApplications.c 中

    #include "MyApplications.h"
#include "MyDriverConfig.h"

GPIO_TypeDef* LED_PORT[LEDn] = {LED1_GPIO_PORT};
const uint16_t LED_PIN[LEDn] = {LED1_PIN};

代码并不完美,因为仍然有一些循环包含:stm32f0xx_hal.h,但它编译得很好。

关于c - 出现错误[Pe020] : identifier "" is undefined in IAR with an typedef enum,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30843084/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com