单片机及C51的sbit变量,如何实现外部文件引用,extern声明不行

2020-01-19 19:37发布

本帖最后由 bbssilverkey 于 2013-5-22 13:01 编辑

文件3个:
a.c  - 用sbit声明老了一个变量 key
a.h
_main.c - #include "a.h"  主函数调用 key这个变量,编译 显示未定义

问题:我不把sbit丢a.h不行么?当然丢a.h肯定能过编译.
请教解决方法
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
24条回答
chencc8
1楼-- · 2020-01-20 00:23
我也遇到过这问题 所以我干脆不用sbit~~~
C51的sbit很多限制,并且不能像char之类的关键字一样自动分配地址,麻烦死了
Alimy
2楼-- · 2020-01-20 05:44
这个我刚好会。、

a.c
unsigned char  bdata  aaaa;
sbit  a_0 =  aaaa^0;



在b.h中这样声明就可以了
extern bit  a_0;
chencc8
3楼-- · 2020-01-20 08:56
Alimy 发表于 2013-5-22 15:59
这个我刚好会。、

a.c

我记得我是这样
在a.h上声明了extern bit  a_0;结果报错……
明天再试试看
bbssilverkey
4楼-- · 2020-01-20 13:39
 精彩回答 2  元偷偷看……
chencc8
5楼-- · 2020-01-20 16:08
Alimy 发表于 2013-5-22 15:59
这个我刚好会。、

a.c

还是不行呢,这两种方法都是错误的。
在HAL_UART.C中,定义了
uint8_t bdata SendFlag = FALSE;
sbit bSendFlag = SendFlag^0;
在HAL_UART.H中声明了
extern uint8_t bdata SendFlag ;
extern sbit bSendFlag;
结果在每个调用HAL_UART.H的C文件下都有一个中文意思大概是:在sbit附近有错误。

HAL_UART.H改成这样的话:
extern uint8_t bdata SendFlag ;
extern sbit bSendFlag = SendFlag^0;
还会增加一个错误:SendFlag不是有效的基地址

C51果然是挫
jswd0810
6楼-- · 2020-01-20 16:52
应该没有问题吧,我的定义
uchar bdata other_in;//此处other_in必须为bdata类型,否则编译出错
sbit mybit0=other_in^0;
sbit mybit1=other_in^1;
sbit mybit2=other_in^2;
sbit mybit3=other_in^3;
sbit mybit4=other_in^4;
sbit mybit5=other_in^5;
sbit mybit6=other_in^6;
sbit mybit7=other_in^7;

一周热门 更多>