- 註冊時間
- 2004-10-30
- 最後登錄
- 2024-7-27
- 主題
- 查看
- 積分
- 265
- 閱讀權限
- 50
- 文章
- 219
- 相冊
- 0
- 日誌
- 0
狀態︰
離線
|
本帖最後由 alphi 於 2013-3-17 21:01 編輯
第一個問題
這兩種方式都可以,不過通常會使用第一組方式因為這種方式為Pre-Process ,當編譯器看到會直接把LED 這個值取代為13,實際上為而且也不占記憶體空間(因為他只是把值取代)
第二種方式功能一樣,但是式動態執行或著看編譯器規則要怎麼定義,但是不管怎樣至少會在Stack中佔2Byte,對於嵌入式系統記憶體都是要很在乎例如
Microchip PIC10F320,RAM:64Byte,Flash: 512Byte.隨便使用就超過限制.如果使用浮點運算更是不行 得用一些方式來處理
另外針對I/O或著內部資源.就算要用變數最好前面加上否則不小心改到值 永遠都查不到原因.當然有step by step trace ,不過要先熟悉工具
第二個問題這兩個並不矛盾,例如只是剛好你的值一樣.但不代表共用與衝突.除非未來您用到指標與union,enum這些就會遇到一些問題
第三個問題一般來說的確C語言可允許變數不給初始值,頂多出現warring[警告],但是在嵌入式系統等編譯器是可以設定警告[Warring]視為錯誤[Error]
不管如何最好任何變數都給初始值最好.因為不同編譯器在處裡這種沒有初始值得變數有不同的做法例如
Keil RealView C compiler for ARM 會根據當時狀況指定值
Microchip XC8 Compiler 會將有給初始值得在某一個
memory block,沒給初始值得放在另一個區塊.在處理上會比較麻煩.所以最好不要相信Compiler 幫你做的動作.自己做最好
最後關於您問題三.應該是Ardunio 把Compiler 警告訊息等級調高吧
|
|