打印
[STM32F1]

大家帮忙看看这个共用体是什么情况

[复制链接]
817|5
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
union TIM5IN1_CAPTURE
{
        unsigned char _TIM5IN1_CAPTURE_;
       
        unsigned char Capture_result : 1;               
        unsigned char High_level_acquisition : 1;       
        unsigned char Counter : 6;                               
       
}TIM5IN1_CAPTURE_STA;


为什么编译器一直报这样的错:
.\output\Program.axf: Error: L6200E: Symbol TIM5IN1_CAPTURE_STA multiply defined (by time_input.o and main.o).
沙发
hmq07| | 2016-8-10 17:00 | 只看该作者
TIM5IN1_CAPTURE_STA   在MAIN.C和time_input.C都有定义,去掉一个

使用特权

评论回复
板凳
奋斗吧,蜗牛!|  楼主 | 2016-8-10 17:11 | 只看该作者
hmq07 发表于 2016-8-10 17:00
TIM5IN1_CAPTURE_STA   在MAIN.C和time_input.C都有定义,去掉一个

这个共用体只有一个头文件有

使用特权

评论回复
地板
joyme| | 2016-8-10 17:27 | 只看该作者
头文件有没有防止重复包含的语句
e.g.
#ifndef  _xxxx_H_
#define _xxxx_H_
........
#endif
没有的话在不同的c文件重复包含同一个头文件会报重复定义

使用特权

评论回复
5
mmuuss586| | 2016-8-10 20:12 | 只看该作者
哪里重复定义了吧

使用特权

评论回复
6
john_lee| | 2016-8-10 23:53 | 只看该作者
情况是这样的:
main.c include 了这个头文件(头文件中定义了 TIM5IN1_CAPTURE_STA 变量),那么编译器会在 main.o 中分配 TIM5IN1_CAPTURE_STA 变量。
time_input 也 include 了这个头文件,编译器也会在 time_input.o 中分配 TIM5IN1_CAPTURE_STA 变量。
当链接时,链接器会发现 main.o 和 time_input.o 都存在 TIM5IN1_CAPTURE_STA 变量,这种情况链接器肯定不能擅自做主以哪个变量为准,只能报错“重复定义”。

所以,在一般情况下,不要在头文件里定义实例(常量或变量)
楼主的问题可以这样解决(这也是通常标准的方法):
  • 头文件里只声明类型
    typedef union {
        unsigned char _TIM5IN1_CAPTURE_;
        unsigned char Capture_result : 1;
        unsigned char High_level_acquisition : 1;
        unsigned char Counter : 6;
    } TIM5IN1_CAPTURE;

  • 在 main.c 中 include 该头文件,然后定义该类型的变量:
    TIM5IN1_CAPTURE TIM5IN1_CAPTURE_STA;
    编译器会在 main.o 中分配 TIM5IN1_CAPTURE_STA 变量。
  • 在 time_input.c 中 include 该头文件,然后声明该类型的变量:
    extern TIM5IN1_CAPTURE TIM5IN1_CAPTURE_STA;
    编译器不会在 time_input.o 中分配 TIM5IN1_CAPTURE_STA 变量,但可能会(也可能不会,这取决于编译器和工具链)标记 TIM5IN1_CAPTURE_STA 是一个外部符号。
当链接时,链接器只会发现一个 TIM5IN1_CAPTURE_STA 实例(在 main.o 中的变量),而对于 time_input.o 中的使用的 TIM5IN1_CAPTURE_STA 外部符号,则会自动定位到 main.o 中的 TIM5IN1_CAPTURE_STA 变量。

使用特权

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

本版积分规则

3

主题

8

帖子

0

粉丝