打印
[STM8]

调用STM8S.H 报错问题

[复制链接]
1277|6
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
suxilong|  楼主 | 2015-10-16 10:57 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
请问一个头文件 定义报错问题

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

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


#ifndef _wifi_uart_H
#define _wifi_uart_H

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

#endif

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

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 中
     编译的时候 也是报了 重复定义的错误!!!!
/*!< Unsigned integer types */
typedef unsigned char uint8_t;
typedef unsigned short uint16_t;
typedef unsigned long uint32_t;

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  中

/*************        本地变量声明        **************/
uint8_t        RX1_Buffer[RX1_Lenth];        //接收缓冲 idata
uint8_t        TX1_Cnt;        //发送计数
uint8_t        RX1_Cnt;        //接收计数
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

使用特权

评论回复
5
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 赞一个!
6
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 很给力!
7
suxilong|  楼主 | 2015-10-16 16:46 | 只看该作者
Xflyan 发表于 2015-10-16 14:36
这又是什么链接错误?

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

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

谢谢!

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

55

主题

339

帖子

4

粉丝