[STM8] 调用STM8S.H 报错问题

[复制链接]
1830|6
 楼主| suxilong 发表于 2015-10-16 10:57 | 显示全部楼层 |阅读模式
请问一个头文件 定义报错问题

我自己定义了一个 wifi_uart.h 的文件, 文件中很多unsigned char  和布尔  变量要定义。

我调用了  uin8_t  和bool  来定义, 如下:


  1. #ifndef _wifi_uart_H
  2. #define _wifi_uart_H

  3. #include "stm8s.h"
  4. /*************    本地变量声明    **************/
  5. uint8_t    RX1_Buffer[RX1_Lenth];    //接收缓冲 idata
  6. uint8_t    TX1_Cnt;    //发送计数
  7. uint8_t    RX1_Cnt;    //接收计数
  8. bool    B_TX1_Busy;    //发送忙标志

  9. #endif

因为uint8_t 是 在stm8s.h 中 定义的。
  1. /*!< Unsigned integer types  */
  2. typedef unsigned char     uint8_t;
  3. typedef unsigned short    uint16_t;
  4. typedef unsigned long     uint32_t;

  5. typedef enum {FALSE = 0, TRUE = !FALSE} bool;

     所有我在 wifi_uart.h 中    添加了头文件  #include "stm8s.h"  

但是编译的的时候出现了 重复定义的错误:
   #error clnk Debug\smartsocket.lkf:58 Debug\wifi_uart.o: symbol _RX1_Buffer multiply defined (Debug\main.o)


     我把 wifi_uart.h 中    的 #include "stm8s.h"  注释掉:
   编译的时候 却 显示了 一大堆  缺少  ”;“  的 错误,  但实际是没有缺的

      #error cpstm8 inc\wifi_uart.h:20(0+7) missing ;


    我想 只把 下面句加到 wifi_uart.h 中
     编译的时候 也是报了 重复定义的错误!!!!
  1. /*!< Unsigned integer types */
  2. typedef unsigned char uint8_t;
  3. typedef unsigned short uint16_t;
  4. typedef unsigned long uint32_t;

  5. typedef enum {FALSE = 0, TRUE = !FALSE} bool;


        请问具体是该如何处理?

Xflyan 发表于 2015-10-16 12:21 | 显示全部楼层
symbol _RX1_Buffer multiply defined

RX1_Buffer重定义了,跟 STM8S.H 没毛关系啊

评分

参与人数 1威望 +1 收起 理由
suxilong + 1 淡定

查看全部评分

 楼主| suxilong 发表于 2015-10-16 14:04 | 显示全部楼层
Xflyan 发表于 2015-10-16 12:21
symbol _RX1_Buffer multiply defined

RX1_Buffer重定义了,跟 STM8S.H 没毛关系啊

Xflyan

RX1_Buffer  只定义了 一次  就是在 wifi_uart.h  中

  1. /*************        本地变量声明        **************/
  2. uint8_t        RX1_Buffer[RX1_Lenth];        //接收缓冲 idata
  3. uint8_t        TX1_Cnt;        //发送计数
  4. uint8_t        RX1_Cnt;        //接收计数
  5. bool        B_TX1_Busy;        //发送忙标志

 楼主| suxilong 发表于 2015-10-16 14:13 | 显示全部楼层
Xflyan 发表于 2015-10-16 12:21
symbol _RX1_Buffer multiply defined

RX1_Buffer重定义了,跟 STM8S.H 没毛关系啊

The command: "clnk -l"C:\Program Files (x86)\COSMIC\CXSTM8_32K\Lib"  -o Debug\smartsocket.sm8 -mDebug\smartsocket.map Debug\smartsocket.lkf " has failed, the returned value is: 1
Xflyan 发表于 2015-10-16 14:27 | 显示全部楼层
suxilong 发表于 2015-10-16 14:13
The command: "clnk -l"C:\Program Files (x86)\COSMIC\CXSTM8_32K\Lib"  -o Debug\smartsocket.sm8 -mD ...

可以尝试一下把变量定义先放到c文件里去,这个wifi_uart.h 是否被多个文件引用了

评分

参与人数 1威望 +3 收起 理由
suxilong + 3 赞一个!

查看全部评分

Xflyan 发表于 2015-10-16 14:36 | 显示全部楼层
suxilong 发表于 2015-10-16 14:13
The command: "clnk -l"C:\Program Files (x86)\COSMIC\CXSTM8_32K\Lib"  -o Debug\smartsocket.sm8 -mD ...

这又是什么链接错误?

关于变量,除非你认为这个头文件只会被 #include 一次,否则坚决不要放到 .h 文件中,头文件被重复引用的过程就会造成重复定义
可以先在其中一个 .C 文件定义,在 .H 中加 extern 声明

评分

参与人数 1威望 +3 收起 理由
suxilong + 3 很给力!

查看全部评分

 楼主| suxilong 发表于 2015-10-16 16:46 | 显示全部楼层
Xflyan 发表于 2015-10-16 14:36
这又是什么链接错误?

关于变量,除非你认为这个头文件只会被 #include 一次,否则坚决不要放到 .h 文件 ...

就是你说的,  变量要定义在C 文件中!!!

谢谢!
您需要登录后才可以回帖 登录 | 注册

本版积分规则

个人签名:没有最差,只有最懒

55

主题

340

帖子

4

粉丝
快速回复 在线客服 返回列表 返回顶部