作者IOP14759 (iop14759)
看板C_and_CPP
标题[问题] 请问宣告变数bit数的问题
时间Thu Dec 6 17:10:50 2018
开发平台(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应该绰绰有余啊?
--
※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 60.248.158.217
※ 文章网址: https://webptt.com/cn.aspx?n=bbs/C_and_CPP/M.1544087455.A.410.html
1F:→ commandoEX: 那乾脆改成boolean? if 内还不用判断式 12/06 19:34
2F:推 chuegou: 这样呢 dbit[0]=(char)(bita >>23) 12/06 23:01
3F:→ Lipraxde: 我感觉啊,那个 i ,放在全域变数是不是有点危险? 12/06 23:59
4F:→ BaJiaJhon: mcu是几位元系统,int与char分别是几bits呢 12/08 18:14
5F:推 a16450: 试试看 struct与union把结构做成你要的资料长度 12/13 00:04