|
|||||||||||
| 技術(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 |
C語(yǔ)言的疑惑(PICC18) |
| 作者:hzh 欄目:單片機(jī) |
程序1: void main(void) { CHAR cmd = 0, x = 0; cmd = 0x40; //問(wèn)題就在這地方 。。。。 } 程序2: CHAR cmd = 0, x = 0; void main(void) { cmd = 0x40; //問(wèn)題就在這地方 。。。。 } 程序1怎么看我都不覺(jué)得有問(wèn)題,可結(jié)果卻是 cmd = 0x40 過(guò)后,cmd的值不是0x40,有時(shí)是個(gè)0x90,有時(shí)是個(gè)0x22,不定,奇怪。。。但是換成程序2后,就是對(duì)的了,怎么回事呀,急盼回復(fù)?! 我用的是PICC18,PIC18F452,icd2。 頭一次不用匯編寫程序,沒(méi)想到剛開(kāi)頭就。。。。哎~~~ |
| 2樓: | >>參與討論 |
| 作者: netscaner 于 2006/6/28 22:24:00 發(fā)布:
不解 * - 本貼最后修改時(shí)間:2006-6-28 22:27:29 修改者:netscaner |
|
| 3樓: | >>參與討論 |
| 作者: computer00 于 2006/6/28 23:29:00 發(fā)布:
應(yīng)該是cmd被優(yōu)化掉了。 |
|
| 4樓: | >>參與討論 |
| 作者: 艾森豪威爾 于 2006/6/29 12:39:00 發(fā)布:
什么編譯器,這么隨便就優(yōu)化掉局部變量? * - 本貼最后修改時(shí)間:2006-6-29 12:40:02 修改者:艾森豪威爾 |
|
| 5樓: | >>參與討論 |
| 作者: computer00 于 2006/6/29 13:40:00 發(fā)布:
如果你后面沒(méi)用到cmd,被優(yōu)化掉很正常啊。 |
|
| 6樓: | >>參與討論 |
| 作者: frank95 于 2006/6/29 16:42:00 發(fā)布:
不解 肯定是其他地方用了,所以出現(xiàn)錯(cuò)誤 |
|
| 7樓: | >>參與討論 |
| 作者: hzh 于 2006/6/29 22:30:00 發(fā)布:
我在 PIC 單片機(jī)做了進(jìn)一步說(shuō)明。 希望朋友們多幫忙,做個(gè)東西不容易呀~~~ 謝謝啦。 |
|
| 8樓: | >>參與討論 |
| 作者: jx119 于 2006/6/30 7:16:00 發(fā)布:
應(yīng)該是全局變量與局部變量之分 |
|
| 9樓: | >>參與討論 |
| 作者: yuppie 于 2006/6/30 12:46:00 發(fā)布:
主程序中還有用到cmd的嗎?show 一下。 |
|
| 10樓: | >>參與討論 |
| 作者: 2shift 于 2006/6/30 16:32:00 發(fā)布:
同意樓上! |
|
| 11樓: | >>參與討論 |
| 作者: kingsr 于 2006/6/30 19:15:00 發(fā)布:
^_^ 全貼出來(lái)看看 |
|
| 12樓: | >>參與討論 |
| 作者: hzh 于 2006/6/30 20:18:00 發(fā)布:
幫幫忙呀,做個(gè)東西不容易呀~~ 為了驗(yàn)證我的想法,我把程序簡(jiǎn)化到了如此地步, 其余的內(nèi)容全被我注釋掉了,picc中的C Compiler 優(yōu)化級(jí)別為0。 程序1: #include <pic18.h> void WriteCmd(CHAR cmd); void main(void) { CHAR cmd = 0, x = 0; cmd = 0x40; //問(wèn)題就在這地方 while(1) { asm("nop"); WriteCmd(cmd); } } void WriteCmd(CHAR x) { ////// } //////////////////////// 程序2只是將 CHAR cmd = 0, x = 0; 移到了main()之外做了全局變量。 程序1,cmd賦值失敗,cmd的值不是0x40; 程序2運(yùn)行后,cmd的值就是0x40; 以上的結(jié)論是用ICD2調(diào)試時(shí)的結(jié)果。 另外,Simulator中,都是正確的。 |
|
| 免費(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) |