• 已解决 73482 个问题
  • 已帮助 5993 位优秀工程师

stm32程序问题

luomandike 2016-11-09 浏览量:3946
我在用keil编译程序中出现了问题。提示是这样的。

..\Network\esp8266.h(36): error:  #3092: anonymous unions are only supported in --gnu mode, or when enabled with #pragma anon_unions
所涉及的内容是

extern struct  STRUCT_USARTx_Fram 
{
	char  Data_RX_BUF[ RX_BUF_MAX_LEN ];
	
 union {
    __IO uint16_t InfAll;
   struct {
		  __IO uint16_t FramLength       :15;
		  __IO uint16_t FramFinishFlag   :1; 
  } InfBit;
  }; 
	
} strPc_Fram_Record, strEsp8266_Fram_Record;
改了好多地方,都没办法消除错误,网上也没有找到解决的办法。请教大神如何解决。。。在线等。。。
1 0 收起

我来回答

上传资料:
选择文件 文件大小不超过15M(格式支持:doc、ppt、xls、pdf、zip、rar、txt)
最佳答案
  • luomandike 发表于 2016-11-9 21:12
    我在论坛上下载的代码,有自己修改的一部分,但是不加这个结构体程序就是没有错误的。

    ...

    把定义放在C文件中。
    下面是更改好的。


    • 发布于 2016-11-09
    • 举报
    • 评论 0
    • 2
    • 0

其他答案 数量:9
  • 本帖最后由 MOP 于 2016-11-9 21:06 编辑

    嗨,在您的標頭檔esp8266.h中,前面加入
    #pragma anon_unions
    因為有使用到unions,這涉及同一個Memory空間不同型別的宣告,MDK的ARM C Compiler會特別處理,GCC則否,要特別注意這點

    以上希望對您有用:)
    • 发布于2016-11-09
    • 举报
    • 评论 0
    • 1
    • 0

  • 本帖最后由 汉云 于 2016-11-9 20:43 编辑

    方法一:
    添加#pragma anon_unions



    方法二:
    给union加名字

    • 发布于2016-11-09
    • 举报
    • 评论 0
    • 1
    • 0

  • MOP 发表于 2016-11-9 20:31
    嗨,在您的標頭檔esp8266.h中,前面加入
    因為有使用到unions,這涉及同一個Memory空間不同型別的宣告,MDK的ARM ...

    我试过了,添加这个代码后会出现新的错误
    ..\object\onenetdemo.axf: Error: L6218E: Undefined symbol strEsp8266_Fram_Record (referred from esp8266.o).
    Target not created
    • 发布于2016-11-09
    • 举报
    • 评论 0
    • 0
    • 0

  • 汉云 发表于 2016-11-9 20:40
    方法一:
    添加#pragma anon_unions


    你好,我试过你的方法一,会提示新的错误。。
    ..\object\onenetdemo.axf: Error: L6218E: Undefined symbol strEsp8266_Fram_Record (referred from esp8266.o).
    
    我又试了你的方法2,还是有错误。。
    ..\Network\esp8266.c(217): error:  #136: struct "STRUCT_USARTx_Fram" has no field "InfBit"
    ..\Network\esp8266.c(218): error:  #136: struct "STRUCT_USARTx_Fram" has no field "InfBit"
    ..\Network\esp8266.c(219): error:  #136: struct "STRUCT_USARTx_Fram" has no field "InfBit"
    ..\Network\esp8266.c(220): error:  #136: struct "STRUCT_USARTx_Fram" has no field "InfBit"
    "..\object\onenetdemo.axf" - 4 Errors, 0 Warning(s).
    Target not created
    • 发布于2016-11-09
    • 举报
    • 评论 0
    • 0
    • 0

  • 本帖最后由 MOP 于 2016-11-9 21:57 编辑

    luomandike 发表于 2016-11-9 21:33
    万分感谢!!
    您原來的Code如果用extern的話,esp8266.c檔案要再定義,在前面加入以下就可了
    struct  STRUCT_USARTx_Fram strPc_Fram_Record, strEsp8266_Fram_Record;
    • 发布于2016-11-09
    • 举报
    • 评论 0
    • 0
    • 0

相关问题

问题达人换一批

stm32程序问题