打印

KEIL C51 关于寄存器定义头文件的使用

[复制链接]
2510|11
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
lyj317|  楼主 | 2014-4-14 14:53 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
每一个mcu都有相关的寄存器定义头文件,这里面是用sfr XX = XX的形式来说明的(头文件不是最好不要定义变量吗?)
小弟在用keil uv4编译的时候出现重定义问题
我在lcd.c中包含了这个寄存器定义头文件,在uart.c中也包含了,这样会产生重定义的错误,该怎么解决?

相关帖子

沙发
ayb_ice| | 2014-4-14 15:01 | 只看该作者
C中定义变量

头文件其实也可以,但容易重复定义,用条件编译来处理

使用特权

评论回复
板凳
lyj317|  楼主 | 2014-4-14 15:05 | 只看该作者
ayb_ice 发表于 2014-4-14 15:01
C中定义变量

头文件其实也可以,但容易重复定义,用条件编译来处理

编译器中自带的头文件,如果只能在一个c文件中包含那岂不是有很大的局限性。
我每个不同的功能模块都只能写在一个C文件里面了?

使用特权

评论回复
地板
coody| | 2014-4-14 15:52 | 只看该作者
避免重复包含啊
#ifndef   _xxx_H
#define   _xxx_H


#endif

使用特权

评论回复
5
ayb_ice| | 2014-4-14 16:16 | 只看该作者
lyj317 发表于 2014-4-14 15:05
编译器中自带的头文件,如果只能在一个c文件中包含那岂不是有很大的局限性。
我每个不同的功能模块都只能 ...

我有说过头文件只能在一个C中使用吗

使用特权

评论回复
6
lyj317|  楼主 | 2014-4-14 16:26 | 只看该作者
ayb_ice 发表于 2014-4-14 16:16
我有说过头文件只能在一个C中使用吗

sfr 是定义还是声明

使用特权

评论回复
7
lyj317|  楼主 | 2014-4-14 16:27 | 只看该作者
coody 发表于 2014-4-14 15:52
避免重复包含啊
#ifndef   _xxx_H
#define   _xxx_H

这个只能避免重复包含,但是无法避免重复定义吧

使用特权

评论回复
8
ayb_ice| | 2014-4-14 16:48 | 只看该作者
sfr是定义,这个可以重复定义,只要地址相同即可,非标准C里的

与变量定义有区别

使用特权

评论回复
9
ayb_ice| | 2014-4-14 16:55 | 只看该作者
// a.c
#define __A_C
#include "a.h"
...


// b.c
#define __B_C
#include "a.h"
#include "b.h"
...


// a.h
#ifndef __A_H
#define __A_H

#ifdef __A_C
        char global_v1 = 0x11;
#else
        extern char global_v1;
#endif        // #ifdef __A_C

#endif

// b.h
....

#include "a.h"

...

// a.h



使用特权

评论回复
10
ningling_21| | 2014-4-14 19:51 | 只看该作者
尽量做到规范化...

使用特权

评论回复
11
elec921| | 2014-4-14 20:05 | 只看该作者
楼主百度  条件编译

使用特权

评论回复
12
lyj317|  楼主 | 2014-4-15 11:34 | 只看该作者
ayb_ice 发表于 2014-4-14 16:48
sfr是定义,这个可以重复定义,只要地址相同即可,非标准C里的

与变量定义有区别 ...

谢谢,已解惑

使用特权

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

本版积分规则

5

主题

17

帖子

0

粉丝