|
本帖最后由 水漫金山2017 于 2019-12-3 09:00 編輯
單片機(jī)又稱微控制器,其工作原理與PC機(jī)相似,也就是存儲(chǔ)程序和程序控制的工作方式。這里的程序有可能是匯編語(yǔ)言也有可能是C語(yǔ)言,但這里我們即將要討論的不是用哪種語(yǔ)言編寫(xiě)程序的問(wèn)題。我想和大家討論的是一種程序設(shè)計(jì)模式,也就是討論一下單片機(jī)程序設(shè)計(jì)中的一種比較通用,合理的方法。當(dāng)然了,這里還是以C語(yǔ)言程序設(shè)計(jì)作為例程。我們都知道,從微觀上來(lái)講,CPU只能一條條的執(zhí)行指令。(這里為方便討論問(wèn)題,有可能不區(qū)分指令和程序)。也就是說(shuō),在微觀上來(lái)講,CPU在某一個(gè)時(shí)刻,只能執(zhí)行一個(gè)指令動(dòng)作,這是我們要明白的第一點(diǎn)。第二點(diǎn),我們還要知道單片機(jī)中還有一個(gè)特別好的運(yùn)行機(jī)制,那就是中斷。中斷可以讓任勞任怨的CPU專注于眼前的事情,而不必時(shí)刻“擔(dān)心”著“突然事件”。待到“突然事件”發(fā)生,CPU再轉(zhuǎn)頭去處理。還有一點(diǎn),我們要明白,那就是單片機(jī)的主頻越高,指令執(zhí)行的越快。(當(dāng)然了,頻率高帶來(lái)的附作用,也不是我們這篇文章要討論的)。知道了以上三點(diǎn),我們現(xiàn)在就開(kāi)始有關(guān)文章主題的討論。
平時(shí)生活中,我們經(jīng)常用快慢這兩個(gè)字。比如說(shuō),這個(gè)人做事真快,吃飯也快,寫(xiě)程序也快,總之吃喝拉撒,衣食住行都快。那么一個(gè)人做事快,有什么好處呢?很明顯,節(jié)約時(shí)間,能處理更多的事情,看起來(lái)像是很多事情同時(shí)做了一樣。慢,則一切相反。對(duì)單片機(jī)這種MHZ頻率的機(jī)器來(lái)講,實(shí)現(xiàn)”看起來(lái)像”同時(shí)處理更多的事情更是不在話下。這也是單片機(jī)程序能并發(fā)的物質(zhì)基礎(chǔ)之一。單片機(jī)雖然快,但我們也不能隨隨便便把所有任務(wù)都直接丟給單片機(jī)去處理,那樣會(huì)出問(wèn)題的。比如,我們?cè)趧傄唤佑|單片機(jī)程序設(shè)計(jì)時(shí),會(huì)這樣寫(xiě)程序://主程序: //中斷服務(wù)程序
void main() void ISR(void)
{ {
//初始化單片機(jī)系統(tǒng) Task1();
Task2();
Inital() Task3();
}
//超級(jí)循環(huán)
while(1)
{
Task1();
Task2();
Task3();
}
}
這樣寫(xiě)單片機(jī)程序會(huì)因?yàn)橐粋(gè)任務(wù)的“阻塞”而耽誤其他程序的實(shí)時(shí)響應(yīng)。比如,Task1,是一個(gè)按鍵掃描程序,其中有大概10ms的消抖時(shí)間,如果我們?cè)诔绦蛑兄苯訉?xiě)一個(gè)delay_10ms()程序,那么Task2和Task3勢(shì)必會(huì)因?yàn)檫@個(gè)延時(shí)而耽誤運(yùn)行。所以,為了解決類似這樣的沖突,我們提出了一種單片機(jī)程序設(shè)計(jì)模式,一種基于系統(tǒng)節(jié)拍時(shí)間的程序設(shè)計(jì)模式。這種設(shè)計(jì)模式的思想是,在一個(gè)系統(tǒng)節(jié)拍時(shí)間到來(lái),只運(yùn)行其中一任務(wù)(注意,一定是一個(gè)任務(wù))。所謂節(jié)拍時(shí)間是單片機(jī)系統(tǒng)提供給每一個(gè)任務(wù)的運(yùn)行時(shí)間。在實(shí)際應(yīng)用中,其實(shí)每個(gè)任務(wù)的最低響應(yīng)時(shí)間要求可以是不同的,比如,按鍵可以10 - 20ms掃描一次,動(dòng)態(tài)掃描的LED,總的刷新周期不超過(guò)20ms,人眼還是可以接受的,再比如,溫度數(shù)據(jù)采集甚至可以500ms一次,正因?yàn)檫@些差異我們可以實(shí)現(xiàn)單片機(jī)程序的“并發(fā)執(zhí)行“。
|
|