全國最多中醫師線上諮詢網站-台灣中醫網
發文 回覆 瀏覽次數:1703
推到 Plurk!
推到 Facebook!

keil c在單步執行的時後出問題

答題得分者是:rick060
scott123
中階會員


發表:19
回覆:66
積分:52
註冊:2011-08-11

發送簡訊給我
#1 引用回覆 回覆 發表時間:2011-08-12 12:12:49 IP:203.73.xxx.xxx 訂閱

請問各位
我c寫了一個程式
在單步執行完第33行a--之後
再下一單步執行的理應來講應該是第34行的dec
可是它卻執行第38行
後來我打開了disassembly看,發現它是這樣
是不是這一邊出了問題
kib72377
高階會員


發表:1
回覆:217
積分:238
註冊:2004-11-12

發送簡訊給我
#2 引用回覆 回覆 發表時間:2011-08-12 12:23:24 IP:125.233.xxx.xxx 未訂閱
dec是不是保留字?
scott123
中階會員


發表:19
回覆:66
積分:52
註冊:2011-08-11

發送簡訊給我
#3 引用回覆 回覆 發表時間:2011-08-12 12:29:42 IP:203.73.xxx.xxx 訂閱
等一下我再查dec是不是保留字
不過我在rebuild的時後,沒有error
我也將dec改成b,同樣問題
rick060
高階會員


發表:2
回覆:112
積分:217
註冊:2009-11-17

發送簡訊給我
#4 引用回覆 回覆 發表時間:2011-08-12 12:42:26 IP:60.250.xxx.xxx 未訂閱
 optimize?

就 code 來看,dec 沒意義,compiler 就會略過


if(dec=10) // 恆成立..
;

compiler 會改成 if(1)
;
編輯記錄
rick060 重新編輯於 2011-08-11 22:44:50, 註解 無‧
rick060 重新編輯於 2011-08-11 23:30:47, 註解 無‧
scott123
中階會員


發表:19
回覆:66
積分:52
註冊:2011-08-11

發送簡訊給我
#5 引用回覆 回覆 發表時間:2011-08-12 12:59:25 IP:203.73.xxx.xxx 訂閱
dec++沒意義?
請問是什麼意思
我的程式是要把一個16進制轉成10進制
假設我的16進制是a
dec是10進制的個位數,dec10是10進制的十位數 (先假設dec不是保留字)
我每a減一次,dec就 1,如果滿十dec10就進位,直到a為0
這樣子寫語法有問題嗎?
===================引 用 rick060 文 章===================
optimize?

就 code 來看,dec 沒意義,compiler 就會略過


if(dec=0) //恆成立..
;

compiler 會改成 if(1)
;
rick060
高階會員


發表:2
回覆:112
積分:217
註冊:2009-11-17

發送簡訊給我
#6 引用回覆 回覆 發表時間:2011-08-12 13:20:07 IP:60.250.xxx.xxx 未訂閱
 我的重點在這

if(dec=10) // 恆成立..
編輯記錄
rick060 重新編輯於 2011-08-11 23:23:54, 註解 眼殘..‧
scott123
中階會員


發表:19
回覆:66
積分:52
註冊:2011-08-11

發送簡訊給我
#7 引用回覆 回覆 發表時間:2011-08-12 13:21:46 IP:203.73.xxx.xxx 訂閱
sorry
我的程式是
if(dec=10)
===================引 用 rick060 文 章===================
我的重點在這

恆成立..
scott123
中階會員


發表:19
回覆:66
積分:52
註冊:2011-08-11

發送簡訊給我
#8 引用回覆 回覆 發表時間:2011-08-12 13:47:08 IP:203.73.xxx.xxx 訂閱
抱歉
可能我的問題問得不夠清楚
我的問題是為什麼keil 把c轉成組語的時後
第34行的dec 和第36行的if(dec=10)都沒轉呢
就直接跳過
而造成單步執行沒有執行到

之前我在寫別的程式的時後也有遇到這一個問題
rick060
高階會員


發表:2
回覆:112
積分:217
註冊:2009-11-17

發送簡訊給我
#9 引用回覆 回覆 發表時間:2011-08-12 14:12:10 IP:60.250.xxx.xxx 未訂閱
1.因為你是寫單晶片,故我預設 compiler 有 開啟最佳化,相關資料可至 http://en.wikipedia.org/wiki/Compiler_optimization
它不是"問題",而是經過最佳化得到的結果
例程式(1)
int main()
{
int a,b,c;
a = 10;
b = 20;
c = 30;
printf("%d",a b);
}
明顯變數 c 沒用到,雖然已有 assign 但沒有"應用",compiler 就會直接把 c 省略來節省記憶體空間,因靜態變數會佔 stack 空間
例程式(2)
int main()
{
int a;
if( a = 10 )
printf("This is always be shown");
}
if 判斷 (a = 10) 為恆成立..,故 compiler 就會直接把這行判斷改成 if(1) ,而省去 asm opcode 的開銷
2.
是 if(dec == 10)
還是 if(dec = 10)
scott123
中階會員


發表:19
回覆:66
積分:52
註冊:2011-08-11

發送簡訊給我
#10 引用回覆 回覆 發表時間:2011-08-12 14:24:59 IP:203.73.xxx.xxx 訂閱
rick 謝謝
找到問題了,原來是dec=10寫錯了,要寫==

原來keil會有這麼人性化的設定
謝謝,又上了一課
系統時間:2024-04-26 18:52:29
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!