STM32F103编译问题
..\..\Libraries\CMSIS\CM3\DeviceSupport\ST\STM32F10x\stm32f10x.h(521): error:#40: expected an identifiertypedef enum {DISABLE = 0, ENABLE = !DISABLE} FunctionalState;
..\..\Libraries\CMSIS\CM3\DeviceSupport\ST\STM32F10x\stm32f10x.h(521): error:#40: expected an identifier
typedef enum {DISABLE = 0, ENABLE = !DISABLE} FunctionalState;
..\..\Libraries\CMSIS\CM3\DeviceSupport\ST\STM32F10x\stm32f10x.h(524): error:#40: expected an identifier
typedef enum {ERROR = 0, SUCCESS = !ERROR} ErrorStatus;
..\..\Libraries\CMSIS\CM3\DeviceSupport\ST\STM32F10x\stm32f10x.h(524): error:#40: expected an identifier
typedef enum {ERROR = 0, SUCCESS = !ERROR} ErrorStatus;
..\..\User\mcu_sdk\mcu_api.c: 0 warnings, 4 errors
在mcu_api.c里屏敝以下,则编译能过。
//#include "stm32f10x_gpio.h" // david
void wifi_uart_service(void)
{
static unsigned short rx_in = 0;
unsigned short offset = 0;
unsigned short rx_value_len = 0; //Êý¾ÝÖ¡³¤¶È
// GPIO_WriteBit(GPIOB, GPIO_Pin_6, (BitAction)(1 - GPIO_ReadOutputDataBit(GPIOB, GPIO_Pin_6)));
应该是你 “wifi.h"文件里面SUCCESS、ERROR、ENABLE、DISABLE这四个宏定义和stm32f10x.h文件里面的typedef enum {ERROR = 0, SUCCESS = !ERROR} ErrorStatus;typedef enum {DISABLE = 0, ENABLE = !DISABLE} FunctionalState;定义重复了。enum和#define、typedef三者之间定义同名宏定义都会产生冲突,就会报这个错 本帖最后由 toofree 于 2018-3-31 22:36 编辑
你的“mcu_api.c”文件中少了包含一个库 #include "include.h"
因为在stm32f10x.h和wifi.h中都有关于 SUCCESS、ERROR、ENABLE、DISABLE的定义,但是在定义之前先判断的之前有没有定义。由于你没有包含"include.h"文件,所以认为你没有定义,而重定义了这4个宏定义。而实际你在其它文件中又用到了“stm32f10x.h”中的相关定义,因此产生冲突。
附件的工程已经为了改过来了,请笑纳。
喜欢有问题,附件发工程的,减少了不必要的猜测。解决这样的问题让人心情很舒服。
厉害了......... toofree,我下载你改好的来试了。真的OK了。看来我真是问对地方了,你一出手就解决了我几天都无法弄懂得东西,感谢之余,也深感佩服。
里面还有个报警,有时间也帮看下,谢谢
..\..\User\mcu_sdk\system.c(433): warning:#167-D: argument of type "volatile unsigned char *" is incompatible with parameter of type "unsigned char *"
mcu_write_rtctime(wifi_uart_rx_buf + offset + DATA_START);
..\..\User\mcu_sdk\system.c: 1 warning, 0 errors zhang547886405,你分析的没错,也谢谢你的指教 hqw 发表于 2018-4-3 19:47
toofree,我下载你改好的来试了。真的OK了。看来我真是问对地方了,你一出手就解决了我几天都无法弄懂得东西 ...
这个是指针类型不同的警告,你可以用强到类型转换一下,就好了。 本帖最后由 jjbboox 于 2018-4-4 08:42 编辑
ENABLE和DISABLE是不是在其他头文件中定义过了。 toofree,你好,关于我第一次发帖请教不能编译成功的问题,我还想弄清楚些。
方法1:#include "include.h" //20180331Íí£¬Ìí¼Ó´ËÐУ¬STÉçÇøtoofree
#include "wifi.h"
按上面这样改,可以编译成功,如果两者调个先后(如下方法2),就不能编译。不知如何解释?
方法2:
#include "wifi.h"
#include "include.h" //20180331Íí£¬Ìí¼Ó´ËÐУ¬STÉçÇøtoofree
上次,我的原项目是不能编译成功的,你按方法1改后可以编译成功。你的解释是:因为在stm32f10x.h和wifi.h中都有关于 SUCCESS、ERROR、ENABLE、DISABLE的定义,但是在定义之前先判断的之前有没有定义。由于你没有包含"include.h"文件,所以认为你没有定义,而重定义了这4个宏定义。而实际你在其它文件中又用到了“stm32f10x.h”中的相关定义,因此产生冲突。
我现在对了下,其实wifi.h中根本就没有关于 SUCCESS、ERROR、ENABLE、DISABLE的定义。那就不存在在stm32f10x.h和wifi.h中都有关于 SUCCESS、ERROR、ENABLE、DISABLE的定义的问题。那不能编译原因是什么呢?
我再把你上次改好的项目附上。有空麻烦再分析下,不胜感谢了。
toofree 发表于 2018-3-31 22:33
你的“mcu_api.c”文件中少了包含一个库 #include "include.h"
因为在stm32f10x.h和wifi.h中都有关于 SUCC ...
toofree,你好,关于我第一次发帖请教不能编译成功的问题,我还想弄清楚些。
方法1:#include "include.h" //20180331Íí£¬Ìí¼Ó´ËÐУ¬STÉçÇøtoofree
#include "wifi.h"
按上面这样改,可以编译成功,如果两者调个先后(如下方法2),就不能编译。不知如何解释?
方法2:
#include "wifi.h"
#include "include.h" //20180331Íí£¬Ìí¼Ó´ËÐУ¬STÉçÇøtoofree
上次,我的原项目是不能编译成功的,你按方法1改后可以编译成功。你的解释是:因为在stm32f10x.h和wifi.h中都有关于 SUCCESS、ERROR、ENABLE、DISABLE的定义,但是在定义之前先判断的之前有没有定义。由于你没有包含"include.h"文件,所以认为你没有定义,而重定义了这4个宏定义。而实际你在其它文件中又用到了“stm32f10x.h”中的相关定义,因此产生冲突。
我现在对了下,其实wifi.h中根本就没有关于 SUCCESS、ERROR、ENABLE、DISABLE的定义。那就不存在在stm32f10x.h和wifi.h中都有关于 SUCCESS、ERROR、ENABLE、DISABLE的定义的问题。那不能编译原因是什么呢?
我再把你上次改好的项目附上。有空麻烦再分析下,不胜感谢了。
页:
[1]
2