|
|||||||||||
| 技術(shù)交流 | 電路欣賞 | 工控天地 | 數(shù)字廣電 | 通信技術(shù) | 電源技術(shù) | 測(cè)控之家 | EMC技術(shù) | ARM技術(shù) | EDA技術(shù) | PCB技術(shù) | 嵌入式系統(tǒng) 驅(qū)動(dòng)編程 | 集成電路 | 器件替換 | 模擬技術(shù) | 新手園地 | 單 片 機(jī) | DSP技術(shù) | MCU技術(shù) | IC 設(shè)計(jì) | IC 產(chǎn)業(yè) | CAN-bus/DeviceNe |
C51編程:變量問(wèn)題? |
| 作者:lhzw2001 欄目:單片機(jī) |
以前都沒(méi)發(fā)生的現(xiàn)像,今天再調(diào)時(shí)發(fā)現(xiàn),請(qǐng)問(wèn)為何? 如下測(cè)試程序: 用keil c51 (7.5版本) ,發(fā)現(xiàn),軟件仿真時(shí),count一直變(定時(shí)器還沒(méi)中斷)執(zhí)行了 delay后,它變化了,這是為何,如果不在中斷中引用count則沒(méi)事,請(qǐng)問(wèn)如何解決呢,我以 前都是這么用的,都沒(méi)出錯(cuò),這次就不行了? #include "reg52.h" static uint idata count ; /////******************** void delay(uint idata i); void main(void) { count=1; TMOD=0x01; TH0=(65536-1000)/256; TL0=(65536-1000)%256; EA=1; TR0=1; ET0=1;LED7=1; delay(100); // count被改變了? while(1) { LED7=~LED7; delay(500); } } void clk(void) interrupt 1 //using 1 去不去掉都一樣 { count++; TR0=0; TH0=(65536-1000)/256; TL0=(65536-1000)%256; if(count==500) {count=0; LED3=~LED3;} //測(cè)試一下是否能正常進(jìn)入中斷 TR0=1; } void delay(uint idata i) { uchar idata j; while (i--) {for (j=0;j<125;j++);} } |
| 2樓: | >>參與討論 |
| 作者: computer00 于 2006/7/15 15:03:00 發(fā)布:
你在程序里面用一下它,它就不會(huì)變了。 例如: while(1) { LED7=~LED7; delay(500); P0=count; } |
|
| 3樓: | >>參與討論 |
| 作者: xc_cz 于 2006/7/15 16:45:00 發(fā)布:
中斷里不是改了嗎? |
|
| 4樓: | >>參與討論 |
| 作者: xzhenggen 于 2006/7/15 17:18:00 發(fā)布:
不想改變就不要用STATIC變量類(lèi)型. |
|
| 5樓: | >>參與討論 |
| 作者: lhzw2001 于 2006/7/17 8:29:00 發(fā)布:
我重裝了一下keil ,問(wèn)題解決了,感謝各位關(guān)注。 |
|
| 6樓: | >>參與討論 |
| 作者: 農(nóng)民講習(xí)所 于 2006/7/17 9:51:00 發(fā)布:
會(huì)被改變,概率不小 將count該為uchar就不會(huì)被改變,而uint以上類(lèi)型會(huì)。至于為什么,你可以先想想在中斷的瞬間可能發(fā)生的事情,在匯編代碼中看。 |
|
| 7樓: | >>參與討論 |
| 作者: awey 于 2006/7/17 9:58:00 發(fā)布:
computer00的意思是不是count被編譯器優(yōu)化掉了? |
|
| 8樓: | >>參與討論 |
| 作者: 平常人 于 2006/7/17 10:03:00 發(fā)布:
加上一個(gè)volatile試試 關(guān)于volatile的討論已經(jīng)很多了,我就不在此畫(huà)蛇添足啦。 |
|
| 9樓: | >>參與討論 |
| 作者: computer00 于 2006/7/18 1:12:00 發(fā)布:
是啊,有時(shí)編譯器會(huì)幫你做一些優(yōu)化,特別是后面不使用的變量 不過(guò)全局變量在keil中似乎不怎么會(huì)優(yōu)化掉的。 |
|
|
|
| 免費(fèi)注冊(cè)為維庫(kù)電子開(kāi)發(fā)網(wǎng)會(huì)員,參與電子工程師社區(qū)討論,點(diǎn)此進(jìn)入 |
Copyright © 1998-2006 m.58mhw.cn 浙ICP證030469號(hào) |