[问题] 请问宣告变量bit数的问题

楼主: IOP14759 (iop14759)   2018-12-06 17:10:50
开发平台(Platform): (Ex: Win10, Linux, ...)
mplab
编译器(Ex: GCC, clang, VC++...)+目标环境(跟开发平台不同的话需列出)
MPLAB XC8 C Compiler
问题(Question):
mcu的ram塞不下想省空间把int改成char
错误结果(Wrong Output):
原本宣告int的程式正常,改成char后就会误动作
程式码(Code):(请善用置底文网页, 记得排版,禁止使用图档)
//我宣告了int变量的阵列和long的变量
unsigned short int ck=0;
unsigned int abit[25],cbit[25],dbit[25],ebit[25],i;
unsigned long i1=0,j1=0,k1=0,m1=0,n1=0,bita;
//我在收CODE的时候是一个BIT一个BIT塞进long的变量内
void interrupt ISR(void) //rise edge
{
if(INTF)//external interrupt INTF=1
{
if(RB2==0 && ck<24)//ce=0
{
//CK=1 RISE EDGE
i=RB1;
i1=(i1<<1)+i;
ck++;
}
}
}
//收完code后再把long变量一个一个bit塞到int的阵列内
void HEX_TO_BIN_i()
{
bita=i1&0x800000;
dbit[0]=bita>>23;
bita=i1&0x400000;
dbit[1]=bita>>22;
bita=i1&0x200000;
dbit[2]=bita>>21;
bita=i1&0x080000;
dbit[4]=bita>>19;
bita=i1&0x040000;
dbit[5]=bita>>18;
bita=i1&0x020000;
dbit[6]=bita>>17;
bita=i1&0x010000;
dbit[7]=bita>>16;
}
//最后根据阵列对应0或1来送我要的波型
void SEND_CODE()//800K
{
if(dbit[7]==0x01) {RC1=1;RC1=1;RC1=1;RC1=1;RC1=0;} else {RC1=1;RC1=0;}
if(dbit[6]==0x01) {RC1=1;RC1=1;RC1=1;RC1=1;RC1=0;} else {RC1=1;RC1=0;}
if(dbit[5]==0x01) {RC1=1;RC1=1;RC1=1;RC1=1;RC1=0;} else {RC1=1;RC1=0;}
if(dbit[4]==0x01) {RC1=1;RC1=1;RC1=1;RC1=1;RC1=0;} else {RC1=1;RC1=0;}
if(dbit[3]==0x01) {RC1=1;RC1=1;RC1=1;RC1=1;RC1=0;} else {RC1=1;RC1=0;}
if(dbit[2]==0x01) {RC1=1;RC1=1;RC1=1;RC1=1;RC1=0;} else {RC1=1;RC1=0;}
if(dbit[1]==0x01) {RC1=1;RC1=1;RC1=1;RC1=1;RC1=0;} else {RC1=1;RC1=0;}
if(dbit[0]==0x01) {RC1=1;RC1=1;RC1=1;RC1=1;RC1=0;} else {RC1=1;RC1=0;}
}
补充说明(Supplement):
阵列变量用int都能正常动作,出来的波型都正确
我想请教一下,照理说我阵列内的每个变量只需要用到1BIT
可是当我为了省空间把int改成char之后出来的波形就出错了
整个程式没变只int->char,但是只会用到=0或=1
我实在想不清楚char有8个bit放一个0或1应该绰绰有余啊?
作者: commandoEX (卡曼都)   2018-12-06 19:34:00
那干脆改成boolean? if 内还不用判断式
作者: chuegou (chuegou)   2018-12-06 23:01:00
这样呢 dbit[0]=(char)(bita >>23)
作者: Lipraxde (Lipraxde)   2018-12-06 23:59:00
我感觉啊,那个 i ,放在全域变量是不是有点危险?
作者: BaJiaJhon (BaJiaJhon)   2018-12-08 18:14:00
mcu是几位元系统,int与char分别是几bits呢
作者: a16450 (a16450)   2018-12-13 00:04:00
试试看 struct与union把结构做成你要的资料长度

Links booklink

Contact Us: admin [ a t ] ucptt.com