本人寫程序已有很多年,寫程序時就相當注意程序格式,但我還是栽在這上面了.
本人程序出現(xiàn)debug,花了很多天都沒找到,最后使用最笨的辦法,用studio進行每條指令跟蹤,終于發(fā)現(xiàn)問題所在.
由于本人是匯編和C混合編程,為充分保持定義的一致辭性,我盡量使用相同的.h文檔,這種方法是對的,只是我的匯編在編譯時要注明是assember-with-cpp.
我的匯編程序如下:
......
#define VOICE 1 ;this is voice address
......
ldi r30, VOICE+1
......
一般我們不會認為這是錯誤, 很顯然,";"是匯編的注釋, #define是C語言的預處理,雖然在匯編中使用C的預處理能帶來很多好處,但我們還是應該盡量不要糾纏到一起,這就是編程風格問題.上述我的錯誤就是這樣,C語言的預處理器會將VOICE換成" 1 ;this is voice address", 注意,C是不懂";"注釋的,最后編譯的結(jié)果就是
ldi r30, 1
而不是我所期望的ldi r30,2
而且編譯程序不會報告任何錯誤,從語法上它是正確的.而且在debug時帶來的錯誤是災難的,因為它很難找到,人的特點就是不會去注意"理所當然是正確的"東西.
其實我只要將上述的匯編";"注釋換成C的"http://"注釋就什么問題都沒有了,在一行中保持同樣的C風格是多么的重要啊.