單片機(jī)編程初學(xué)者之主函數(shù)的特點(diǎn)
在給一些單片機(jī)初學(xué)者解答問題的時(shí)候,我發(fā)現(xiàn)了一個(gè)現(xiàn)象,可能是因?yàn)槭艿诫娔X上學(xué)習(xí)C程序設(shè)計(jì)的影響,很多人會(huì)寫出類似這樣的程序:
[cpp] view plain copy#include
void main()
{
P1=0x00;
}
或者是這樣的程序
[cpp] view plain copy#include
int main()
{
P1=0xab;
return 0;
}
如果是在電腦上運(yùn)行類似這樣的程序,程序執(zhí)行結(jié)束,控制權(quán)交給系統(tǒng),有返回值的返回給系統(tǒng),是完全可行的,但是在單片機(jī)上就不一樣了,對(duì)于不依靠操作系統(tǒng)的單片機(jī)程序,main函數(shù)就是操作系統(tǒng),應(yīng)該是不能終止運(yùn)行的,而應(yīng)該是一個(gè)while(1)死循環(huán)。
沒有加while(1)的程序執(zhí)行結(jié)束會(huì)出現(xiàn)不可預(yù)知的結(jié)果(具體要根據(jù)匯編語言PC指針指向的位置判斷),也就是程序跑飛。
雖然實(shí)際上用的時(shí)候STC單片機(jī)會(huì)循環(huán)執(zhí)行程序(執(zhí)行結(jié)束單片機(jī)復(fù)位,所有變量重置),但這個(gè)在芯片手冊(cè)中并沒有給出官方說明,所以并不一定總能如此。
單片機(jī)程序執(zhí)行終止,這樣就會(huì)大大降低可靠性。試想你的單片機(jī)在控制一臺(tái)大型機(jī)器,如果發(fā)生不可預(yù)知的結(jié)果,后果很嚴(yán)重;如果你的手表是單片機(jī),程序停止運(yùn)行會(huì)怎樣?就停止顯示了;如果電腦的操作系統(tǒng)運(yùn)行終止(關(guān)機(jī)除外),也會(huì)出現(xiàn)問題。
所以單片機(jī)的程序必然是一個(gè)死循環(huán),一般都會(huì)有while(1),另外不需要有返回值,形如下面兩種情況。
[cpp] view plain copy#include
void main()
{
P1=0x00;
while(1);
}
[cpp] view plain copy#include
void main()
{
while(1) {
P1=0x00;
}
}
編輯:admin 最后修改時(shí)間:2018-05-18