发新帖我要提问
12
返回列表
打印
[C语言]

编译器不能理解我用sbit拼合位信息,还是有BUG?

[复制链接]
楼主: oufuqiang
手机看帖
扫描二维码
随时随地手机跟帖
21
oufuqiang 发表于 2021-6-10 11:23
用结构体规范,好移植,但是执行效率不见得高。
控制无刷电机的,效率很重要 ...

在keil C51里,位变量不能用在结构体和联合体。

使用特权

评论回复
22
逍遥派掌门| | 2021-6-22 09:54 | 只看该作者
oufuqiang 发表于 2021-6-10 11:22
补上变量类型已经解决,不是存不存在的问题

sbit 定义的符号是字节的某个位,一旦定义了,那就建立了一个固定的一一对应关系。
哪还来什么拼合位的说法? 先后的顺序都搞反了。

使用特权

评论回复
23
kcfoo1| | 2022-2-19 08:58 | 只看该作者
逍遥派掌门 发表于 2021-6-22 09:02
在keil C51里,位变量不能用在结构体和联合体。

呵呵,多去看看别人芯片的头文件,尤其是8位机的,

使用特权

评论回复
24
逍遥派掌门| | 2022-3-9 15:10 | 只看该作者
kcfoo1 发表于 2022-2-19 08:58
呵呵,多去看看别人芯片的头文件,尤其是8位机的,

嗯嗯,哪家的51芯片用keil 来编译,位变量能用在结构体和联合体的? 说来听听

使用特权

评论回复
25
24kdewhite| | 2022-3-10 09:01 | 只看该作者
没定义数据类型是语法错误,c是强类型语言,必须指定确定类型,即使是空也不能不确定,空也不等于void,bdata只是存储位置

使用特权

评论回复
26
gx_huang| | 2022-3-10 09:59 | 只看该作者
请参考我以下的代码,24个输出,定义成3字节,方便输出控制,可以位操作,也可以字节操作
//变量定义
//输出虚拟端口
uchar bdata OUT0_7 _at_ 0x20;
uchar bdata OUT8_15 _at_ 0x21;
uchar bdata OUT16_23 _at_ 0x22;
sbit OUT0=OUT0_7^0;        //可控硅过零输出控制加热桶加热1-8
sbit OUT1=OUT0_7^1;
sbit OUT2=OUT0_7^2;
sbit OUT3=OUT0_7^3;
sbit OUT4=OUT0_7^4;
sbit OUT5=OUT0_7^5;
sbit OUT6=OUT0_7^6;
sbit OUT7=OUT0_7^7;

sbit OUT8=OUT8_15^0;        //循环水泵
sbit OUT9=OUT8_15^1;        //压缩机
sbit OUT10=OUT8_15^2;        //防漏电
sbit OUT11=OUT8_15^3;        //水箱补水
sbit OUT12=OUT8_15^4;        //声光报警
sbit OUT13=OUT8_15^5;        //蠕动泵
sbit OUT14=OUT8_15^6;        //10路电磁阀阀组
sbit OUT15=OUT8_15^7;

sbit OUT16=OUT16_23^0;
sbit OUT17=OUT16_23^1;
sbit OUT18=OUT16_23^2;
sbit OUT19=OUT16_23^3;
sbit OUT20=OUT16_23^4;
sbit OUT21=OUT16_23^5;
sbit OUT22=OUT16_23^6;
sbit OUT23=OUT16_23^7;

使用特权

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

本版积分规则