SOGO論壇
標題:
arduino腳位宣告的問題?
[列印本頁]
作者:
nk931003
時間:
2013-3-17 01:48:59
標題:
arduino腳位宣告的問題?
小弟最近用arduino UNO寫按鈕控制LED的程式
雖然是完成了 但是有些問題讓我不解
程式:
int led=13;
int buttom=2;
int val=0;
void setup()
{
pinMode(buttom,INPUT);
pinMode(led,OUTPUT);
}
void loop()
{
val=digitalRead(butt);
if(val==HIGH)
{
delay(20);
digitalWrite(led,LOW);
}
else
{
digitalWrite(led,HIGH);
}
}
----------------------------------------
1.問題是小弟LED的接腳定義在13 是用
int led=13;
可是小弟又在其他書上看到
#defnie led 13;
請問這兩者有什麼不同嗎?
2.如果今天要將某感測器接至第0腳位
那不就變成
int sensor=0;
int val=0;
兩者不就衝突了嗎?
3.小弟以前學過一點C語言 記得
宣告變數可以不用給數值 如:
int x;
int y;
可是使用arduino寫這樣除錯時會產生錯誤
怎麼會這樣?
小弟是學機械的 程式設計基礎不好
問教授又說不清楚 所以想請各位大大幫忙解答
謝謝
作者:
alphi
時間:
2013-3-17 10:20:52
本帖最後由 alphi 於 2013-3-17 21:01 編輯
第一個問題
這兩種方式都可以,不過通常會使用第一組方式
#define LED 13
複製代碼
因為這種方式為Pre-Process ,當編譯器看到
PinMode(LED,Output);
複製代碼
會直接把LED 這個值取代為13,實際上為
PinMode(13,Output);
複製代碼
而且也不占記憶體空間(因為他只是把值取代)
第二種方式功能一樣,但是式動態執行或著看編譯器規則要怎麼定義,但是不管怎樣至少會在Stack中佔2Byte,對於嵌入式系統記憶體都是要很在乎例如
Microchip PIC10F320,RAM:64Byte,Flash: 512Byte.隨便使用就超過限制.如果使用浮點運算更是不行 得用一些方式來處理
另外針對I/O或著內部資源.就算要用變數最好前面加上
const int LED=13;
複製代碼
否則不小心改到值 永遠都查不到原因.當然有step by step trace ,不過要先熟悉工具
第二個問題
int sensor=0;
int val=0;
複製代碼
這兩個並不矛盾,例如
國文成績=60分
數學成績=60分
複製代碼
只是剛好你的值一樣.但不代表共用與衝突.除非未來您用到指標與union,enum這些就會遇到一些問題
第三個問題
int x;
int y;
複製代碼
一般來說的確C語言可允許變數不給初始值,頂多出現warring[警告],但是在嵌入式系統等編譯器是可以設定警告[Warring]視為錯誤[Error]
不管如何最好任何變數都給初始值最好.因為不同編譯器在處裡這種沒有初始值得變數有不同的做法例如
Keil RealView C compiler for ARM 會根據當時狀況指定值
Microchip XC8 Compiler 會將有給初始值得在某一個
memory block,沒給初始值得放在另一個區塊.在處理上會比較麻煩.所以最好不要相信Compiler 幫你做的動作.自己做最好
最後關於您問題三.應該是Ardunio 把Compiler 警告訊息等級調高吧
作者:
nk931003
時間:
2013-3-18 20:33:25
專業
雖然有些不是很懂
但是還是謝謝大大解答
歡迎光臨 SOGO論壇 (https://oursogo.com/)
Powered by OURSOGO.COM