|
|||||||||||
| 技術交流 | 電路欣賞 | 工控天地 | 數(shù)字廣電 | 通信技術 | 電源技術 | 測控之家 | EMC技術 | ARM技術 | EDA技術 | PCB技術 | 嵌入式系統(tǒng) 驅動編程 | 集成電路 | 器件替換 | 模擬技術 | 新手園地 | 單 片 機 | DSP技術 | MCU技術 | IC 設計 | IC 產(chǎn)業(yè) | CAN-bus/DeviceNe |
在gcc中有的語句為什么不執(zhí)行? |
| 作者:GD_liu 欄目:單片機 |
用GCC做一個項目,編譯選項為s,在執(zhí)行中發(fā)現(xiàn)有多處賦值語句不執(zhí)行,造成執(zhí)行錯誤,如何避免?從早上查問題,查到現(xiàn)在,也沒找到原因,請網(wǎng)友協(xié)助。例: ucTemp1 = ucTemp2; //語句1 if (ucTemp1 = ucTemp3) { ... } 結果語句1不執(zhí)行,造成下面判斷錯誤,在程序中多處出現(xiàn)這樣的問題。以前也用GCC,還沒發(fā)現(xiàn)這樣。 |
| 2樓: | >>參與討論 |
| 作者: DEF 于 2004/12/21 0:51:00 發(fā)布:
加上下面語句試試 volatile ucTemp1; |
|
| 3樓: | >>參與討論 |
| 作者: AA55 于 2004/12/21 8:42:00 發(fā)布:
if (ucTemp1 = ucTemp3)? ucTemp1 = ucTemp3? 這是說,想把ucTemp3復制給ucTemp1,然后判定ucTemp1是否不為0,如果非0就執(zhí)行{}的內容? 你的原意該不會如此吧? |
|
| 4樓: | >>參與討論 |
| 作者: zsmbj 于 2004/12/21 8:56:00 發(fā)布:
if (ucTemp1 = ucTemp3)?呵呵! 應該是if (ucTemp1 == ucTemp3)吧! |
|
| 5樓: | >>參與討論 |
| 作者: John_Lee 于 2004/12/21 9:11:00 發(fā)布:
應該面壁 |
|
| 6樓: | >>參與討論 |
| 作者: Anitya 于 2004/12/21 9:27:00 發(fā)布:
面壁?!~~~ |
|
| 7樓: | >>參與討論 |
| 作者: GD_liu 于 2004/12/21 10:21:00 發(fā)布:
樓上的幾位朋友,是手誤,敲錯了 我現(xiàn)在在前面加上volatile,語句得到了執(zhí)行,但我程序很多地方都是這樣,難道都需要加volatile嗎?GCC的高效率不是這樣得到執(zhí)行吧。 if (ucTemp1 == ucTemp3) 上面是敲錯了 |
|
| 8樓: | >>參與討論 |
| 作者: winsu 于 2004/12/21 11:44:00 發(fā)布:
GCC其實比較嚴格 你所說的問題與優(yōu)化選項可能有關。 GCC要求語法比較嚴格,比標準C嚴格一些. 例如void fuc()時編譯時會有警告.寫成void fuc(void)則沒有警告。 |
|
| 9樓: | >>參與討論 |
| 作者: 老蔣 于 2004/12/21 17:22:00 發(fā)布:
不到萬不得已的情況下不用去懷疑編譯器 一個編譯器之所以能被大家使用,就證明它是可靠的。有錯誤先確認自己的程序,或是語法不符,或是有些細節(jié)還不清楚等等。到現(xiàn)在為止,我做的所有項目沒有一個是因編譯器或匯編器有問題而引發(fā)錯誤的。 |
|
| 10樓: | >>參與討論 |
| 作者: qjy_dali 于 2004/12/21 20:43:00 發(fā)布:
要注意各個編譯器的個性特點呀 |
|
| 11樓: | >>參與討論 |
| 作者: GD_liu 于 2004/12/21 23:39:00 發(fā)布:
我也有這樣的看法 我一直也有這樣的看法,以前我用GCC也一直正常,也只是這個項目中一直遇到莫名其秒的問題,現(xiàn)在有出一個: uint8_t i; uint16_t j; for (i = 0;i < 10; i++) { for (j = 0;j < 60000;j++) ; } 以上為開機的一個延時程序,原來一直正常,今天再編譯運行時,程序就死到這了,程序執(zhí)行不下去,由于沒有仿真器,也不知道結果。但將上面的語句屏蔽,板子就運行正常。 |
|
| 12樓: | >>參與討論 |
| 作者: DEF 于 2004/12/22 4:35:00 發(fā)布:
主要是編譯器優(yōu)化問題 GCC比較聰明,如果它發(fā)現(xiàn)用戶變量執(zhí)行的是一些無必要的代碼,就會被優(yōu)化調。 象循環(huán)延時代碼,就會被誤認為不必要代碼,會被優(yōu)化調。 如果你一直正?赡苁莾(yōu)化選項問題了。 |
|
| 13樓: | >>參與討論 |
| 作者: gxliangx 于 2005/1/12 1:20:00 發(fā)布:
DEF說的有道理 我嘗試在代碼中加如 float i; i=3.0*2.3; 然后編譯.在 lss文件中看不到有這段代碼的編譯.你可以嘗試修改makefile中 的CFLAG的 -O選項.把優(yōu)化級別改的最低.再重新編譯試試. |
|
| 14樓: | >>參與討論 |
| 作者: 9810956 于 2005/1/12 18:52:00 發(fā)布:
RE ucTemp1 = ucTemp2; //語句1 if (ucTemp1 = =ucTemp3) { ... } 這正是GCC聰明之處。 是我程序寫成 if (ucTemp2 = =ucTemp3) { ... } |
|
| 15樓: | >>參與討論 |
| 作者: HotPower 于 2005/1/12 18:58:00 發(fā)布:
郁悶...想用C++編程,但不能源碼仿真... GCC好,可其他"外圍設備速率"太低...只好用C了... 可惜GCC的類了... |
|
| 16樓: | >>參與討論 |
| 作者: sleepcat 于 2005/1/13 14:37:00 發(fā)布:
我遇到過,醬紫地: 這個發(fā)生在優(yōu)化級別較高的時候, 而且你要比較的兩個東西是百分之百相等的東西,所以編譯器幫你優(yōu)化掉了 你可以看ASM代碼 |
|
|
|
| 免費注冊為維庫電子開發(fā)網(wǎng)會員,參與電子工程師社區(qū)討論,點此進入 |
Copyright © 1998-2006 m.58mhw.cn 浙ICP證030469號 |