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

[复制链接]
5008|25
逍遥派掌门 发表于 2021-6-22 09:02 | 显示全部楼层
oufuqiang 发表于 2021-6-10 11:23
用结构体规范,好移植,但是执行效率不见得高。
控制无刷电机的,效率很重要 ...

在keil C51里,位变量不能用在结构体和联合体。
逍遥派掌门 发表于 2021-6-22 09:54 | 显示全部楼层
oufuqiang 发表于 2021-6-10 11:22
补上变量类型已经解决,不是存不存在的问题

sbit 定义的符号是字节的某个位,一旦定义了,那就建立了一个固定的一一对应关系。
哪还来什么拼合位的说法? 先后的顺序都搞反了。
kcfoo1 发表于 2022-2-19 08:58 | 显示全部楼层
逍遥派掌门 发表于 2021-6-22 09:02
在keil C51里,位变量不能用在结构体和联合体。

呵呵,多去看看别人芯片的头文件,尤其是8位机的,
逍遥派掌门 发表于 2022-3-9 15:10 | 显示全部楼层
kcfoo1 发表于 2022-2-19 08:58
呵呵,多去看看别人芯片的头文件,尤其是8位机的,

嗯嗯,哪家的51芯片用keil 来编译,位变量能用在结构体和联合体的? 说来听听
24kdewhite 发表于 2022-3-10 09:01 | 显示全部楼层
没定义数据类型是语法错误,c是强类型语言,必须指定确定类型,即使是空也不能不确定,空也不等于void,bdata只是存储位置
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;
您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 在线客服 返回列表 返回顶部