打印

c编程都容易出现哪些错误使其不能编译

[复制链接]
554|21
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
langgq|  楼主 | 2019-7-20 16:24 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
c编程都容易出现哪些错误使其不能编译

使用特权

评论回复
沙发
wangzsa| | 2019-7-20 16:28 | 只看该作者
楼主程序可以公开吗?贴程序看下吧,这么说看不出什么原因

使用特权

评论回复
板凳
langgq|  楼主 | 2019-7-20 16:31 | 只看该作者


sbit h_bit=com_data^7;
     sbit l_bit=com_data^0;这段代码总提示出错不能编译,用kiel编译

使用特权

评论回复
地板
lium| | 2019-7-20 16:41 | 只看该作者
可能 com_data 需要定义在位变量区才能引用它的某个位吧.

使用特权

评论回复
5
langgq|  楼主 | 2019-7-20 16:43 | 只看该作者
com_data我定义完了“bdata uchar com_deta;”

使用特权

评论回复
评论
knk 2019-8-6 15:44 回复TA
com_data还是com_deta? 
6
langgq|  楼主 | 2019-7-20 16:47 | 只看该作者

"bit是在20h~2fh空间分配的,sbit其实是给特殊功能位取别名" 书上的话。其实我也不太懂,
也许把sbit换成bit就没错了。没安装KEIL,试不了。

使用特权

评论回复
7
wangzsa| | 2019-7-20 16:50 | 只看该作者
sfr     表示声明特殊功能寄存器,比如sfr    P0  =  0x80;表示P0端口的地址是0x80,这个sfr可以理解成特殊功能寄存取别名也好。

使用特权

评论回复
8
zhuww| | 2019-7-20 16:55 | 只看该作者

这个时候,我们sbit     P01   =   P0^1;表示  P0口的8位中的第二位。
当然,我们不能bit     P01   =  P0^1;因为sbit表示声明位地址,而bit是定义位变量。

bdata   为RAM中0x20~0x30的空间,这个空间可以位寻址,一般来说,定义位变量就定义在这里。
bdata   uchar  com_deta;真不明白,为什么在位寻址区定义字节变量?RAM中0x30~0x80(data   uchar ----)是字节可寻址区,为什么不定义到这里呢?

使用特权

评论回复
9
zhanglli| | 2019-7-20 17:26 | 只看该作者
建议你多看看单片机内部空间原理,为什么区分这些空间定义呢,空间定义的不同,寻址方式也不同,速度快或指令时间多少等问题,书上解释很多。

使用特权

评论回复
10
guoyt| | 2019-7-20 17:29 | 只看该作者

com_deta是一个变量,而不是一个地址,所以不能声明位地址。

使用特权

评论回复
11
hanwe| | 2019-7-20 17:33 | 只看该作者


我想编一个AT24C02驱动程序用到了位,那吧他定义为 data  uchar com_data呗!

使用特权

评论回复
12
wangpe| | 2019-7-20 17:36 | 只看该作者


不行!

使用特权

评论回复
13
wangzsa| | 2019-7-20 17:41 | 只看该作者

这个时候,我们sbit     P01   =   P0^1;表示  P0口的8位中的第二位。
当然,我们不能bit     P01   =  P0^1;因为sbit表示声明位地址,而bit是定义位变量。

bdata   为RAM中0x20~0x30的空间,这个空间可以位寻址,一般来说,定义位变量就定义在这里。
bdata   uchar  com_deta;真不明白,为什么在位寻址区定义字节变量?RAM中0x30~0x80(data   uchar ----)是字节可寻址区,为什么不定义到这里呢?

使用特权

评论回复
14
lium| | 2019-7-20 17:45 | 只看该作者

建议你多看看单片机内部空间原理,为什么区分这些空间定义呢,空间定义的不同,寻址方式也不同,速度快或指令时间多少等问题,书上解释很多。

使用特权

评论回复
15
yufe| | 2019-7-20 17:52 | 只看该作者
com_deta是一个变量,而不是一个地址,所以不能声明位地址。

使用特权

评论回复
16
lizye| | 2019-7-20 17:55 | 只看该作者
看看汇编程序的书吧,学汇编这一点是必须知道的

使用特权

评论回复
17
wangzsa| | 2019-7-20 17:58 | 只看该作者
bdata uchar com_deta;
sbit h_bit=com_data^7;
sbit l_bit=com_data^0;
这样定义是没错的,出错应该是其他地方引起的

使用特权

评论回复
评论
knk 2019-8-6 15:45 回复TA
你这样不出错才怪了,上面上com_deta,下面是com_data,能不出错吗?编译器可不好糊弄。 
18
zhuww| | 2019-7-20 18:01 | 只看该作者
unsigned char bdata com_data;
sbit k1=com_data^0;

这个是可以的,不过要在函数外定义为全局变量,不能在将其在函数内定义为局部变量.

使用特权

评论回复
19
lium| | 2019-7-20 18:04 | 只看该作者


是不是缺少头包含文件!

使用特权

评论回复
20
langgq|  楼主 | 2019-7-20 18:07 | 只看该作者
其实还是不大明白,我再琢磨琢磨吧,多谢了哈,结贴了先

使用特权

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

本版积分规则

932

主题

8762

帖子

1

粉丝