[問題] 請問宣告變數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